package cluster import ( "encoding/json" "time" "github.com/example/remote-access-platform/backend/internal/platform/clusterauth" ) const ( PlatformRoleAdmin = "platform_admin" PlatformRoleRecoveryAdmin = "platform_recovery_admin" ClusterStatusActive = "active" ClusterStatusDisabled = "disabled" JoinRequestStatusPending = "pending" JoinRequestStatusApproved = "approved" JoinRequestStatusRejected = "rejected" NodeRegistrationPending = "pending" NodeRegistrationActive = "active" DefaultClusterSlug = "default" VPNConnectionModeSingleActive = "single_active" VPNConnectionDesiredEnabled = "enabled" VPNConnectionDesiredDisabled = "disabled" VPNConnectionStatusDisabled = "disabled" VPNConnectionStatusEnabled = "enabled" VPNConnectionStatusConnecting = "connecting" VPNConnectionStatusActive = "active" VPNConnectionStatusDegraded = "degraded" VPNConnectionStatusFailed = "failed" VPNLeaseStatusActive = "active" VPNLeaseStatusReleased = "released" VPNLeaseStatusExpired = "expired" VPNLeaseStatusFenced = "fenced" VPNAssignmentStatusNotStarted = "not_started" VPNAssignmentStatusAssigned = "assigned" VPNAssignmentStatusLeaseRequired = "lease_required" VPNAssignmentStatusBlocked = "blocked" VPNAssignmentStatusUnknown = "unknown" ) var allowedNodeRoles = map[string]struct{}{ "entry-node": {}, "relay-node": {}, "core-mesh": {}, "rdp-worker": {}, "vnc-worker": {}, "vpn-exit": {}, "vpn-connector": {}, "file-storage-cache": {}, "update-cache": {}, "video-relay": {}, } type Cluster struct { ID string `json:"id"` Slug string `json:"slug"` Name string `json:"name"` Status string `json:"status"` Region *string `json:"region,omitempty"` Metadata json.RawMessage `json:"metadata"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ClusterNode struct { ID string `json:"id"` OwnerOrganizationID *string `json:"owner_organization_id,omitempty"` NodeKey string `json:"node_key"` Name string `json:"name"` OwnershipType string `json:"ownership_type"` RegistrationStatus string `json:"registration_status"` HealthStatus string `json:"health_status"` VersionState string `json:"version_state"` PartitionState string `json:"partition_state"` ReportedVersion *string `json:"reported_version,omitempty"` LastSeenAt *time.Time `json:"last_seen_at,omitempty"` MembershipStatus string `json:"membership_status"` MembershipMetadata json.RawMessage `json:"membership_metadata"` NodeGroupID *string `json:"node_group_id,omitempty"` NodeGroupName *string `json:"node_group_name,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ClusterNodeGroup struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` ParentGroupID *string `json:"parent_group_id,omitempty"` Name string `json:"name"` Description *string `json:"description,omitempty"` SortOrder int `json:"sort_order"` Metadata json.RawMessage `json:"metadata"` CreatedByUserID *string `json:"created_by_user_id,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type NodeJoinToken struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` Scope json.RawMessage `json:"scope"` ExpiresAt time.Time `json:"expires_at"` MaxUses int `json:"max_uses"` UsedCount int `json:"used_count"` Status string `json:"status"` CreatedByUserID *string `json:"created_by_user_id,omitempty"` CreatedAt time.Time `json:"created_at"` RevokedAt *time.Time `json:"revoked_at,omitempty"` AuthorityPayload json.RawMessage `json:"authority_payload,omitempty"` AuthoritySignature *ClusterSignature `json:"authority_signature,omitempty"` } type CreatedJoinToken struct { NodeJoinToken Token string `json:"token"` } type NodeBootstrap struct { NodeID string `json:"node_id"` ClusterID string `json:"cluster_id"` IdentityStatus string `json:"identity_status"` Certificate map[string]any `json:"certificate"` HeartbeatEndpoint string `json:"heartbeat_endpoint"` ClusterAuthority *ClusterAuthorityDescriptor `json:"cluster_authority,omitempty"` AuthorityPayload json.RawMessage `json:"authority_payload,omitempty"` AuthoritySignature *ClusterSignature `json:"authority_signature,omitempty"` } type NodeJoinRequest struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` JoinTokenID *string `json:"join_token_id,omitempty"` NodeName string `json:"node_name"` NodeFingerprint string `json:"node_fingerprint"` PublicKey string `json:"public_key"` ReportedCapabilities json.RawMessage `json:"reported_capabilities"` ReportedFacts json.RawMessage `json:"reported_facts"` RequestedRoles json.RawMessage `json:"requested_roles"` Status string `json:"status"` ReviewedByUserID *string `json:"reviewed_by_user_id,omitempty"` ReviewedAt *time.Time `json:"reviewed_at,omitempty"` ApprovedNodeID *string `json:"approved_node_id,omitempty"` RejectionReason *string `json:"rejection_reason,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` ApprovalPayload json.RawMessage `json:"approval_payload,omitempty"` ApprovalSignature json.RawMessage `json:"approval_signature,omitempty"` } type NodeRoleAssignment struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` NodeID string `json:"node_id"` OrganizationID *string `json:"organization_id,omitempty"` Role string `json:"role"` Status string `json:"status"` Policy json.RawMessage `json:"policy"` AssignedByUserID *string `json:"assigned_by_user_id,omitempty"` AssignedAt time.Time `json:"assigned_at"` RevokedAt *time.Time `json:"revoked_at,omitempty"` } type NodeHeartbeat struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` NodeID string `json:"node_id"` HealthStatus string `json:"health_status"` ReportedVersion *string `json:"reported_version,omitempty"` Capabilities json.RawMessage `json:"capabilities"` ServiceStates json.RawMessage `json:"service_states"` Metadata json.RawMessage `json:"metadata"` ObservedAt time.Time `json:"observed_at"` } type NodeWorkloadDesiredState struct { ClusterID string `json:"cluster_id"` NodeID string `json:"node_id"` ServiceType string `json:"service_type"` DesiredState string `json:"desired_state"` Version *string `json:"version,omitempty"` RuntimeMode string `json:"runtime_mode"` ArtifactRef *string `json:"artifact_ref,omitempty"` Config json.RawMessage `json:"config"` Environment json.RawMessage `json:"environment"` UpdatedByUserID *string `json:"updated_by_user_id,omitempty"` UpdatedAt time.Time `json:"updated_at"` } type NodeWorkloadStatus struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` NodeID string `json:"node_id"` ServiceType string `json:"service_type"` ReportedState string `json:"reported_state"` RuntimeMode string `json:"runtime_mode"` Version *string `json:"version,omitempty"` StatusPayload json.RawMessage `json:"status_payload"` ObservedAt time.Time `json:"observed_at"` } type MeshLinkObservation struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` SourceNodeID string `json:"source_node_id"` TargetNodeID string `json:"target_node_id"` LinkStatus string `json:"link_status"` LatencyMs *int `json:"latency_ms,omitempty"` QualityScore *int `json:"quality_score,omitempty"` Metadata json.RawMessage `json:"metadata"` ObservedAt time.Time `json:"observed_at"` } type MeshRouteIntent struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` SourceSelector json.RawMessage `json:"source_selector"` DestinationSelector json.RawMessage `json:"destination_selector"` ServiceClass string `json:"service_class"` Priority int `json:"priority"` Status string `json:"status"` Policy json.RawMessage `json:"policy"` CreatedByUserID *string `json:"created_by_user_id,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type SyntheticMeshRouteConfig struct { RouteID string `json:"route_id"` ClusterID string `json:"cluster_id"` SourceNodeID string `json:"source_node_id"` DestinationNodeID string `json:"destination_node_id"` Hops []string `json:"hops"` AllowedChannels []string `json:"allowed_channels"` ExpiresAt time.Time `json:"expires_at"` MaxTTL int `json:"max_ttl"` MaxHops int `json:"max_hops"` RouteVersion string `json:"route_version,omitempty"` PolicyVersion string `json:"policy_version,omitempty"` PeerDirectoryVersion string `json:"peer_directory_version,omitempty"` } type PeerEndpointCandidate struct { EndpointID string `json:"endpoint_id"` NodeID string `json:"node_id"` Transport string `json:"transport"` Address string `json:"address"` AddressFamily string `json:"address_family,omitempty"` Reachability string `json:"reachability"` NATType string `json:"nat_type,omitempty"` ConnectivityMode string `json:"connectivity_mode"` Region string `json:"region,omitempty"` Priority int `json:"priority"` PolicyTags []string `json:"policy_tags,omitempty"` LastVerifiedAt *time.Time `json:"last_verified_at,omitempty"` Metadata json.RawMessage `json:"metadata,omitempty"` } type PeerDirectoryEntry struct { NodeID string `json:"node_id"` RouteIDs []string `json:"route_ids,omitempty"` EndpointCount int `json:"endpoint_count"` CandidateCount int `json:"candidate_count"` ConnectivityModes []string `json:"connectivity_modes,omitempty"` RecoverySeed bool `json:"recovery_seed"` } type PeerRecoverySeed struct { NodeID string `json:"node_id"` Endpoint string `json:"endpoint"` Transport string `json:"transport"` ConnectivityMode string `json:"connectivity_mode,omitempty"` Region string `json:"region,omitempty"` Priority int `json:"priority"` LastVerifiedAt *time.Time `json:"last_verified_at,omitempty"` Metadata json.RawMessage `json:"metadata,omitempty"` } type PeerRendezvousLease struct { LeaseID string `json:"lease_id"` PeerNodeID string `json:"peer_node_id"` RelayNodeID string `json:"relay_node_id"` RelayEndpoint string `json:"relay_endpoint"` Transport string `json:"transport"` ConnectivityMode string `json:"connectivity_mode,omitempty"` RouteIDs []string `json:"route_ids,omitempty"` AllowedChannels []string `json:"allowed_channels,omitempty"` Priority int `json:"priority"` ControlPlaneOnly bool `json:"control_plane_only"` IssuedAt time.Time `json:"issued_at"` ExpiresAt time.Time `json:"expires_at"` Reason string `json:"reason,omitempty"` Metadata json.RawMessage `json:"metadata,omitempty"` } type RendezvousRelayPolicyDecision struct { RouteID string `json:"route_id,omitempty"` PeerNodeID string `json:"peer_node_id"` WithdrawnLeaseID string `json:"withdrawn_lease_id,omitempty"` StaleRelayNodeID string `json:"stale_relay_node_id,omitempty"` SelectedRelayID string `json:"selected_relay_id,omitempty"` SelectedEndpoint string `json:"selected_endpoint,omitempty"` Score int `json:"score,omitempty"` Reason string `json:"reason"` ScoreReasons []string `json:"score_reasons,omitempty"` ReporterNodeID string `json:"reporter_node_id,omitempty"` } type RendezvousRelayPolicyReport struct { SchemaVersion string `json:"schema_version"` ScoringMode string `json:"scoring_mode"` FeedbackMaxAgeSeconds int `json:"feedback_max_age_seconds"` StaleRelayCount int `json:"stale_relay_count"` WithdrawnLeaseCount int `json:"withdrawn_lease_count"` ReplacementLeaseCount int `json:"replacement_lease_count"` Decisions []RendezvousRelayPolicyDecision `json:"decisions,omitempty"` } type RoutePathDecision struct { DecisionID string `json:"decision_id"` RouteID string `json:"route_id"` ClusterID string `json:"cluster_id"` LocalNodeID string `json:"local_node_id"` SourceNodeID string `json:"source_node_id"` DestinationNodeID string `json:"destination_node_id"` OriginalHops []string `json:"original_hops"` EffectiveHops []string `json:"effective_hops"` PreviousHopID string `json:"previous_hop_id,omitempty"` NextHopID string `json:"next_hop_id,omitempty"` LocalRole string `json:"local_role"` SelectedRelayID string `json:"selected_relay_id,omitempty"` SelectedRelayEndpoint string `json:"selected_relay_endpoint,omitempty"` StaleRelayNodeID string `json:"stale_relay_node_id,omitempty"` RendezvousPeerNodeID string `json:"rendezvous_peer_node_id,omitempty"` RendezvousLeaseID string `json:"rendezvous_lease_id,omitempty"` RendezvousLeaseReason string `json:"rendezvous_lease_reason,omitempty"` DecisionSource string `json:"decision_source"` Generation string `json:"generation"` PathScore int `json:"path_score,omitempty"` ScoreReasons []string `json:"score_reasons,omitempty"` ControlPlaneOnly bool `json:"control_plane_only"` ProductionForwarding bool `json:"production_forwarding"` ExpiresAt time.Time `json:"expires_at"` } type RoutePathDecisionReport struct { SchemaVersion string `json:"schema_version"` DecisionMode string `json:"decision_mode"` Generation string `json:"generation"` DecisionCount int `json:"decision_count"` ReplacementDecisionCount int `json:"replacement_decision_count"` ControlPlaneOnly bool `json:"control_plane_only"` ProductionForwarding bool `json:"production_forwarding"` Decisions []RoutePathDecision `json:"decisions,omitempty"` } type NodeSyntheticMeshConfig struct { Enabled bool `json:"enabled"` SchemaVersion string `json:"schema_version"` ClusterID string `json:"cluster_id"` LocalNodeID string `json:"local_node_id"` AuthorityRequired bool `json:"authority_required"` ClusterAuthority *ClusterAuthorityDescriptor `json:"cluster_authority,omitempty"` AuthorityPayload json.RawMessage `json:"authority_payload,omitempty"` AuthoritySignature *ClusterSignature `json:"authority_signature,omitempty"` ConfigVersion string `json:"config_version,omitempty"` PeerDirectoryVersion string `json:"peer_directory_version,omitempty"` PolicyVersion string `json:"policy_version,omitempty"` PeerEndpoints map[string]string `json:"peer_endpoints"` PeerEndpointCandidates map[string][]PeerEndpointCandidate `json:"peer_endpoint_candidates,omitempty"` PeerDirectory []PeerDirectoryEntry `json:"peer_directory,omitempty"` RecoverySeeds []PeerRecoverySeed `json:"recovery_seeds,omitempty"` RendezvousLeases []PeerRendezvousLease `json:"rendezvous_leases,omitempty"` RendezvousRelayPolicy *RendezvousRelayPolicyReport `json:"rendezvous_relay_policy,omitempty"` RoutePathDecisions *RoutePathDecisionReport `json:"route_path_decisions,omitempty"` Routes []SyntheticMeshRouteConfig `json:"routes"` ProductionForwarding bool `json:"production_forwarding"` } type MeshQoSPolicy struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` ServiceClass string `json:"service_class"` Priority int `json:"priority"` ReliabilityMode string `json:"reliability_mode"` DropPolicy string `json:"drop_policy"` BandwidthPolicy json.RawMessage `json:"bandwidth_policy"` Metadata json.RawMessage `json:"metadata"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type FabricEntryPoint struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` Name string `json:"name"` Status string `json:"status"` EndpointType string `json:"endpoint_type"` PublicEndpoint *string `json:"public_endpoint,omitempty"` Policy json.RawMessage `json:"policy"` Metadata json.RawMessage `json:"metadata"` CreatedByUserID *string `json:"created_by_user_id,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type FabricEntryPointNode struct { EntryPointID string `json:"entry_point_id"` ClusterID string `json:"cluster_id"` NodeID string `json:"node_id"` Status string `json:"status"` Priority int `json:"priority"` Metadata json.RawMessage `json:"metadata"` AddedByUserID *string `json:"added_by_user_id,omitempty"` AddedAt time.Time `json:"added_at"` } type FabricEgressPool struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` Name string `json:"name"` Status string `json:"status"` Description *string `json:"description,omitempty"` RouteScope json.RawMessage `json:"route_scope"` Policy json.RawMessage `json:"policy"` Metadata json.RawMessage `json:"metadata"` CreatedByUserID *string `json:"created_by_user_id,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type FabricEgressPoolNode struct { EgressPoolID string `json:"egress_pool_id"` ClusterID string `json:"cluster_id"` NodeID string `json:"node_id"` Status string `json:"status"` Priority int `json:"priority"` Metadata json.RawMessage `json:"metadata"` AddedByUserID *string `json:"added_by_user_id,omitempty"` AddedAt time.Time `json:"added_at"` } type ClusterAuthorityState struct { ClusterID string `json:"cluster_id"` AuthorityState string `json:"authority_state"` MutationMode string `json:"mutation_mode"` Term int64 `json:"term"` Notes *string `json:"notes,omitempty"` UpdatedByUserID *string `json:"updated_by_user_id,omitempty"` UpdatedAt time.Time `json:"updated_at"` } type ClusterSignature = clusterauth.Signature type ClusterAuthorityDescriptor struct { SchemaVersion string `json:"schema_version"` ClusterID string `json:"cluster_id"` AuthorityState string `json:"authority_state"` KeyAlgorithm string `json:"key_algorithm"` PublicKey string `json:"public_key"` PublicKeyFingerprint string `json:"public_key_fingerprint"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ClusterAuthorityKey struct { ClusterAuthorityDescriptor PrivateKey string `json:"-"` } type ClusterAdminSummary struct { ClusterID string `json:"cluster_id"` Slug string `json:"slug"` Name string `json:"name"` Status string `json:"status"` Region *string `json:"region,omitempty"` AuthorityState string `json:"authority_state"` MutationMode string `json:"mutation_mode"` ClusterKeyAlgorithm *string `json:"cluster_key_algorithm,omitempty"` ClusterKeyFingerprint *string `json:"cluster_key_fingerprint,omitempty"` NodeCount int64 `json:"node_count"` HealthyNodeCount int64 `json:"healthy_node_count"` PendingJoinCount int64 `json:"pending_join_count"` ActiveRoleAssignmentCount int64 `json:"active_role_assignment_count"` LastNodeSeenAt *time.Time `json:"last_node_seen_at,omitempty"` } type ClusterAuditEvent struct { ID string `json:"id"` ClusterID *string `json:"cluster_id,omitempty"` ActorUserID *string `json:"actor_user_id,omitempty"` EventType string `json:"event_type"` TargetType string `json:"target_type"` TargetID *string `json:"target_id,omitempty"` Payload json.RawMessage `json:"payload"` CreatedAt time.Time `json:"created_at"` } type FabricTestingFlag struct { ID string `json:"id"` ScopeType string `json:"scope_type"` ScopeID *string `json:"scope_id,omitempty"` ClusterID *string `json:"cluster_id,omitempty"` Enabled bool `json:"enabled"` TelemetryEnabled bool `json:"telemetry_enabled"` SyntheticLinksEnabled bool `json:"synthetic_links_enabled"` HistoryRetentionHours int `json:"history_retention_hours"` Metadata json.RawMessage `json:"metadata"` UpdatedByUserID *string `json:"updated_by_user_id,omitempty"` UpdatedAt time.Time `json:"updated_at"` } type EffectiveNodeTestingFlags struct { Enabled bool `json:"enabled"` TelemetryEnabled bool `json:"telemetry_enabled"` SyntheticLinksEnabled bool `json:"synthetic_links_enabled"` HistoryRetentionHours int `json:"history_retention_hours"` AppliedScopes []string `json:"applied_scopes"` Metadata json.RawMessage `json:"metadata"` } type NodeTelemetryObservation struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` NodeID string `json:"node_id"` CPUPercent *float64 `json:"cpu_percent,omitempty"` MemoryUsedBytes *int64 `json:"memory_used_bytes,omitempty"` MemoryTotalBytes *int64 `json:"memory_total_bytes,omitempty"` DiskUsedBytes *int64 `json:"disk_used_bytes,omitempty"` DiskTotalBytes *int64 `json:"disk_total_bytes,omitempty"` NetworkRxBytes *int64 `json:"network_rx_bytes,omitempty"` NetworkTxBytes *int64 `json:"network_tx_bytes,omitempty"` ProcessCount *int `json:"process_count,omitempty"` Payload json.RawMessage `json:"payload"` ObservedAt time.Time `json:"observed_at"` } type VPNConnection struct { ID string `json:"id"` ClusterID string `json:"cluster_id"` OrganizationID string `json:"organization_id"` Name string `json:"name"` TargetEndpoint json.RawMessage `json:"target_endpoint"` ProtocolFamily string `json:"protocol_family"` CredentialRef *string `json:"credential_ref,omitempty"` Mode string `json:"mode"` DesiredState string `json:"desired_state"` AllowedNodePolicy json.RawMessage `json:"allowed_node_policy"` RoutingUsage json.RawMessage `json:"routing_usage"` RoutePolicy json.RawMessage `json:"route_policy"` QoSPolicy json.RawMessage `json:"qos_policy"` PlacementPolicy json.RawMessage `json:"placement_policy"` Status string `json:"status"` Metadata json.RawMessage `json:"metadata"` CreatedByUserID *string `json:"created_by_user_id,omitempty"` UpdatedByUserID *string `json:"updated_by_user_id,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type VPNConnectionAllowedNode struct { VPNConnectionID string `json:"vpn_connection_id"` ClusterID string `json:"cluster_id"` NodeID string `json:"node_id"` RolePreference string `json:"role_preference"` Status string `json:"status"` Metadata json.RawMessage `json:"metadata"` CreatedByUserID *string `json:"created_by_user_id,omitempty"` CreatedAt time.Time `json:"created_at"` } type VPNConnectionRoutePolicy struct { ID string `json:"id"` VPNConnectionID string `json:"vpn_connection_id"` ClusterID string `json:"cluster_id"` OrganizationID string `json:"organization_id"` RouteType string `json:"route_type"` Destination string `json:"destination"` Action string `json:"action"` ServiceType *string `json:"service_type,omitempty"` Priority int `json:"priority"` Policy json.RawMessage `json:"policy"` Status string `json:"status"` CreatedByUserID *string `json:"created_by_user_id,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type VPNConnectionLease struct { ID string `json:"id"` VPNConnectionID string `json:"vpn_connection_id"` ClusterID string `json:"cluster_id"` OwnerNodeID string `json:"owner_node_id"` LeaseGeneration int64 `json:"lease_generation"` FencingToken string `json:"fencing_token"` Status string `json:"status"` AcquiredAt time.Time `json:"acquired_at"` RenewedAt time.Time `json:"renewed_at"` ExpiresAt time.Time `json:"expires_at"` ReleasedAt *time.Time `json:"released_at,omitempty"` FencedAt *time.Time `json:"fenced_at,omitempty"` Metadata json.RawMessage `json:"metadata"` } type VPNLeaseOwnerEligibility struct { VPNConnectionID string `json:"vpn_connection_id"` ClusterID string `json:"cluster_id"` OrganizationID string `json:"organization_id"` OwnerNodeID string `json:"owner_node_id"` MembershipStatus string `json:"membership_status"` NodeRegistrationStatus string `json:"node_registration_status"` AllowedByPolicy bool `json:"allowed_by_policy"` HasAuthorizedRole bool `json:"has_authorized_role"` } type NodeVPNAssignmentLease struct { LeaseID string `json:"lease_id"` OwnerNodeID string `json:"owner_node_id"` LeaseGeneration int64 `json:"lease_generation"` Status string `json:"status"` RenewedAt time.Time `json:"renewed_at"` ExpiresAt time.Time `json:"expires_at"` } type NodeVPNAssignment struct { VPNConnectionID string `json:"vpn_connection_id"` ClusterID string `json:"cluster_id"` OrganizationID string `json:"organization_id"` Name string `json:"name"` TargetEndpoint json.RawMessage `json:"target_endpoint"` ProtocolFamily string `json:"protocol_family"` Mode string `json:"mode"` DesiredState string `json:"desired_state"` RoutingUsage json.RawMessage `json:"routing_usage"` RoutePolicy json.RawMessage `json:"route_policy"` QoSPolicy json.RawMessage `json:"qos_policy"` PlacementPolicy json.RawMessage `json:"placement_policy"` Status string `json:"status"` HasCredentialRef bool `json:"has_credential_ref"` AssignmentReason string `json:"assignment_reason"` ActiveLease *NodeVPNAssignmentLease `json:"active_lease,omitempty"` UpdatedAt time.Time `json:"updated_at"` } type NodeVPNAssignmentStatus struct { ID string `json:"id"` VPNConnectionID string `json:"vpn_connection_id"` ClusterID string `json:"cluster_id"` NodeID string `json:"node_id"` ObservedStatus string `json:"observed_status"` StatusPayload json.RawMessage `json:"status_payload"` ObservedAt time.Time `json:"observed_at"` } type CreateClusterInput struct { ActorUserID string Slug string Name string Region *string Metadata json.RawMessage } type UpdateClusterInput struct { ActorUserID string ClusterID string Name string Status string Region *string Metadata json.RawMessage } type CreateJoinTokenInput struct { ActorUserID string ClusterID string Scope json.RawMessage ExpiresAt time.Time MaxUses int } type CreateJoinRequestInput struct { ClusterID string JoinToken string NodeName string NodeFingerprint string PublicKey string ReportedCapabilities json.RawMessage ReportedFacts json.RawMessage RequestedRoles json.RawMessage } type GetJoinRequestBootstrapInput struct { ClusterID string JoinRequestID string NodeFingerprint string PublicKey string } type ApproveJoinRequestInput struct { ActorUserID string ClusterID string JoinRequestID string NodeKey string OwnershipType string OwnerOrganizationID *string } type ApprovedJoinRequest struct { JoinRequest NodeJoinRequest `json:"join_request"` Bootstrap NodeBootstrap `json:"node_bootstrap"` } type JoinRequestBootstrapResult struct { Status string `json:"status"` JoinRequest NodeJoinRequest `json:"join_request"` Bootstrap *NodeBootstrap `json:"node_bootstrap,omitempty"` } type RejectJoinRequestInput struct { ActorUserID string ClusterID string JoinRequestID string Reason string } type AssignNodeRoleInput struct { ActorUserID string ClusterID string NodeID string OrganizationID *string Role string Status string Policy json.RawMessage } type AttachExistingNodeInput struct { ActorUserID string ClusterID string NodeID string Roles []string } type CreateNodeGroupInput struct { ActorUserID string ClusterID string ParentGroupID *string Name string Description *string SortOrder int Metadata json.RawMessage } type AssignNodeGroupInput struct { ActorUserID string ClusterID string NodeID string GroupID *string } type RevokeJoinTokenInput struct { ActorUserID string ClusterID string TokenID string } type RevokeNodeIdentityInput struct { ActorUserID string ClusterID string NodeID string Reason string } type DisableMembershipInput struct { ActorUserID string ClusterID string NodeID string Reason string } type RecordHeartbeatInput struct { ClusterID string NodeID string HealthStatus string ReportedVersion *string Capabilities json.RawMessage ServiceStates json.RawMessage Metadata json.RawMessage } type UpsertFabricTestingFlagInput struct { ActorUserID string ScopeType string ScopeID *string ClusterID *string Enabled bool TelemetryEnabled bool SyntheticLinksEnabled bool HistoryRetentionHours int Metadata json.RawMessage } type RecordNodeTelemetryInput struct { ClusterID string NodeID string CPUPercent *float64 MemoryUsedBytes *int64 MemoryTotalBytes *int64 DiskUsedBytes *int64 DiskTotalBytes *int64 NetworkRxBytes *int64 NetworkTxBytes *int64 ProcessCount *int Payload json.RawMessage ObservedAt time.Time } type SetDesiredWorkloadInput struct { ActorUserID string ClusterID string NodeID string ServiceType string DesiredState string Version *string RuntimeMode string ArtifactRef *string Config json.RawMessage Environment json.RawMessage } type ReportWorkloadStatusInput struct { ClusterID string NodeID string ServiceType string ReportedState string RuntimeMode string Version *string StatusPayload json.RawMessage } type ReportMeshLinkInput struct { ClusterID string SourceNodeID string TargetNodeID string LinkStatus string LatencyMs *int QualityScore *int Metadata json.RawMessage } type GetNodeSyntheticMeshConfigInput struct { ClusterID string NodeID string } type CreateRouteIntentInput struct { ActorUserID string ClusterID string SourceSelector json.RawMessage DestinationSelector json.RawMessage ServiceClass string Priority int Policy json.RawMessage } type CreateFabricEntryPointInput struct { ActorUserID string ClusterID string Name string Status string EndpointType string PublicEndpoint *string Policy json.RawMessage Metadata json.RawMessage } type SetFabricEntryPointNodeInput struct { ActorUserID string ClusterID string EntryPointID string NodeID string Status string Priority int Metadata json.RawMessage } type CreateFabricEgressPoolInput struct { ActorUserID string ClusterID string Name string Status string Description *string RouteScope json.RawMessage Policy json.RawMessage Metadata json.RawMessage } type SetFabricEgressPoolNodeInput struct { ActorUserID string ClusterID string EgressPoolID string NodeID string Status string Priority int Metadata json.RawMessage } type UpdateClusterAuthorityInput struct { ActorUserID string ClusterID string AuthorityState string MutationMode string Notes *string } type CreateVPNConnectionInput struct { ActorUserID string ClusterID string OrganizationID string Name string TargetEndpoint json.RawMessage ProtocolFamily string CredentialRef *string Mode string DesiredState string AllowedNodePolicy json.RawMessage RoutingUsage json.RawMessage RoutePolicy json.RawMessage QoSPolicy json.RawMessage PlacementPolicy json.RawMessage Metadata json.RawMessage } type UpdateVPNConnectionDesiredStateInput struct { ActorUserID string ClusterID string VPNConnectionID string DesiredState string } type UpsertVPNConnectionRoutePolicyInput struct { ActorUserID string ClusterID string VPNConnectionID string RouteType string Destination string Action string ServiceType *string Priority int Policy json.RawMessage Status string } type SetVPNConnectionAllowedNodesInput struct { ActorUserID string ClusterID string VPNConnectionID string NodeIDs []string RolePreference string Metadata json.RawMessage } type AcquireVPNConnectionLeaseInput struct { ActorUserID string ClusterID string VPNConnectionID string OwnerNodeID string TTL time.Duration Metadata json.RawMessage } type RenewVPNConnectionLeaseInput struct { ActorUserID string ClusterID string VPNConnectionID string LeaseID string OwnerNodeID string FencingToken string TTL time.Duration } type ReleaseVPNConnectionLeaseInput struct { ActorUserID string ClusterID string VPNConnectionID string LeaseID string OwnerNodeID string FencingToken string } type FenceVPNConnectionLeaseInput struct { ActorUserID string ClusterID string VPNConnectionID string LeaseID string Reason string } type ExpireStaleVPNConnectionLeasesInput struct { ActorUserID string ClusterID string } type ReportNodeVPNAssignmentStatusInput struct { ClusterID string NodeID string VPNConnectionID string ObservedStatus string StatusPayload json.RawMessage ObservedAt time.Time }