1416 lines
38 KiB
TypeScript
1416 lines
38 KiB
TypeScript
export type Cluster = {
|
|
id: string;
|
|
slug: string;
|
|
name: string;
|
|
status: string;
|
|
region?: string | null;
|
|
metadata?: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at?: string;
|
|
};
|
|
|
|
export type AuthUser = {
|
|
ID?: string;
|
|
id?: string;
|
|
Email?: string;
|
|
email?: string;
|
|
};
|
|
|
|
export type AuthSession = {
|
|
ID?: string;
|
|
id?: string;
|
|
};
|
|
|
|
export type AuthTokens = {
|
|
access_token: string;
|
|
access_token_expires_at: string;
|
|
refresh_token: string;
|
|
refresh_token_expires_at: string;
|
|
};
|
|
|
|
export type AuthResult = {
|
|
user: AuthUser;
|
|
auth_session: AuthSession;
|
|
tokens: AuthTokens;
|
|
};
|
|
|
|
export type InstallationStatus = {
|
|
bootstrapped: boolean;
|
|
authority_state: string;
|
|
install_id?: string;
|
|
bootstrapped_owner_email?: string;
|
|
bootstrapped_at?: string;
|
|
authority_mode: string;
|
|
strict_authority: boolean;
|
|
root_fingerprint?: string;
|
|
insecure_bootstrap_allowed: boolean;
|
|
};
|
|
|
|
export type BootstrapOwnerResult = {
|
|
installation: InstallationStatus;
|
|
user: AuthUser;
|
|
platform_role: string;
|
|
};
|
|
|
|
export type ClusterAuthorityState = {
|
|
cluster_id: string;
|
|
authority_state: string;
|
|
mutation_mode: string;
|
|
term: number;
|
|
notes?: string | null;
|
|
updated_by_user_id?: string | null;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type ClusterNode = {
|
|
id: string;
|
|
owner_organization_id?: string | null;
|
|
node_key: string;
|
|
name: string;
|
|
ownership_type: string;
|
|
registration_status: string;
|
|
health_status: string;
|
|
version_state: string;
|
|
partition_state: string;
|
|
reported_version?: string | null;
|
|
last_seen_at?: string | null;
|
|
membership_status: string;
|
|
membership_metadata?: Record<string, unknown>;
|
|
node_group_id?: string | null;
|
|
node_group_name?: string | null;
|
|
created_at?: string;
|
|
updated_at?: string;
|
|
};
|
|
|
|
export type ClusterNodeGroup = {
|
|
id: string;
|
|
cluster_id: string;
|
|
parent_group_id?: string | null;
|
|
name: string;
|
|
description?: string | null;
|
|
sort_order: number;
|
|
metadata?: Record<string, unknown>;
|
|
created_by_user_id?: string | null;
|
|
created_at: string;
|
|
updated_at?: string;
|
|
};
|
|
|
|
export type JoinRequest = {
|
|
id: string;
|
|
cluster_id: string;
|
|
node_name: string;
|
|
node_fingerprint: string;
|
|
public_key?: string;
|
|
reported_capabilities: Record<string, unknown>;
|
|
reported_facts: Record<string, unknown>;
|
|
requested_roles: unknown[];
|
|
status: string;
|
|
reviewed_at?: string | null;
|
|
approved_node_id?: string | null;
|
|
rejection_reason?: string | null;
|
|
created_at: string;
|
|
updated_at?: string;
|
|
approval_payload?: Record<string, unknown>;
|
|
approval_signature?: ClusterSignature;
|
|
};
|
|
|
|
export type ClusterSignature = {
|
|
schema_version: string;
|
|
algorithm: string;
|
|
key_fingerprint: string;
|
|
signature: string;
|
|
signed_at: string;
|
|
};
|
|
|
|
export type ClusterAuthorityDescriptor = {
|
|
schema_version: string;
|
|
cluster_id: string;
|
|
authority_state: string;
|
|
key_algorithm: string;
|
|
public_key: string;
|
|
public_key_fingerprint: string;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type CreatedJoinToken = {
|
|
id: string;
|
|
cluster_id: string;
|
|
scope: Record<string, unknown>;
|
|
expires_at: string;
|
|
max_uses: number;
|
|
used_count: number;
|
|
status: string;
|
|
created_at: string;
|
|
revoked_at?: string | null;
|
|
authority_payload?: Record<string, unknown>;
|
|
authority_signature?: ClusterSignature;
|
|
token: string;
|
|
};
|
|
|
|
export type NodeJoinToken = Omit<CreatedJoinToken, "token">;
|
|
|
|
export type RoleAssignment = {
|
|
id: string;
|
|
cluster_id: string;
|
|
node_id: string;
|
|
organization_id?: string | null;
|
|
role: string;
|
|
status: string;
|
|
policy?: Record<string, unknown>;
|
|
assigned_at: string;
|
|
revoked_at?: string | null;
|
|
};
|
|
|
|
export type AuditEvent = {
|
|
id: string;
|
|
cluster_id?: string | null;
|
|
actor_user_id?: string | null;
|
|
event_type: string;
|
|
target_type: string;
|
|
target_id?: string | null;
|
|
payload: Record<string, unknown>;
|
|
correlation_hints?: AuditCorrelationHints;
|
|
created_at: string;
|
|
};
|
|
|
|
export type AuditCorrelationHints = {
|
|
scope?: string;
|
|
current_diagnostic_status?: string;
|
|
breadcrumb_status?: string;
|
|
breadcrumb_age_seconds?: number;
|
|
breadcrumb_current_window_seconds?: number;
|
|
breadcrumb_history_window_seconds?: number;
|
|
feedback_breakdown?: FabricServiceChannelRouteRebuildFeedbackHealthBreakdown;
|
|
rebuild_incident?: FabricServiceChannelRouteRebuildIncident;
|
|
recommended_action?: string;
|
|
};
|
|
|
|
export type AuditSummary = {
|
|
total_count: number;
|
|
counts_by_event_type?: Record<string, number>;
|
|
counts_by_target_type?: Record<string, number>;
|
|
counts_by_current_diagnostic_status?: Record<string, number>;
|
|
counts_by_feedback_source?: Record<string, number>;
|
|
counts_by_feedback_violation_status?: Record<string, number>;
|
|
counts_by_breadcrumb_status?: Record<string, number>;
|
|
correlated_count?: number;
|
|
not_visible_count?: number;
|
|
latest_at?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelRebuildInvestigationBreadcrumbs = {
|
|
cluster_id: string;
|
|
events: AuditEvent[];
|
|
summary: AuditSummary;
|
|
current_window_seconds?: number;
|
|
history_window_seconds?: number;
|
|
current_count?: number;
|
|
stale_count?: number;
|
|
expired_count?: number;
|
|
};
|
|
|
|
export type FabricServiceChannelBreadcrumbWindowPolicy = {
|
|
schema_version: string;
|
|
fingerprint?: string;
|
|
current_window_seconds: number;
|
|
history_window_seconds: number;
|
|
source: string;
|
|
updated_by_user_id?: string | null;
|
|
updated_at?: string;
|
|
control_plane_only: boolean;
|
|
production_forwarding: boolean;
|
|
};
|
|
|
|
export type WorkloadStatus = {
|
|
id: string;
|
|
cluster_id: string;
|
|
node_id: string;
|
|
service_type: string;
|
|
reported_state: string;
|
|
runtime_mode: string;
|
|
version?: string | null;
|
|
status_payload?: Record<string, unknown>;
|
|
observed_at: string;
|
|
};
|
|
|
|
export type NodeWorkloadDesiredState = {
|
|
cluster_id: string;
|
|
node_id: string;
|
|
service_type: string;
|
|
desired_state: string;
|
|
version?: string | null;
|
|
runtime_mode: string;
|
|
artifact_ref?: string | null;
|
|
config?: Record<string, unknown>;
|
|
environment?: Record<string, unknown>;
|
|
updated_by_user_id?: string | null;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type NodeHeartbeat = {
|
|
id: string;
|
|
cluster_id: string;
|
|
node_id: string;
|
|
health_status: string;
|
|
reported_version?: string | null;
|
|
capabilities?: Record<string, unknown>;
|
|
service_states?: Record<string, unknown>;
|
|
metadata?: Record<string, unknown>;
|
|
observed_at: string;
|
|
};
|
|
|
|
export type FabricTestingFlag = {
|
|
id: string;
|
|
scope_type: string;
|
|
scope_id?: string | null;
|
|
cluster_id?: string | null;
|
|
enabled: boolean;
|
|
telemetry_enabled: boolean;
|
|
synthetic_links_enabled: boolean;
|
|
history_retention_hours: number;
|
|
metadata?: Record<string, unknown>;
|
|
updated_by_user_id?: string | null;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type NodeTelemetryObservation = {
|
|
id: string;
|
|
cluster_id: string;
|
|
node_id: string;
|
|
cpu_percent?: number | null;
|
|
memory_used_bytes?: number | null;
|
|
memory_total_bytes?: number | null;
|
|
disk_used_bytes?: number | null;
|
|
disk_total_bytes?: number | null;
|
|
network_rx_bytes?: number | null;
|
|
network_tx_bytes?: number | null;
|
|
process_count?: number | null;
|
|
payload?: Record<string, unknown>;
|
|
observed_at: string;
|
|
};
|
|
|
|
export type ReleaseArtifact = {
|
|
id: string;
|
|
release_id: string;
|
|
cluster_id: string;
|
|
product: string;
|
|
version: string;
|
|
os: string;
|
|
arch: string;
|
|
install_type: string;
|
|
kind: string;
|
|
url: string;
|
|
sha256: string;
|
|
size_bytes: number;
|
|
signature?: string | null;
|
|
metadata?: Record<string, unknown>;
|
|
created_at: string;
|
|
};
|
|
|
|
export type ReleaseVersion = {
|
|
id: string;
|
|
cluster_id: string;
|
|
product: string;
|
|
version: string;
|
|
channel: string;
|
|
status: string;
|
|
compatibility?: Record<string, unknown>;
|
|
changelog?: string | null;
|
|
created_by_user_id?: string | null;
|
|
created_at: string;
|
|
artifacts?: ReleaseArtifact[];
|
|
authority_payload?: Record<string, unknown>;
|
|
authority_signature?: ClusterSignature;
|
|
};
|
|
|
|
export type NodeUpdatePlan = {
|
|
schema_version: string;
|
|
cluster_id: string;
|
|
node_id: string;
|
|
product: string;
|
|
current_version?: string;
|
|
action: string;
|
|
reason: string;
|
|
target_version?: string;
|
|
channel?: string;
|
|
strategy?: string;
|
|
rollback_allowed: boolean;
|
|
health_window_seconds?: number;
|
|
artifact?: ReleaseArtifact;
|
|
authority_payload?: Record<string, unknown>;
|
|
authority_signature?: ClusterSignature;
|
|
production_forwarding: boolean;
|
|
};
|
|
|
|
export type NodeUpdatePolicy = {
|
|
id: string;
|
|
cluster_id: string;
|
|
node_id: string;
|
|
product: string;
|
|
channel: string;
|
|
target_version?: string | null;
|
|
strategy: string;
|
|
enabled: boolean;
|
|
rollback_allowed: boolean;
|
|
health_window_seconds: number;
|
|
updated_by_user_id?: string | null;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type NodeUpdateStatus = {
|
|
id: string;
|
|
cluster_id: string;
|
|
node_id: string;
|
|
product: string;
|
|
current_version?: string;
|
|
target_version?: string;
|
|
phase: string;
|
|
status: string;
|
|
attempt_id?: string;
|
|
error_message?: string | null;
|
|
rollback_version?: string | null;
|
|
payload?: Record<string, unknown>;
|
|
observed_at: string;
|
|
};
|
|
|
|
export type MeshLink = {
|
|
id: string;
|
|
cluster_id: string;
|
|
source_node_id: string;
|
|
target_node_id: string;
|
|
link_status: string;
|
|
latency_ms?: number | null;
|
|
quality_score?: number | null;
|
|
metadata?: Record<string, unknown>;
|
|
observed_at: string;
|
|
};
|
|
|
|
export type MeshRouteIntent = {
|
|
id: string;
|
|
cluster_id: string;
|
|
source_selector: Record<string, unknown>;
|
|
destination_selector: Record<string, unknown>;
|
|
service_class: string;
|
|
priority: number;
|
|
status: string;
|
|
lifecycle_status?: string;
|
|
is_expired?: boolean;
|
|
policy_expires_at?: string | null;
|
|
policy: Record<string, unknown>;
|
|
created_by_user_id?: string | null;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type PeerEndpointCandidate = {
|
|
endpoint_id: string;
|
|
node_id: string;
|
|
transport: string;
|
|
address: string;
|
|
address_family?: string | null;
|
|
reachability: string;
|
|
nat_type?: string | null;
|
|
connectivity_mode: string;
|
|
region?: string | null;
|
|
priority: number;
|
|
policy_tags?: string[];
|
|
last_verified_at?: string | null;
|
|
metadata?: Record<string, unknown>;
|
|
};
|
|
|
|
export type PeerDirectoryEntry = {
|
|
node_id: string;
|
|
route_ids?: string[];
|
|
endpoint_count: number;
|
|
candidate_count: number;
|
|
connectivity_modes?: string[];
|
|
recovery_seed: boolean;
|
|
};
|
|
|
|
export type PeerRecoverySeed = {
|
|
node_id: string;
|
|
endpoint: string;
|
|
transport: string;
|
|
connectivity_mode?: string | null;
|
|
region?: string | null;
|
|
priority: number;
|
|
last_verified_at?: string | null;
|
|
metadata?: Record<string, unknown>;
|
|
};
|
|
|
|
export type PeerRendezvousLease = {
|
|
lease_id: string;
|
|
peer_node_id: string;
|
|
relay_node_id: string;
|
|
relay_endpoint: string;
|
|
transport: string;
|
|
connectivity_mode?: string | null;
|
|
route_ids?: string[];
|
|
allowed_channels?: string[];
|
|
priority: number;
|
|
control_plane_only: boolean;
|
|
issued_at: string;
|
|
expires_at: string;
|
|
reason?: string | null;
|
|
metadata?: Record<string, unknown>;
|
|
};
|
|
|
|
export type RendezvousRelayPolicyDecision = {
|
|
route_id?: string;
|
|
peer_node_id: string;
|
|
withdrawn_lease_id?: string;
|
|
stale_relay_node_id?: string;
|
|
selected_relay_id?: string;
|
|
selected_endpoint?: string;
|
|
score?: number;
|
|
reason: string;
|
|
score_reasons?: string[];
|
|
reporter_node_id?: string;
|
|
};
|
|
|
|
export type RendezvousRelayPolicyReport = {
|
|
schema_version: string;
|
|
scoring_mode: string;
|
|
feedback_max_age_seconds: number;
|
|
stale_relay_count: number;
|
|
withdrawn_lease_count: number;
|
|
replacement_lease_count: number;
|
|
decisions?: RendezvousRelayPolicyDecision[];
|
|
};
|
|
|
|
export type RoutePathDecision = {
|
|
decision_id: string;
|
|
route_id: string;
|
|
replacement_route_id?: string;
|
|
rebuild_request_id?: string;
|
|
rebuild_status?: string;
|
|
rebuild_reason?: string;
|
|
rebuild_attempt?: number;
|
|
feedback_observation_id?: string;
|
|
feedback_source?: string;
|
|
feedback_observed_at?: string;
|
|
feedback_expires_at?: string;
|
|
feedback_channel_id?: string;
|
|
feedback_resource_id?: string;
|
|
feedback_violation_status?: string;
|
|
feedback_violation_reason?: string;
|
|
cluster_id: string;
|
|
local_node_id: string;
|
|
source_node_id: string;
|
|
destination_node_id: string;
|
|
original_hops: string[];
|
|
effective_hops: string[];
|
|
previous_hop_id?: string;
|
|
next_hop_id?: string;
|
|
local_role: string;
|
|
selected_relay_id?: string;
|
|
selected_relay_endpoint?: string;
|
|
stale_relay_node_id?: string;
|
|
rendezvous_lease_id?: string;
|
|
rendezvous_lease_reason?: string;
|
|
decision_source: string;
|
|
generation: string;
|
|
path_score?: number;
|
|
score_reasons?: string[];
|
|
control_plane_only: boolean;
|
|
production_forwarding: boolean;
|
|
expires_at: string;
|
|
};
|
|
|
|
export type RoutePathDecisionReport = {
|
|
schema_version: string;
|
|
decision_mode: string;
|
|
generation: string;
|
|
recovery_policy?: FabricServiceChannelRecoveryPolicy;
|
|
decision_count: number;
|
|
replacement_decision_count: number;
|
|
degraded_decision_count?: number;
|
|
rebuild_request_count?: number;
|
|
rebuild_applied_count?: number;
|
|
recovery_hysteresis_count?: number;
|
|
recovery_promoted_count?: number;
|
|
recovery_demoted_count?: number;
|
|
control_plane_only: boolean;
|
|
production_forwarding: boolean;
|
|
decisions?: RoutePathDecision[];
|
|
};
|
|
|
|
export type SyntheticMeshRoute = {
|
|
route_id: string;
|
|
cluster_id: string;
|
|
source_node_id: string;
|
|
destination_node_id: string;
|
|
hops: string[];
|
|
allowed_channels: string[];
|
|
expires_at: string;
|
|
max_ttl: number;
|
|
max_hops: number;
|
|
route_version?: string;
|
|
policy_version?: string;
|
|
peer_directory_version?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelRouteFeedbackObservation = {
|
|
id?: string;
|
|
cluster_id: string;
|
|
reporter_node_id: string;
|
|
route_id: string;
|
|
service_class: string;
|
|
feedback_status: string;
|
|
score_adjustment: number;
|
|
reasons?: string[];
|
|
last_error?: string;
|
|
consecutive_failures?: number;
|
|
stall_count?: number;
|
|
last_send_duration_ms?: number;
|
|
payload?: Record<string, unknown>;
|
|
observed_at: string;
|
|
expires_at: string;
|
|
retry_cooldown_until?: string;
|
|
recovery_state?: string;
|
|
recovery_hysteresis_active?: boolean;
|
|
recovery_hysteresis_penalty?: number;
|
|
recovery_promoted?: boolean;
|
|
recovery_demoted?: boolean;
|
|
recovery_reason?: string;
|
|
observed_policy_fingerprint?: string;
|
|
effective_policy_fingerprint?: string;
|
|
observed_route_generation?: string;
|
|
effective_route_generation?: string;
|
|
provenance_missing?: boolean;
|
|
stale_policy?: boolean;
|
|
stale_generation?: boolean;
|
|
stale_reason?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelRouteRebuildAttempt = {
|
|
id: string;
|
|
cluster_id: string;
|
|
reporter_node_id: string;
|
|
service_class: string;
|
|
route_id: string;
|
|
replacement_route_id?: string;
|
|
rebuild_request_id: string;
|
|
rebuild_status: string;
|
|
rebuild_reason?: string;
|
|
rebuild_attempt?: number;
|
|
decision_source: string;
|
|
outcome: string;
|
|
generation?: string;
|
|
policy_fingerprint?: string;
|
|
observed_policy_fingerprint?: string;
|
|
observed_route_generation?: string;
|
|
effective_route_generation?: string;
|
|
feedback_status?: string;
|
|
feedback_observation_id?: string;
|
|
feedback_source?: string;
|
|
feedback_observed_at?: string;
|
|
feedback_expires_at?: string;
|
|
feedback_channel_id?: string;
|
|
feedback_resource_id?: string;
|
|
feedback_violation_status?: string;
|
|
feedback_violation_reason?: string;
|
|
feedback_score_adjustment?: number;
|
|
feedback_effective_score_adjustment?: number;
|
|
feedback_reasons?: string[];
|
|
last_error?: string;
|
|
consecutive_failures?: number;
|
|
stall_count?: number;
|
|
last_send_duration_ms?: number;
|
|
quality_window_sample_count?: number;
|
|
quality_window_failure_count?: number;
|
|
quality_window_drop_count?: number;
|
|
quality_window_slow_count?: number;
|
|
old_hops?: string[];
|
|
replacement_hops?: string[];
|
|
node_transition_status?: string;
|
|
node_transition_generation?: string;
|
|
node_transition_observed_at?: string;
|
|
node_transition_matched?: boolean;
|
|
node_route_generation_status?: string;
|
|
node_route_generation_applied_at?: string;
|
|
node_route_generation_withdrawn_at?: string;
|
|
node_route_generation_matched?: boolean;
|
|
post_rebuild_selected_route_id?: string;
|
|
post_rebuild_send_packets?: number;
|
|
post_rebuild_send_failures?: number;
|
|
post_rebuild_send_flow_packets?: number;
|
|
post_rebuild_send_flow_dropped?: number;
|
|
guard_status?: string;
|
|
guard_severity?: string;
|
|
guard_reason?: string;
|
|
guard_age_seconds?: number;
|
|
guard_transition_deadline_seconds?: number;
|
|
guard_traffic_deadline_seconds?: number;
|
|
alert_silenced?: boolean;
|
|
alert_silence_id?: string;
|
|
alert_silence_reason?: string;
|
|
alert_silenced_until?: string;
|
|
alert_resurfaced?: boolean;
|
|
alert_resurfaced_from_silence_id?: string;
|
|
alert_resurfaced_previous_generation?: string;
|
|
alert_resurfaced_previous_until?: string;
|
|
timeline?: FabricServiceChannelRouteRebuildTimelineEvent[];
|
|
payload?: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type FabricServiceChannelRouteRebuildTimelineEvent = {
|
|
stage: string;
|
|
status: string;
|
|
at?: string;
|
|
route_id?: string;
|
|
generation?: string;
|
|
payload?: Record<string, unknown>;
|
|
};
|
|
|
|
export type FabricServiceChannelRouteRebuildHealthSummary = {
|
|
cluster_id: string;
|
|
observed_at: string;
|
|
window_limit: number;
|
|
total_attempts: number;
|
|
good_count: number;
|
|
warn_count: number;
|
|
bad_count: number;
|
|
unknown_count: number;
|
|
active_bad_count: number;
|
|
active_warn_count: number;
|
|
silenced_count: number;
|
|
resurfaced_count: number;
|
|
applied_count: number;
|
|
pending_count: number;
|
|
access_route_decision_count?: number;
|
|
access_replacement_count?: number;
|
|
access_applied_count?: number;
|
|
access_recovery_count?: number;
|
|
access_no_safe_count?: number;
|
|
counts_by_guard_status?: Record<string, number>;
|
|
counts_by_guard_severity?: Record<string, number>;
|
|
feedback_breakdowns?: FabricServiceChannelRouteRebuildFeedbackHealthBreakdown[];
|
|
affected_reporter_node_ids?: string[];
|
|
affected_route_ids?: string[];
|
|
most_recent_bad_attempts?: FabricServiceChannelRouteRebuildAttempt[];
|
|
resurfaced_attempts?: FabricServiceChannelRouteRebuildAttempt[];
|
|
recommended_operator_action?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelRouteRebuildFeedbackHealthBreakdown = {
|
|
feedback_source?: string;
|
|
feedback_channel_id?: string;
|
|
feedback_violation_status?: string;
|
|
total_count: number;
|
|
good_count?: number;
|
|
warn_count?: number;
|
|
bad_count?: number;
|
|
unknown_count?: number;
|
|
active_warn_count?: number;
|
|
active_bad_count?: number;
|
|
silenced_count?: number;
|
|
latest_observed_at?: string;
|
|
affected_reporter_node_ids?: string[];
|
|
affected_route_ids?: string[];
|
|
};
|
|
|
|
export type FabricServiceChannelReadiness = {
|
|
cluster_id: string;
|
|
observed_at: string;
|
|
status: string;
|
|
reason: string;
|
|
active_alert_count: number;
|
|
active_bad_count: number;
|
|
active_warn_count: number;
|
|
resurfaced_count: number;
|
|
silenced_count: number;
|
|
missing_transition_count: number;
|
|
missing_route_generation_count: number;
|
|
missing_post_rebuild_traffic_count: number;
|
|
unexpected_route_count: number;
|
|
post_rebuild_degraded_count: number;
|
|
blocking_reasons?: string[];
|
|
degraded_reasons?: string[];
|
|
recommended_operator_action?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelSchemaStatus = {
|
|
cluster_id: string;
|
|
observed_at: string;
|
|
status: string;
|
|
reason: string;
|
|
required_migration: string;
|
|
required_check_count: number;
|
|
passed_check_count: number;
|
|
missing_check_count: number;
|
|
required_checks: FabricServiceChannelSchemaCheck[];
|
|
missing_checks?: FabricServiceChannelSchemaCheck[];
|
|
recommended_operator_action?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelSchemaCheck = {
|
|
check_id: string;
|
|
relation_name: string;
|
|
column_name?: string;
|
|
status: string;
|
|
required_by: string;
|
|
};
|
|
|
|
export type FabricServiceChannelRebuildSnapshotWarmup = {
|
|
cluster_id: string;
|
|
observed_at: string;
|
|
window_limit: number;
|
|
stale_after_seconds: number;
|
|
scanned_count: number;
|
|
warmed_count: number;
|
|
already_fresh_count: number;
|
|
missing_snapshot_count: number;
|
|
stale_snapshot_count: number;
|
|
deferred_stale_count: number;
|
|
error_count: number;
|
|
status: string;
|
|
reason: string;
|
|
recommended_operator_action?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelRebuildSnapshotMaintenanceHealth = {
|
|
cluster_id: string;
|
|
observed_at: string;
|
|
status: string;
|
|
reason: string;
|
|
window_limit: number;
|
|
min_age_seconds: number;
|
|
heartbeat_threshold: number;
|
|
recent_attempt_count: number;
|
|
valid_snapshot_count: number;
|
|
missing_snapshot_count: number;
|
|
overdue_missing_snapshot_count: number;
|
|
auto_warmup_event_count: number;
|
|
auto_warmup_warmed_count: number;
|
|
auto_warmup_already_fresh_count: number;
|
|
auto_warmup_error_count: number;
|
|
latest_auto_warmup_at?: string;
|
|
nodes?: FabricServiceChannelRebuildSnapshotNodeHealth[];
|
|
overdue_missing_snapshot_attempts?: FabricServiceChannelRouteRebuildAttempt[];
|
|
recommended_operator_action?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelRebuildSnapshotNodeHealth = {
|
|
node_id: string;
|
|
recent_attempt_count: number;
|
|
valid_snapshot_count: number;
|
|
missing_snapshot_count: number;
|
|
overdue_missing_snapshot_count: number;
|
|
heartbeat_after_attempt_count: number;
|
|
last_heartbeat_at?: string;
|
|
auto_warmup_event_count: number;
|
|
auto_warmup_warmed_count: number;
|
|
auto_warmup_error_count: number;
|
|
latest_auto_warmup_at?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelLeaseSummary = {
|
|
cluster_id: string;
|
|
channel_id: string;
|
|
resource_id?: string;
|
|
service_class: string;
|
|
status: string;
|
|
selected_entry_node_id?: string;
|
|
selected_exit_node_id?: string;
|
|
allowed_channels?: string[];
|
|
primary_route_id?: string;
|
|
primary_route_status?: string;
|
|
data_plane?: FabricServiceChannelDataPlaneContract;
|
|
force_backend_fallback: boolean;
|
|
expired: boolean;
|
|
issued_at: string;
|
|
expires_at: string;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type FabricServiceChannelLeaseMaintenance = {
|
|
schema_version: string;
|
|
cluster_id: string;
|
|
status: string;
|
|
reason: string;
|
|
observed_at: string;
|
|
active_count: number;
|
|
expired_count: number;
|
|
scanned_count: number;
|
|
deleted_expired_count?: number;
|
|
window_limit: number;
|
|
recommended_operator_action?: string;
|
|
leases?: FabricServiceChannelLeaseSummary[];
|
|
};
|
|
|
|
export type FabricServiceChannelDataPlaneContract = {
|
|
schema_version: string;
|
|
mode: string;
|
|
control_plane_transport: string;
|
|
working_data_transport: string;
|
|
steady_state_transport: string;
|
|
backend_relay_policy: string;
|
|
production_forwarding_required: boolean;
|
|
service_neutral: boolean;
|
|
protocol_agnostic: boolean;
|
|
logical_flow_mode: string;
|
|
required_flow_isolation_classes?: string[];
|
|
route_selection_strategy: string;
|
|
entry_failover_mode: string;
|
|
exit_failover_mode: string;
|
|
route_rebuild_mode: string;
|
|
failure_detection_source: string;
|
|
degraded_fallback_visibility: string;
|
|
stable_contract_for_service_class?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelAccessTelemetryNode = {
|
|
node_id: string;
|
|
node_name?: string;
|
|
observed_at: string;
|
|
total_accepted: number;
|
|
signed_accepted: number;
|
|
introspection_accepted: number;
|
|
legacy_unsigned_accepted: number;
|
|
backend_fallback_count: number;
|
|
backend_fallback_blocked_count?: number;
|
|
fabric_route_send_failure_count?: number;
|
|
data_plane_contract_count?: number;
|
|
last_data_plane_mode?: string;
|
|
last_working_data_transport?: string;
|
|
last_steady_state_transport?: string;
|
|
last_backend_relay_policy?: string;
|
|
last_logical_flow_mode?: string;
|
|
last_data_plane_violation_status?: string;
|
|
last_data_plane_violation_reason?: string;
|
|
traffic_class_counts?: Record<string, number>;
|
|
flow_channel_count?: number;
|
|
flow_dropped?: number;
|
|
flow_high_watermark?: number;
|
|
flow_max_in_flight?: number;
|
|
flow_health_status?: string;
|
|
flow_health_reason?: string;
|
|
recommended_parallel_windows?: Record<string, number>;
|
|
adaptive_backpressure_active?: boolean;
|
|
adaptive_backpressure_reason?: string;
|
|
adaptive_policy_fingerprint?: string;
|
|
last_accepted_at?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelAccessTelemetryChannel = {
|
|
channel_id: string;
|
|
resource_id?: string;
|
|
service_class: string;
|
|
status: string;
|
|
selected_entry_node_id?: string;
|
|
selected_exit_node_id?: string;
|
|
primary_route_id?: string;
|
|
primary_route_status?: string;
|
|
force_backend_fallback: boolean;
|
|
entry_node_total_accepted: number;
|
|
entry_node_introspection_accepted: number;
|
|
entry_node_backend_fallback_count: number;
|
|
entry_node_backend_fallback_blocked_count?: number;
|
|
entry_node_fabric_route_send_failure_count?: number;
|
|
entry_node_data_plane_contract_count?: number;
|
|
entry_node_last_data_plane_mode?: string;
|
|
entry_node_last_working_data_transport?: string;
|
|
entry_node_last_steady_state_transport?: string;
|
|
entry_node_last_backend_relay_policy?: string;
|
|
entry_node_last_logical_flow_mode?: string;
|
|
entry_node_last_data_plane_violation_status?: string;
|
|
entry_node_last_data_plane_violation_reason?: string;
|
|
entry_node_traffic_class_counts?: Record<string, number>;
|
|
entry_node_flow_channel_count?: number;
|
|
entry_node_flow_dropped?: number;
|
|
entry_node_flow_high_watermark?: number;
|
|
entry_node_flow_max_in_flight?: number;
|
|
entry_node_flow_health_status?: string;
|
|
entry_node_flow_health_reason?: string;
|
|
entry_node_recommended_parallel_windows?: Record<string, number>;
|
|
entry_node_adaptive_backpressure_active?: boolean;
|
|
entry_node_adaptive_backpressure_reason?: string;
|
|
entry_node_adaptive_policy_fingerprint?: string;
|
|
route_feedback_status?: string;
|
|
route_feedback_observed_at?: string;
|
|
route_feedback_score_adjustment?: number;
|
|
route_feedback_effective_score_adjustment?: number;
|
|
route_feedback_reasons?: string[];
|
|
route_quality_window_sample_count?: number;
|
|
route_quality_window_failure_count?: number;
|
|
route_quality_window_drop_count?: number;
|
|
route_quality_window_slow_count?: number;
|
|
last_send_duration_ms?: number;
|
|
remediation_action?: string;
|
|
remediation_reason?: string;
|
|
remediation_route_id?: string;
|
|
remediation_route_status?: string;
|
|
remediation_guard_status?: string;
|
|
remediation_guard_reason?: string;
|
|
remediation_execution_status?: string;
|
|
remediation_execution_reason?: string;
|
|
remediation_execution_generation?: string;
|
|
remediation_execution_observed_at?: string;
|
|
route_decision_source?: string;
|
|
route_decision_route_id?: string;
|
|
route_decision_replacement_route_id?: string;
|
|
route_decision_rebuild_status?: string;
|
|
route_decision_rebuild_reason?: string;
|
|
route_decision_generation?: string;
|
|
route_decision_score_reasons?: string[];
|
|
pool_policy_fingerprint?: string;
|
|
data_plane?: FabricServiceChannelDataPlaneContract;
|
|
remediation_command?: {
|
|
schema_version: string;
|
|
command_id: string;
|
|
action: string;
|
|
cluster_id: string;
|
|
channel_id: string;
|
|
resource_id?: string;
|
|
service_class: string;
|
|
entry_node_id?: string;
|
|
exit_node_id?: string;
|
|
primary_route_id?: string;
|
|
replacement_route_id?: string;
|
|
replacement_route_status?: string;
|
|
pool_policy_fingerprint?: string;
|
|
guard_status?: string;
|
|
guard_reason?: string;
|
|
execution_status?: string;
|
|
execution_reason?: string;
|
|
execution_generation?: string;
|
|
execution_observed_at?: string;
|
|
reason?: string;
|
|
operator_action?: string;
|
|
issued_at: string;
|
|
expires_at: string;
|
|
};
|
|
recommended_operator_action?: string;
|
|
expires_at: string;
|
|
};
|
|
|
|
export type FabricServiceChannelAccessTelemetry = {
|
|
schema_version: string;
|
|
cluster_id: string;
|
|
status: string;
|
|
reason: string;
|
|
observed_at: string;
|
|
node_count: number;
|
|
reporting_node_count: number;
|
|
total_accepted: number;
|
|
signed_accepted: number;
|
|
introspection_accepted: number;
|
|
legacy_unsigned_accepted: number;
|
|
backend_fallback_count: number;
|
|
backend_fallback_blocked_count?: number;
|
|
fabric_route_send_failure_count?: number;
|
|
data_plane_contract_count?: number;
|
|
last_data_plane_mode?: string;
|
|
last_working_data_transport?: string;
|
|
last_steady_state_transport?: string;
|
|
last_backend_relay_policy?: string;
|
|
last_logical_flow_mode?: string;
|
|
last_data_plane_violation_status?: string;
|
|
last_data_plane_violation_reason?: string;
|
|
active_channel_count: number;
|
|
degraded_fallback_channel_count: number;
|
|
correlated_route_count: number;
|
|
degraded_route_count: number;
|
|
route_decision_channel_count?: number;
|
|
replacement_decision_count?: number;
|
|
applied_rebuild_decision_count?: number;
|
|
recovery_decision_count?: number;
|
|
no_safe_recovery_decision_count?: number;
|
|
traffic_class_counts?: Record<string, number>;
|
|
flow_channel_count?: number;
|
|
flow_dropped?: number;
|
|
flow_high_watermark?: number;
|
|
flow_max_in_flight?: number;
|
|
flow_health_status?: string;
|
|
flow_health_reason?: string;
|
|
recommended_parallel_windows?: Record<string, number>;
|
|
adaptive_backpressure_active?: boolean;
|
|
adaptive_backpressure_reason?: string;
|
|
adaptive_policy_fingerprint?: string;
|
|
latest_accepted_at?: string;
|
|
nodes?: FabricServiceChannelAccessTelemetryNode[];
|
|
active_channels?: FabricServiceChannelAccessTelemetryChannel[];
|
|
recommended_operator_action?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelRouteRebuildIncident = {
|
|
fingerprint: string;
|
|
cluster_id: string;
|
|
reporter_node_id: string;
|
|
route_id: string;
|
|
service_class: string;
|
|
generation?: string;
|
|
incident_source?: string;
|
|
channel_id?: string;
|
|
guard_status: string;
|
|
guard_severity: string;
|
|
guard_reason?: string;
|
|
attempt_count: number;
|
|
first_seen_at: string;
|
|
last_seen_at: string;
|
|
latest_replacement_route_id?: string;
|
|
latest_rebuild_status?: string;
|
|
latest_outcome?: string;
|
|
alert_silenced?: boolean;
|
|
alert_resurfaced?: boolean;
|
|
alert_resurfaced_from_silence_id?: string;
|
|
alert_resurfaced_cause?: string;
|
|
alert_resurfaced_previous_route_id?: string;
|
|
alert_resurfaced_previous_channel_id?: string;
|
|
alert_resurfaced_previous_generation?: string;
|
|
alert_resurfaced_previous_until?: string;
|
|
recommended_operator_action?: string;
|
|
};
|
|
|
|
export type FabricServiceChannelRouteRebuildAlertSilence = {
|
|
id: string;
|
|
cluster_id: string;
|
|
incident_source?: string;
|
|
channel_id?: string;
|
|
reporter_node_id: string;
|
|
route_id: string;
|
|
display_route_id?: string;
|
|
guard_status: string;
|
|
generation?: string;
|
|
reason?: string;
|
|
created_by_user_id?: string | null;
|
|
created_at: string;
|
|
expires_at: string;
|
|
payload?: Record<string, unknown>;
|
|
};
|
|
|
|
export type ExpireFabricServiceChannelRouteFeedbackResult = {
|
|
cluster_id: string;
|
|
reporter_node_id?: string;
|
|
route_id: string;
|
|
service_class?: string;
|
|
expired_count: number;
|
|
expired_at: string;
|
|
cooldown_until: string;
|
|
};
|
|
|
|
export type FabricServiceChannelRouteFeedbackReport = {
|
|
schema_version: string;
|
|
generated_at: string;
|
|
feedback_max_age_seconds: number;
|
|
recovery_policy?: FabricServiceChannelRecoveryPolicy;
|
|
observation_count: number;
|
|
fenced_route_count: number;
|
|
degraded_route_count: number;
|
|
healthy_route_count: number;
|
|
recovered_route_count?: number;
|
|
recovery_hysteresis_count?: number;
|
|
recovery_promoted_count?: number;
|
|
recovery_demoted_count?: number;
|
|
missing_provenance_count?: number;
|
|
stale_policy_count?: number;
|
|
stale_generation_count?: number;
|
|
observations?: FabricServiceChannelRouteFeedbackObservation[];
|
|
};
|
|
|
|
export type FabricServiceChannelRecoveryPolicy = {
|
|
schema_version: string;
|
|
fingerprint?: string;
|
|
hysteresis_penalty: number;
|
|
promotion_min_samples: number;
|
|
demotion_failure_threshold: number;
|
|
demotion_drop_threshold: number;
|
|
demotion_slow_threshold: number;
|
|
demotion_rebuild_enabled: boolean;
|
|
demotion_fenced_enabled: boolean;
|
|
source: string;
|
|
updated_by_user_id?: string | null;
|
|
updated_at?: string;
|
|
control_plane_only: boolean;
|
|
production_forwarding: boolean;
|
|
};
|
|
|
|
export type FabricServiceChannelAdaptivePolicy = {
|
|
schema_version: string;
|
|
fingerprint?: string;
|
|
max_parallel_window: number;
|
|
bulk_pressure_channel_threshold: number;
|
|
queue_pressure_high_watermark: number;
|
|
queue_pressure_max_in_flight: number;
|
|
class_windows: Record<string, number>;
|
|
source: string;
|
|
updated_by_user_id?: string | null;
|
|
updated_at?: string;
|
|
control_plane_only: boolean;
|
|
production_forwarding: boolean;
|
|
};
|
|
|
|
export type FabricServiceChannelPoolPolicy = {
|
|
schema_version: string;
|
|
fingerprint?: string;
|
|
entry_pool_node_ids?: string[];
|
|
exit_pool_node_ids?: string[];
|
|
preferred_entry_node_id?: string;
|
|
preferred_exit_node_id?: string;
|
|
selection_strategy: string;
|
|
route_rebuild: string;
|
|
entry_failover: string;
|
|
exit_failover: string;
|
|
backend_fallback_allowed: boolean;
|
|
sticky_session: boolean;
|
|
source: string;
|
|
updated_by_user_id?: string | null;
|
|
updated_at?: string;
|
|
control_plane_only: boolean;
|
|
production_forwarding: boolean;
|
|
};
|
|
|
|
export type NodeSyntheticMeshConfig = {
|
|
enabled: boolean;
|
|
schema_version: string;
|
|
cluster_id: string;
|
|
local_node_id: string;
|
|
authority_required: boolean;
|
|
cluster_authority?: ClusterAuthorityDescriptor;
|
|
authority_payload?: Record<string, unknown>;
|
|
authority_signature?: ClusterSignature;
|
|
config_version?: string;
|
|
peer_directory_version?: string;
|
|
policy_version?: string;
|
|
peer_endpoints: Record<string, string>;
|
|
peer_endpoint_candidates?: Record<string, PeerEndpointCandidate[]>;
|
|
peer_directory?: PeerDirectoryEntry[];
|
|
recovery_seeds?: PeerRecoverySeed[];
|
|
rendezvous_leases?: PeerRendezvousLease[];
|
|
rendezvous_relay_policy?: RendezvousRelayPolicyReport;
|
|
route_path_decisions?: RoutePathDecisionReport;
|
|
service_channel_route_feedback?: FabricServiceChannelRouteFeedbackReport;
|
|
service_channel_adaptive_policy?: FabricServiceChannelAdaptivePolicy;
|
|
service_channel_remediation_commands?: FabricServiceChannelAccessTelemetryChannel["remediation_command"][];
|
|
mesh_listener?: {
|
|
schema_version: string;
|
|
source: string;
|
|
desired_state: string;
|
|
listen_addr: string;
|
|
listen_port_mode: string;
|
|
auto_port_start?: number;
|
|
auto_port_end?: number;
|
|
advertise_endpoint?: string;
|
|
advertise_transport?: string;
|
|
connectivity_mode?: string;
|
|
nat_type?: string;
|
|
region?: string;
|
|
config_version?: string;
|
|
updated_by_user_id?: string;
|
|
updated_at?: string;
|
|
control_plane_only: boolean;
|
|
production_forwarding: boolean;
|
|
};
|
|
routes: SyntheticMeshRoute[];
|
|
production_forwarding: boolean;
|
|
};
|
|
|
|
export type FabricEntryPoint = {
|
|
id: string;
|
|
cluster_id: string;
|
|
name: string;
|
|
status: string;
|
|
endpoint_type: string;
|
|
public_endpoint?: string | null;
|
|
policy?: Record<string, unknown>;
|
|
metadata?: Record<string, unknown>;
|
|
created_by_user_id?: string | null;
|
|
created_at: string;
|
|
updated_at?: string;
|
|
};
|
|
|
|
export type FabricEntryPointNode = {
|
|
entry_point_id: string;
|
|
cluster_id: string;
|
|
node_id: string;
|
|
status: string;
|
|
priority: number;
|
|
metadata?: Record<string, unknown>;
|
|
added_by_user_id?: string | null;
|
|
added_at: string;
|
|
};
|
|
|
|
export type FabricEgressPool = {
|
|
id: string;
|
|
cluster_id: string;
|
|
name: string;
|
|
status: string;
|
|
description?: string | null;
|
|
route_scope?: Record<string, unknown>;
|
|
policy?: Record<string, unknown>;
|
|
metadata?: Record<string, unknown>;
|
|
created_by_user_id?: string | null;
|
|
created_at: string;
|
|
updated_at?: string;
|
|
};
|
|
|
|
export type FabricEgressPoolNode = {
|
|
egress_pool_id: string;
|
|
cluster_id: string;
|
|
node_id: string;
|
|
status: string;
|
|
priority: number;
|
|
metadata?: Record<string, unknown>;
|
|
added_by_user_id?: string | null;
|
|
added_at: string;
|
|
};
|
|
|
|
export type QoSPolicy = {
|
|
id: string;
|
|
cluster_id: string;
|
|
service_class: string;
|
|
priority: number;
|
|
reliability_mode: string;
|
|
drop_policy: string;
|
|
bandwidth_policy?: Record<string, unknown>;
|
|
metadata?: Record<string, unknown>;
|
|
};
|
|
|
|
export type ClusterAdminSummary = {
|
|
cluster_id: string;
|
|
slug: string;
|
|
name: string;
|
|
status: string;
|
|
region?: string | null;
|
|
authority_state: string;
|
|
mutation_mode: string;
|
|
cluster_key_algorithm?: string | null;
|
|
cluster_key_fingerprint?: string | null;
|
|
node_count: number;
|
|
healthy_node_count: number;
|
|
pending_join_count: number;
|
|
active_role_assignment_count: number;
|
|
last_node_seen_at?: string | null;
|
|
};
|
|
|
|
export type OrganizationAdminSummary = {
|
|
organization_id: string;
|
|
resource_count: number;
|
|
active_session_count: number;
|
|
service_endpoints: Array<{ protocol: string; count: number }>;
|
|
connector_status: Record<string, unknown>;
|
|
topology_exposure: string;
|
|
};
|
|
|
|
export type Organization = {
|
|
id: string;
|
|
slug: string;
|
|
name: string;
|
|
status: string;
|
|
metadata?: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type OrganizationMembership = {
|
|
id: string;
|
|
organization_id: string;
|
|
user_id: string;
|
|
role_id: string;
|
|
status: string;
|
|
invited_by_user_id?: string | null;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type UserAccount = {
|
|
id: string;
|
|
email: string;
|
|
mfa_enabled: boolean;
|
|
platform_role: string;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type Resource = {
|
|
id: string;
|
|
organization_id: string;
|
|
name: string;
|
|
address: string;
|
|
protocol: string;
|
|
secret_ref?: string | null;
|
|
has_secret?: boolean;
|
|
certificate_verification_mode: string;
|
|
render_quality_profile?: string;
|
|
clipboard_mode: string;
|
|
file_transfer_mode: string;
|
|
metadata?: Record<string, unknown>;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type VPNConnection = {
|
|
id: string;
|
|
cluster_id: string;
|
|
organization_id: string;
|
|
name: string;
|
|
target_endpoint: Record<string, unknown>;
|
|
protocol_family: string;
|
|
credential_ref?: string | null;
|
|
mode: string;
|
|
desired_state: string;
|
|
allowed_node_policy: Record<string, unknown>;
|
|
routing_usage: unknown[];
|
|
route_policy: Record<string, unknown>;
|
|
qos_policy: Record<string, unknown>;
|
|
placement_policy: Record<string, unknown>;
|
|
status: string;
|
|
metadata: Record<string, unknown>;
|
|
created_by_user_id?: string | null;
|
|
updated_by_user_id?: string | null;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
|
|
export type VPNConnectionLease = {
|
|
id: string;
|
|
vpn_connection_id: string;
|
|
cluster_id: string;
|
|
owner_node_id: string;
|
|
lease_generation: number;
|
|
fencing_token: string;
|
|
status: string;
|
|
acquired_at: string;
|
|
renewed_at: string;
|
|
expires_at: string;
|
|
released_at?: string | null;
|
|
fenced_at?: string | null;
|
|
metadata: Record<string, unknown>;
|
|
};
|
|
|
|
export type VPNPacketDirectionStats = {
|
|
pushed: number;
|
|
popped: number;
|
|
dropped: number;
|
|
queue_depth: number;
|
|
last_push_size: number;
|
|
last_pop_size: number;
|
|
last_push_at?: string;
|
|
last_pop_at?: string;
|
|
};
|
|
|
|
export type VPNPacketStats = {
|
|
client_to_gateway?: VPNPacketDirectionStats;
|
|
gateway_to_client?: VPNPacketDirectionStats;
|
|
};
|
|
|
|
export type VPNClientDiagnosticStatus = {
|
|
cluster_id: string;
|
|
device_id: string;
|
|
payload: Record<string, unknown>;
|
|
observed_at: string;
|
|
};
|
|
|
|
export type VPNClientDiagnosticCommand = {
|
|
id: string;
|
|
cluster_id: string;
|
|
device_id: string;
|
|
payload: Record<string, unknown>;
|
|
created_at: string;
|
|
};
|