@opensoha/contracts 0.1.19 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/auth/catalog_generated.go +2 -2
  2. package/auth/permission-catalog.json +81 -1
  3. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  4. package/compat/openapi-loose-boundaries-0.1.0.json +1 -1
  5. package/fixtures/json-schema/network-ingest-event/invalid/proxy-runtime-negative-total.json +19 -0
  6. package/fixtures/json-schema/network-ingest-event/valid/proxy-runtime-sample.json +20 -0
  7. package/fixtures/json-schema/proxy-runtime/invalid/v2ray-connection-snapshot.json +10 -0
  8. package/fixtures/json-schema/proxy-runtime/valid/mihomo-observation.json +16 -0
  9. package/fixtures/openapi/AgentPrometheusQueryRequest/invalid/basic.json +5 -0
  10. package/fixtures/openapi/AgentPrometheusQueryRequest/invalid/missing-range-fields.json +5 -0
  11. package/fixtures/openapi/AgentPrometheusQueryRequest/invalid/zero-start.json +8 -0
  12. package/fixtures/openapi/AgentPrometheusQueryRequest/valid/basic.json +8 -0
  13. package/fixtures/openapi/AgentPrometheusQueryRequest/valid/instant.json +5 -0
  14. package/fixtures/openapi/ClusterAgentUpgradeInput/invalid/image.json +1 -0
  15. package/fixtures/openapi/ClusterAgentUpgradeInput/invalid/missing.json +1 -0
  16. package/fixtures/openapi/ClusterAgentUpgradeInput/invalid/mutable-tag.json +1 -0
  17. package/fixtures/openapi/ClusterAgentUpgradeInput/valid/stable.json +1 -0
  18. package/fixtures/openapi/ClusterAgentUpgradeInput/valid/unprefixed.json +1 -0
  19. package/fixtures/openapi/KubernetesAgentCustomResourceRule/invalid/basic.json +9 -0
  20. package/fixtures/openapi/KubernetesAgentCustomResourceRule/valid/basic.json +14 -0
  21. package/fixtures/openapi/KubernetesAgentCustomResourceRule/valid/dns-names.json +1 -0
  22. package/fixtures/openapi/KubernetesClusterRegistrationRequest/invalid/basic.json +4 -0
  23. package/fixtures/openapi/KubernetesClusterRegistrationRequest/valid/basic.json +6 -0
  24. package/fixtures/openapi/KubernetesConfigMapDataInput/invalid/basic.json +5 -0
  25. package/fixtures/openapi/KubernetesConfigMapDataInput/valid/basic.json +8 -0
  26. package/fixtures/openapi/KubernetesCronJobSuspendInput/invalid/basic.json +3 -0
  27. package/fixtures/openapi/KubernetesCronJobSuspendInput/valid/basic.json +3 -0
  28. package/fixtures/openapi/KubernetesCustomResourceAccess/invalid/basic.json +5 -0
  29. package/fixtures/openapi/KubernetesCustomResourceAccess/valid/basic.json +6 -0
  30. package/fixtures/openapi/KubernetesCustomResourceDefinition/invalid/empty-uid.json +1 -0
  31. package/fixtures/openapi/KubernetesCustomResourceDefinition/valid/deleting-definition.json +1 -0
  32. package/fixtures/openapi/KubernetesNamespaceCreateInput/invalid/basic.json +1 -0
  33. package/fixtures/openapi/KubernetesNamespaceCreateInput/valid/basic.json +1 -0
  34. package/fixtures/openapi/KubernetesNodeDrainInput/invalid/basic.json +3 -0
  35. package/fixtures/openapi/KubernetesNodeDrainInput/valid/basic.json +3 -0
  36. package/fixtures/openapi/KubernetesNodeSchedulabilityInput/invalid/basic.json +1 -0
  37. package/fixtures/openapi/KubernetesNodeSchedulabilityInput/valid/basic.json +3 -0
  38. package/fixtures/openapi/KubernetesResourceUpdatePlanRequest/valid/range-kind.json +5 -0
  39. package/fixtures/openapi/KubernetesResourceYaml/valid/range-kind.json +5 -0
  40. package/fixtures/openapi/KubernetesSecretDataInput/invalid/basic.json +5 -0
  41. package/fixtures/openapi/KubernetesSecretDataInput/valid/basic.json +5 -0
  42. package/fixtures/openapi/NetworkProxyConfigurationInput/invalid/empty-content.json +1 -0
  43. package/fixtures/openapi/NetworkProxyConfigurationInput/valid/enabled.json +1 -0
  44. package/fixtures/openapi/NetworkProxyInstanceInput/invalid/unknown-engine.json +1 -0
  45. package/fixtures/openapi/NetworkProxyInstanceInput/valid/mihomo.json +1 -0
  46. package/gen/go/sohaapi/client.go +1 -1
  47. package/gen/go/sohaapi/client_test.go +25 -0
  48. package/gen/go/sohaapi/types.go +122 -24
  49. package/gen/ts/sohaapi/index.ts +266 -1
  50. package/go.mod +4 -4
  51. package/go.sum +4 -4
  52. package/network/README.md +12 -0
  53. package/network/network-ingest-event.schema.json +21 -3
  54. package/network/network-runtime-protocol.schema.json +2 -2
  55. package/network/proxy-runtime.schema.json +113 -0
  56. package/network/schema.go +7 -0
  57. package/openapi/soha-api.json +938 -4
  58. package/openapi/soha-api.yaml +389 -3
  59. package/openapi/spec_generated.go +3 -3
  60. package/package.json +2 -1
  61. package/resource/agent_access.go +23 -0
  62. package/resource/models.go +2 -0
@@ -4340,6 +4340,39 @@ func (e KubernetesAccessReviewSubjectKind) Valid() bool {
4340
4340
  }
4341
4341
  }
4342
4342
 
4343
+ // Defines values for KubernetesAgentCustomResourceRuleVerbs.
4344
+ const (
4345
+ KubernetesAgentCustomResourceRuleVerbsCreate KubernetesAgentCustomResourceRuleVerbs = "create"
4346
+ KubernetesAgentCustomResourceRuleVerbsDelete KubernetesAgentCustomResourceRuleVerbs = "delete"
4347
+ KubernetesAgentCustomResourceRuleVerbsGet KubernetesAgentCustomResourceRuleVerbs = "get"
4348
+ KubernetesAgentCustomResourceRuleVerbsList KubernetesAgentCustomResourceRuleVerbs = "list"
4349
+ KubernetesAgentCustomResourceRuleVerbsPatch KubernetesAgentCustomResourceRuleVerbs = "patch"
4350
+ KubernetesAgentCustomResourceRuleVerbsUpdate KubernetesAgentCustomResourceRuleVerbs = "update"
4351
+ KubernetesAgentCustomResourceRuleVerbsWatch KubernetesAgentCustomResourceRuleVerbs = "watch"
4352
+ )
4353
+
4354
+ // Valid indicates whether the value is a known member of the KubernetesAgentCustomResourceRuleVerbs enum.
4355
+ func (e KubernetesAgentCustomResourceRuleVerbs) Valid() bool {
4356
+ switch e {
4357
+ case KubernetesAgentCustomResourceRuleVerbsCreate:
4358
+ return true
4359
+ case KubernetesAgentCustomResourceRuleVerbsDelete:
4360
+ return true
4361
+ case KubernetesAgentCustomResourceRuleVerbsGet:
4362
+ return true
4363
+ case KubernetesAgentCustomResourceRuleVerbsList:
4364
+ return true
4365
+ case KubernetesAgentCustomResourceRuleVerbsPatch:
4366
+ return true
4367
+ case KubernetesAgentCustomResourceRuleVerbsUpdate:
4368
+ return true
4369
+ case KubernetesAgentCustomResourceRuleVerbsWatch:
4370
+ return true
4371
+ default:
4372
+ return false
4373
+ }
4374
+ }
4375
+
4343
4376
  // Defines values for KubernetesConnectionMode.
4344
4377
  const (
4345
4378
  KubernetesConnectionModeAgent KubernetesConnectionMode = "agent"
@@ -4421,6 +4454,24 @@ func (e KubernetesImportedTargetWorkloadKind) Valid() bool {
4421
4454
  }
4422
4455
  }
4423
4456
 
4457
+ // Defines values for KubernetesPrometheusTransport.
4458
+ const (
4459
+ Agent KubernetesPrometheusTransport = "agent"
4460
+ Direct KubernetesPrometheusTransport = "direct"
4461
+ )
4462
+
4463
+ // Valid indicates whether the value is a known member of the KubernetesPrometheusTransport enum.
4464
+ func (e KubernetesPrometheusTransport) Valid() bool {
4465
+ switch e {
4466
+ case Agent:
4467
+ return true
4468
+ case Direct:
4469
+ return true
4470
+ default:
4471
+ return false
4472
+ }
4473
+ }
4474
+
4424
4475
  // Defines values for KubernetesRelatedResourceKind.
4425
4476
  const (
4426
4477
  KubernetesRelatedResourceKindHorizontalPodAutoscaler KubernetesRelatedResourceKind = "HorizontalPodAutoscaler"
@@ -6769,6 +6820,7 @@ const (
6769
6820
  NetworkRuntimeKindEndpoint NetworkRuntimeKind = "endpoint"
6770
6821
  NetworkRuntimeKindGateway NetworkRuntimeKind = "gateway"
6771
6822
  NetworkRuntimeKindNAS NetworkRuntimeKind = "nas"
6823
+ NetworkRuntimeKindProxy NetworkRuntimeKind = "proxy"
6772
6824
  )
6773
6825
 
6774
6826
  // Valid indicates whether the value is a known member of the NetworkRuntimeKind enum.
@@ -6780,6 +6832,8 @@ func (e NetworkRuntimeKind) Valid() bool {
6780
6832
  return true
6781
6833
  case NetworkRuntimeKindNAS:
6782
6834
  return true
6835
+ case NetworkRuntimeKindProxy:
6836
+ return true
6783
6837
  default:
6784
6838
  return false
6785
6839
  }
@@ -17945,6 +17999,19 @@ type KubernetesAdmissionWebhookRule struct {
17945
17999
  Scope string `json:"scope,omitempty"`
17946
18000
  }
17947
18001
 
18002
+ // KubernetesAgentCustomResourceRule defines model for KubernetesAgentCustomResourceRule.
18003
+ type KubernetesAgentCustomResourceRule struct {
18004
+ APIGroup string `json:"apiGroup"`
18005
+
18006
+ // Namespaces Explicit namespaces; omitted or empty grants cluster-wide access to the named resources only.
18007
+ Namespaces []string `json:"namespaces,omitempty"`
18008
+ Resources []string `json:"resources"`
18009
+ Verbs []KubernetesAgentCustomResourceRuleVerbs `json:"verbs"`
18010
+ }
18011
+
18012
+ // KubernetesAgentCustomResourceRuleVerbs defines model for KubernetesAgentCustomResourceRule.Verbs.
18013
+ type KubernetesAgentCustomResourceRuleVerbs string
18014
+
17948
18015
  // KubernetesBackendTLSPolicy defines model for KubernetesBackendTLSPolicy.
17949
18016
  type KubernetesBackendTLSPolicy struct {
17950
18017
  AgeSeconds int64 `json:"ageSeconds"`
@@ -17993,15 +18060,16 @@ type KubernetesCacheResourceDiagnostic struct {
17993
18060
 
17994
18061
  // KubernetesClusterConnectionDetail defines model for KubernetesClusterConnectionDetail.
17995
18062
  type KubernetesClusterConnectionDetail struct {
17996
- Context string `json:"context,omitempty"`
17997
- CredentialType string `json:"credentialType"`
17998
- Endpoint string `json:"endpoint,omitempty"`
17999
- HasInlineKubeconfig bool `json:"hasInlineKubeconfig"`
18000
- HasToken bool `json:"hasToken"`
18001
- Mode KubernetesConnectionMode `json:"mode"`
18002
- SourceRef string `json:"sourceRef,omitempty"`
18003
- SourceType string `json:"sourceType"`
18004
- UsesInformerCache bool `json:"usesInformerCache"`
18063
+ Context string `json:"context,omitempty"`
18064
+ CredentialType string `json:"credentialType"`
18065
+ CustomResourceRules []KubernetesAgentCustomResourceRule `json:"customResourceRules,omitempty"`
18066
+ Endpoint string `json:"endpoint,omitempty"`
18067
+ HasInlineKubeconfig bool `json:"hasInlineKubeconfig"`
18068
+ HasToken bool `json:"hasToken"`
18069
+ Mode KubernetesConnectionMode `json:"mode"`
18070
+ SourceRef string `json:"sourceRef,omitempty"`
18071
+ SourceType string `json:"sourceType"`
18072
+ UsesInformerCache bool `json:"usesInformerCache"`
18005
18073
  }
18006
18074
 
18007
18075
  // KubernetesClusterDetail defines model for KubernetesClusterDetail.
@@ -18240,16 +18308,18 @@ type KubernetesCustomResource struct {
18240
18308
 
18241
18309
  // KubernetesCustomResourceDefinition defines model for KubernetesCustomResourceDefinition.
18242
18310
  type KubernetesCustomResourceDefinition struct {
18243
- AgeSeconds int64 `json:"ageSeconds"`
18244
- AllowedActions []string `json:"allowedActions,omitempty"`
18245
- CreatedAt string `json:"createdAt,omitempty"`
18246
- Group string `json:"group"`
18247
- Kind string `json:"kind"`
18248
- Name string `json:"name"`
18249
- Plural string `json:"plural"`
18250
- Scope string `json:"scope"`
18251
- Version string `json:"version,omitempty"`
18252
- Versions []string `json:"versions,omitempty"`
18311
+ AgeSeconds int64 `json:"ageSeconds"`
18312
+ AllowedActions []string `json:"allowedActions,omitempty"`
18313
+ CreatedAt string `json:"createdAt,omitempty"`
18314
+ DeletingAt *time.Time `json:"deletingAt,omitempty"`
18315
+ Group string `json:"group"`
18316
+ Kind string `json:"kind"`
18317
+ Name string `json:"name"`
18318
+ Plural string `json:"plural"`
18319
+ Scope string `json:"scope"`
18320
+ UID string `json:"uid,omitempty"`
18321
+ Version string `json:"version,omitempty"`
18322
+ Versions []string `json:"versions,omitempty"`
18253
18323
  }
18254
18324
 
18255
18325
  // KubernetesCustomResourceDefinitionListEnvelope defines model for KubernetesCustomResourceDefinitionListEnvelope.
@@ -19642,12 +19712,16 @@ type KubernetesPriorityClassListEnvelope struct {
19642
19712
 
19643
19713
  // KubernetesPrometheusDetail defines model for KubernetesPrometheusDetail.
19644
19714
  type KubernetesPrometheusDetail struct {
19645
- BaseURL string `json:"baseUrl,omitempty"`
19646
- ClusterLabel string `json:"clusterLabel,omitempty"`
19647
- GrafanaBaseURL string `json:"grafanaBaseUrl,omitempty"`
19648
- HasBearerToken bool `json:"hasBearerToken"`
19715
+ BaseURL string `json:"baseUrl,omitempty"`
19716
+ ClusterLabel string `json:"clusterLabel,omitempty"`
19717
+ GrafanaBaseURL string `json:"grafanaBaseUrl,omitempty"`
19718
+ HasBearerToken bool `json:"hasBearerToken"`
19719
+ Transport KubernetesPrometheusTransport `json:"transport,omitempty"`
19649
19720
  }
19650
19721
 
19722
+ // KubernetesPrometheusTransport defines model for KubernetesPrometheusTransport.
19723
+ type KubernetesPrometheusTransport string
19724
+
19651
19725
  // KubernetesReferenceGrant defines model for KubernetesReferenceGrant.
19652
19726
  type KubernetesReferenceGrant struct {
19653
19727
  AgeSeconds int64 `json:"ageSeconds"`
@@ -23031,7 +23105,7 @@ type NetworkRuntimeEnrollmentEnvelope struct {
23031
23105
  Data NetworkRuntimeEnrollment `json:"data"`
23032
23106
  }
23033
23107
 
23034
- // NetworkRuntimeEnrollmentInput defines model for NetworkRuntimeEnrollmentInput.
23108
+ // NetworkRuntimeEnrollmentInput For proxy runtimes, runtimeId identifies an existing proxy instance and deviceId and subjectId must equal runtimeId.
23035
23109
  type NetworkRuntimeEnrollmentInput struct {
23036
23110
  DeviceID string `json:"deviceId"`
23037
23111
  RuntimeID string `json:"runtimeId"`
@@ -39916,3 +39990,27 @@ const ListAIGatewayRelayUpstreamsParamsStatusDegraded ListAIGatewayRelayUpstream
39916
39990
 
39917
39991
  // Deprecated: retained for Go SDK source compatibility.
39918
39992
  const ListAIGatewayRelayUpstreamsParamsStatusDisabled ListAIGatewayRelayUpstreamsParamsStatus = "disabled"
39993
+
39994
+ // Deprecated: retained for Go SDK source compatibility.
39995
+ const RuntimeNetworkUsageScopeNetworkNamespace RuntimeNetworkUsageScope = "network_namespace"
39996
+
39997
+ // Deprecated: retained for Go SDK source compatibility.
39998
+ const RuntimeNetworkUsageScopeProcess RuntimeNetworkUsageScope = "process"
39999
+
40000
+ // Deprecated: retained for Go SDK source compatibility.
40001
+ const RuntimeNetworkUsageScopeUnavailable RuntimeNetworkUsageScope = "unavailable"
40002
+
40003
+ // Deprecated: retained for Go SDK source compatibility.
40004
+ const WorkbenchAgentStatusEventStatusCancelled WorkbenchAgentStatusEventStatus = "cancelled"
40005
+
40006
+ // Deprecated: retained for Go SDK source compatibility.
40007
+ const WorkbenchAgentStatusEventStatusFailed WorkbenchAgentStatusEventStatus = "failed"
40008
+
40009
+ // Deprecated: retained for Go SDK source compatibility.
40010
+ const WorkbenchAgentStatusEventStatusQueued WorkbenchAgentStatusEventStatus = "queued"
40011
+
40012
+ // Deprecated: retained for Go SDK source compatibility.
40013
+ const WorkbenchAgentStatusEventStatusRunning WorkbenchAgentStatusEventStatus = "running"
40014
+
40015
+ // Deprecated: retained for Go SDK source compatibility.
40016
+ const WorkbenchAgentStatusEventStatusSucceeded WorkbenchAgentStatusEventStatus = "succeeded"
@@ -19567,12 +19567,64 @@ export interface components {
19567
19567
  hasInlineKubeconfig: boolean;
19568
19568
  hasToken: boolean;
19569
19569
  usesInformerCache: boolean;
19570
+ customResourceRules?: components["schemas"]["KubernetesAgentCustomResourceRule"][];
19571
+ };
19572
+ KubernetesCustomResourceAccess: {
19573
+ allowedActions: ("list" | "view" | "create" | "update" | "delete")[];
19574
+ };
19575
+ KubernetesCustomResourceAccessEnvelope: {
19576
+ data: components["schemas"]["KubernetesCustomResourceAccess"];
19577
+ };
19578
+ KubernetesClusterRegistrationRequest: {
19579
+ id?: string;
19580
+ name?: string;
19581
+ region?: string;
19582
+ environment?: string;
19583
+ labels?: {
19584
+ [key: string]: string;
19585
+ };
19586
+ connectionMode?: components["schemas"]["KubernetesConnectionMode"];
19587
+ kubeconfig?: string;
19588
+ context?: string;
19589
+ agentEndpoint?: string;
19590
+ agentToken?: string;
19591
+ prometheusBaseUrl?: string;
19592
+ prometheusBearerToken?: string;
19593
+ prometheusClusterLabel?: string;
19594
+ grafanaBaseUrl?: string;
19595
+ prometheusTransport?: components["schemas"]["KubernetesPrometheusTransport"];
19596
+ agentCustomResourceRules?: components["schemas"]["KubernetesAgentCustomResourceRule"][];
19597
+ };
19598
+ KubernetesAgentCustomResourceRule: {
19599
+ apiGroup: string;
19600
+ resources: string[];
19601
+ verbs: ("get" | "list" | "watch" | "create" | "update" | "patch" | "delete")[];
19602
+ /** @description Explicit namespaces; omitted or empty grants cluster-wide access to the named resources only. */
19603
+ namespaces?: string[];
19604
+ };
19605
+ /**
19606
+ * @default direct
19607
+ * @enum {string}
19608
+ */
19609
+ KubernetesPrometheusTransport: "direct" | "agent";
19610
+ /** @description Range queries require start, end and step. The runtime also enforces end greater than start, a maximum 24-hour range and at most 11000 intervals. */
19611
+ AgentPrometheusQueryRequest: {
19612
+ endpoint: string;
19613
+ query: string;
19614
+ /** @enum {string} */
19615
+ kind: "instant" | "range";
19616
+ /** Format: int64 */
19617
+ start?: number;
19618
+ /** Format: int64 */
19619
+ end?: number;
19620
+ step?: number;
19570
19621
  };
19571
19622
  KubernetesPrometheusDetail: {
19572
19623
  baseUrl?: string;
19573
19624
  clusterLabel?: string;
19574
19625
  grafanaBaseUrl?: string;
19575
19626
  hasBearerToken: boolean;
19627
+ transport?: components["schemas"]["KubernetesPrometheusTransport"];
19576
19628
  };
19577
19629
  KubernetesMonitoringDetail: {
19578
19630
  prometheus: components["schemas"]["KubernetesPrometheusDetail"];
@@ -20256,6 +20308,62 @@ export interface components {
20256
20308
  KubernetesConfigMapListEnvelope: {
20257
20309
  items: components["schemas"]["KubernetesConfigMap"][];
20258
20310
  };
20311
+ KubernetesNamespaceInput: {
20312
+ name?: string;
20313
+ labels?: components["schemas"]["KubernetesStringMap"];
20314
+ annotations?: components["schemas"]["KubernetesStringMap"];
20315
+ };
20316
+ KubernetesNamespaceCreateInput: {
20317
+ name: string;
20318
+ labels?: components["schemas"]["KubernetesStringMap"];
20319
+ annotations?: components["schemas"]["KubernetesStringMap"];
20320
+ };
20321
+ KubernetesNamespaceEnvelope: {
20322
+ data: components["schemas"]["KubernetesNamespace"];
20323
+ };
20324
+ KubernetesNodeUpdateInput: {
20325
+ labels?: components["schemas"]["KubernetesStringMap"];
20326
+ taints?: components["schemas"]["KubernetesNodeTaint"][];
20327
+ };
20328
+ KubernetesNodeSchedulabilityInput: {
20329
+ unschedulable: boolean;
20330
+ };
20331
+ KubernetesNodeDrainInput: {
20332
+ force?: boolean;
20333
+ deleteEmptyDirData?: boolean;
20334
+ /** @default 300 */
20335
+ timeoutSeconds?: number;
20336
+ };
20337
+ KubernetesResourceYamlInput: {
20338
+ content: string;
20339
+ };
20340
+ KubernetesConfigMapDataInput: {
20341
+ data?: components["schemas"]["KubernetesStringMap"];
20342
+ binaryData?: components["schemas"]["KubernetesStringMap"];
20343
+ };
20344
+ /** @description Data values are plain text. The response detail returns Kubernetes Base64-encoded values. */
20345
+ KubernetesSecretDataInput: {
20346
+ data?: components["schemas"]["KubernetesStringMap"];
20347
+ };
20348
+ KubernetesCronJobSuspendInput: {
20349
+ suspend: boolean;
20350
+ };
20351
+ KubernetesSecretDetail: {
20352
+ name: string;
20353
+ namespace: string;
20354
+ labels?: components["schemas"]["KubernetesStringMap"];
20355
+ annotations?: components["schemas"]["KubernetesStringMap"];
20356
+ /** @description Secret data values encoded with standard Base64. Requires secret-data.view. */
20357
+ data?: components["schemas"]["KubernetesStringMap"];
20358
+ immutable: boolean;
20359
+ createdAt?: string;
20360
+ /** Format: int64 */
20361
+ ageSeconds: number;
20362
+ type: string;
20363
+ };
20364
+ KubernetesSecretDetailEnvelope: {
20365
+ data: components["schemas"]["KubernetesSecretDetail"];
20366
+ };
20259
20367
  KubernetesConfigMapDetail: {
20260
20368
  name: string;
20261
20369
  namespace: string;
@@ -21275,6 +21383,9 @@ export interface components {
21275
21383
  data: components["schemas"]["KubernetesIngressClassDetail"];
21276
21384
  };
21277
21385
  KubernetesCustomResourceDefinition: {
21386
+ uid?: string;
21387
+ /** Format: date-time */
21388
+ deletingAt?: string;
21278
21389
  name: string;
21279
21390
  group: string;
21280
21391
  scope: string;
@@ -21662,6 +21773,32 @@ export interface components {
21662
21773
  PlatformOperationSummaryEnvelope: {
21663
21774
  data: components["schemas"]["PlatformOperationSummary"];
21664
21775
  };
21776
+ ClusterAgentUpgradeInput: {
21777
+ /** @description Explicit stable official Agent version, such as v0.1.7. Registry and container identity cannot be overridden. */
21778
+ version: string;
21779
+ };
21780
+ ClusterAgentUpgradeStatus: {
21781
+ /** @description Version reported by the currently connected Agent process. */
21782
+ version: string;
21783
+ /** @description Desired image of the standard Agent Deployment. */
21784
+ image: string;
21785
+ /** @description Agent version bundled with this Core release. */
21786
+ recommendedVersion: string;
21787
+ rolloutStatus: string;
21788
+ message: string;
21789
+ canUpgrade: boolean;
21790
+ upgradeDisabledReason?: string;
21791
+ };
21792
+ ClusterAgentUpgradeStatusEnvelope: {
21793
+ data: components["schemas"]["ClusterAgentUpgradeStatus"];
21794
+ };
21795
+ ClusterAgentUpgradeResult: {
21796
+ previousImage: string;
21797
+ targetImage: string;
21798
+ };
21799
+ ClusterAgentUpgradeResultEnvelope: {
21800
+ data: components["schemas"]["ClusterAgentUpgradeResult"];
21801
+ };
21665
21802
  AgentInstallation: {
21666
21803
  clusterId: string;
21667
21804
  /** Format: uri */
@@ -25555,9 +25692,101 @@ export interface components {
25555
25692
  items: components["schemas"]["NetworkSiteProfileBinding"][];
25556
25693
  };
25557
25694
  /** @enum {string} */
25558
- NetworkRuntimeKind: "endpoint" | "gateway" | "nas";
25695
+ NetworkProxyEngine: "mihomo" | "sing-box" | "v2ray";
25696
+ NetworkProxyInstanceInput: {
25697
+ id: string;
25698
+ name: string;
25699
+ engine: components["schemas"]["NetworkProxyEngine"];
25700
+ host?: string;
25701
+ };
25702
+ /** @enum {string} */
25703
+ NetworkProxyInstanceStatus: "unregistered" | "online" | "degraded" | "offline" | "disabled";
25704
+ /** @enum {string} */
25705
+ NetworkProxyCapability: "traffic" | "connections" | "close_connection";
25706
+ NetworkProxyInstance: {
25707
+ id: string;
25708
+ name: string;
25709
+ engine: components["schemas"]["NetworkProxyEngine"];
25710
+ enabled: boolean;
25711
+ host?: string;
25712
+ engineVersion?: string;
25713
+ status: components["schemas"]["NetworkProxyInstanceStatus"];
25714
+ capabilities: components["schemas"]["NetworkProxyCapability"][];
25715
+ /** Format: int64 */
25716
+ desiredRevision: number;
25717
+ /** Format: int64 */
25718
+ observedRevision: number;
25719
+ /** Format: date-time */
25720
+ lastSeenAt?: string;
25721
+ /** Format: date-time */
25722
+ lastSampleAt?: string;
25723
+ reasonCode?: string;
25724
+ /** Format: date-time */
25725
+ createdAt: string;
25726
+ /** Format: date-time */
25727
+ updatedAt: string;
25728
+ };
25729
+ NetworkProxyInstanceEnvelope: {
25730
+ data: components["schemas"]["NetworkProxyInstance"];
25731
+ };
25732
+ NetworkProxyInstanceListEnvelope: {
25733
+ items: components["schemas"]["NetworkProxyInstance"][];
25734
+ };
25735
+ NetworkProxyConfigurationInput: {
25736
+ /** Format: int64 */
25737
+ expectedRevision: number;
25738
+ enabled: boolean;
25739
+ /** Format: password */
25740
+ content: string;
25741
+ };
25742
+ NetworkProxyTrafficSample: {
25743
+ /** Format: date-time */
25744
+ observedAt: string;
25745
+ /** Format: int64 */
25746
+ uploadTotal: number;
25747
+ /** Format: int64 */
25748
+ downloadTotal: number;
25749
+ uploadBytesPerSecond: number;
25750
+ downloadBytesPerSecond: number;
25751
+ activeConnections?: number;
25752
+ };
25753
+ NetworkProxyTrafficEnvelope: {
25754
+ instanceId: string;
25755
+ supported: boolean;
25756
+ samples: components["schemas"]["NetworkProxyTrafficSample"][];
25757
+ };
25758
+ NetworkProxyConnection: {
25759
+ id: string;
25760
+ destination: string;
25761
+ /** @enum {string} */
25762
+ network: "tcp" | "udp" | "other";
25763
+ /** Format: int64 */
25764
+ uploadBytes: number;
25765
+ /** Format: int64 */
25766
+ downloadBytes: number;
25767
+ /** Format: date-time */
25768
+ startedAt?: string;
25769
+ };
25770
+ NetworkProxyConnectionsEnvelope: {
25771
+ instanceId: string;
25772
+ /** @enum {string} */
25773
+ state: "available" | "unsupported" | "unavailable";
25774
+ /** Format: date-time */
25775
+ observedAt?: string;
25776
+ connections: components["schemas"]["NetworkProxyConnection"][];
25777
+ };
25778
+ NetworkProxyCloseCommandEnvelope: {
25779
+ commandId: string;
25780
+ /** @enum {string} */
25781
+ status: "pending" | "closed" | "not-found" | "failed" | "expired";
25782
+ /** Format: date-time */
25783
+ expiresAt: string;
25784
+ };
25785
+ /** @enum {string} */
25786
+ NetworkRuntimeKind: "endpoint" | "gateway" | "nas" | "proxy";
25559
25787
  /** @enum {string} */
25560
25788
  NetworkRuntimeEnrollmentStatus: "pending" | "consumed" | "revoked";
25789
+ /** @description For proxy runtimes, runtimeId identifies an existing proxy instance and deviceId and subjectId must equal runtimeId. */
25561
25790
  NetworkRuntimeEnrollmentInput: {
25562
25791
  runtimeId: string;
25563
25792
  runtimeKind: components["schemas"]["NetworkRuntimeKind"];
@@ -27117,6 +27346,12 @@ export type KubernetesClusterListEnvelope = components['schemas']['KubernetesClu
27117
27346
  export type KubernetesCacheResourceDiagnostic = components['schemas']['KubernetesCacheResourceDiagnostic'];
27118
27347
  export type KubernetesClusterDiagnostics = components['schemas']['KubernetesClusterDiagnostics'];
27119
27348
  export type KubernetesClusterConnectionDetail = components['schemas']['KubernetesClusterConnectionDetail'];
27349
+ export type KubernetesCustomResourceAccess = components['schemas']['KubernetesCustomResourceAccess'];
27350
+ export type KubernetesCustomResourceAccessEnvelope = components['schemas']['KubernetesCustomResourceAccessEnvelope'];
27351
+ export type KubernetesClusterRegistrationRequest = components['schemas']['KubernetesClusterRegistrationRequest'];
27352
+ export type KubernetesAgentCustomResourceRule = components['schemas']['KubernetesAgentCustomResourceRule'];
27353
+ export type KubernetesPrometheusTransport = components['schemas']['KubernetesPrometheusTransport'];
27354
+ export type AgentPrometheusQueryRequest = components['schemas']['AgentPrometheusQueryRequest'];
27120
27355
  export type KubernetesPrometheusDetail = components['schemas']['KubernetesPrometheusDetail'];
27121
27356
  export type KubernetesMonitoringDetail = components['schemas']['KubernetesMonitoringDetail'];
27122
27357
  export type KubernetesClusterDetail = components['schemas']['KubernetesClusterDetail'];
@@ -27197,6 +27432,18 @@ export type KubernetesReplicationControllerDetail = components['schemas']['Kuber
27197
27432
  export type KubernetesReplicationControllerDetailEnvelope = components['schemas']['KubernetesReplicationControllerDetailEnvelope'];
27198
27433
  export type KubernetesConfigMap = components['schemas']['KubernetesConfigMap'];
27199
27434
  export type KubernetesConfigMapListEnvelope = components['schemas']['KubernetesConfigMapListEnvelope'];
27435
+ export type KubernetesNamespaceInput = components['schemas']['KubernetesNamespaceInput'];
27436
+ export type KubernetesNamespaceCreateInput = components['schemas']['KubernetesNamespaceCreateInput'];
27437
+ export type KubernetesNamespaceEnvelope = components['schemas']['KubernetesNamespaceEnvelope'];
27438
+ export type KubernetesNodeUpdateInput = components['schemas']['KubernetesNodeUpdateInput'];
27439
+ export type KubernetesNodeSchedulabilityInput = components['schemas']['KubernetesNodeSchedulabilityInput'];
27440
+ export type KubernetesNodeDrainInput = components['schemas']['KubernetesNodeDrainInput'];
27441
+ export type KubernetesResourceYamlInput = components['schemas']['KubernetesResourceYamlInput'];
27442
+ export type KubernetesConfigMapDataInput = components['schemas']['KubernetesConfigMapDataInput'];
27443
+ export type KubernetesSecretDataInput = components['schemas']['KubernetesSecretDataInput'];
27444
+ export type KubernetesCronJobSuspendInput = components['schemas']['KubernetesCronJobSuspendInput'];
27445
+ export type KubernetesSecretDetail = components['schemas']['KubernetesSecretDetail'];
27446
+ export type KubernetesSecretDetailEnvelope = components['schemas']['KubernetesSecretDetailEnvelope'];
27200
27447
  export type KubernetesConfigMapDetail = components['schemas']['KubernetesConfigMapDetail'];
27201
27448
  export type KubernetesConfigMapDetailEnvelope = components['schemas']['KubernetesConfigMapDetailEnvelope'];
27202
27449
  export type KubernetesSecretMetadata = components['schemas']['KubernetesSecretMetadata'];
@@ -27369,6 +27616,11 @@ export type PlatformOperationLog = components['schemas']['PlatformOperationLog']
27369
27616
  export type PlatformOperationLogListEnvelope = components['schemas']['PlatformOperationLogListEnvelope'];
27370
27617
  export type PlatformOperationSummary = components['schemas']['PlatformOperationSummary'];
27371
27618
  export type PlatformOperationSummaryEnvelope = components['schemas']['PlatformOperationSummaryEnvelope'];
27619
+ export type ClusterAgentUpgradeInput = components['schemas']['ClusterAgentUpgradeInput'];
27620
+ export type ClusterAgentUpgradeStatus = components['schemas']['ClusterAgentUpgradeStatus'];
27621
+ export type ClusterAgentUpgradeStatusEnvelope = components['schemas']['ClusterAgentUpgradeStatusEnvelope'];
27622
+ export type ClusterAgentUpgradeResult = components['schemas']['ClusterAgentUpgradeResult'];
27623
+ export type ClusterAgentUpgradeResultEnvelope = components['schemas']['ClusterAgentUpgradeResultEnvelope'];
27372
27624
  export type AgentInstallation = components['schemas']['AgentInstallation'];
27373
27625
  export type AgentInstallationEnvelope = components['schemas']['AgentInstallationEnvelope'];
27374
27626
  export type DockerHostAgentInstallation = components['schemas']['DockerHostAgentInstallation'];
@@ -27846,6 +28098,19 @@ export type NetworkSiteProfileBindingInput = components['schemas']['NetworkSiteP
27846
28098
  export type NetworkSiteProfileBinding = components['schemas']['NetworkSiteProfileBinding'];
27847
28099
  export type NetworkSiteProfileBindingEnvelope = components['schemas']['NetworkSiteProfileBindingEnvelope'];
27848
28100
  export type NetworkSiteProfileBindingListEnvelope = components['schemas']['NetworkSiteProfileBindingListEnvelope'];
28101
+ export type NetworkProxyEngine = components['schemas']['NetworkProxyEngine'];
28102
+ export type NetworkProxyInstanceInput = components['schemas']['NetworkProxyInstanceInput'];
28103
+ export type NetworkProxyInstanceStatus = components['schemas']['NetworkProxyInstanceStatus'];
28104
+ export type NetworkProxyCapability = components['schemas']['NetworkProxyCapability'];
28105
+ export type NetworkProxyInstance = components['schemas']['NetworkProxyInstance'];
28106
+ export type NetworkProxyInstanceEnvelope = components['schemas']['NetworkProxyInstanceEnvelope'];
28107
+ export type NetworkProxyInstanceListEnvelope = components['schemas']['NetworkProxyInstanceListEnvelope'];
28108
+ export type NetworkProxyConfigurationInput = components['schemas']['NetworkProxyConfigurationInput'];
28109
+ export type NetworkProxyTrafficSample = components['schemas']['NetworkProxyTrafficSample'];
28110
+ export type NetworkProxyTrafficEnvelope = components['schemas']['NetworkProxyTrafficEnvelope'];
28111
+ export type NetworkProxyConnection = components['schemas']['NetworkProxyConnection'];
28112
+ export type NetworkProxyConnectionsEnvelope = components['schemas']['NetworkProxyConnectionsEnvelope'];
28113
+ export type NetworkProxyCloseCommandEnvelope = components['schemas']['NetworkProxyCloseCommandEnvelope'];
27849
28114
  export type NetworkRuntimeKind = components['schemas']['NetworkRuntimeKind'];
27850
28115
  export type NetworkRuntimeEnrollmentStatus = components['schemas']['NetworkRuntimeEnrollmentStatus'];
27851
28116
  export type NetworkRuntimeEnrollmentInput = components['schemas']['NetworkRuntimeEnrollmentInput'];
package/go.mod CHANGED
@@ -3,10 +3,12 @@ module github.com/opensoha/soha-contracts
3
3
  go 1.26.6
4
4
 
5
5
  require (
6
+ github.com/google/uuid v1.6.0
6
7
  github.com/oapi-codegen/runtime v1.4.2
7
8
  github.com/santhosh-tekuri/jsonschema/v6 v6.0.2
8
9
  go.yaml.in/yaml/v3 v3.0.4
9
10
  helm.sh/helm/v4 v4.1.4
11
+ k8s.io/api v0.35.1
10
12
  k8s.io/apimachinery v0.35.1
11
13
  k8s.io/cli-runtime v0.35.1
12
14
  k8s.io/client-go v0.35.1
@@ -49,7 +51,6 @@ require (
49
51
  github.com/google/btree v1.1.3 // indirect
50
52
  github.com/google/gnostic-models v0.7.0 // indirect
51
53
  github.com/google/go-cmp v0.7.0 // indirect
52
- github.com/google/uuid v1.6.0 // indirect
53
54
  github.com/gosuri/uitable v0.0.4 // indirect
54
55
  github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
55
56
  github.com/huandu/xstrings v1.5.0 // indirect
@@ -93,7 +94,7 @@ require (
93
94
  golang.org/x/crypto v0.51.0 // indirect
94
95
  golang.org/x/net v0.55.0 // indirect
95
96
  golang.org/x/oauth2 v0.34.0 // indirect
96
- golang.org/x/sync v0.21.0 // indirect
97
+ golang.org/x/sync v0.22.0 // indirect
97
98
  golang.org/x/sys v0.45.0 // indirect
98
99
  golang.org/x/term v0.43.0 // indirect
99
100
  golang.org/x/text v0.39.0 // indirect
@@ -102,7 +103,6 @@ require (
102
103
  gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
103
104
  gopkg.in/inf.v0 v0.9.1 // indirect
104
105
  gopkg.in/yaml.v3 v3.0.1 // indirect
105
- k8s.io/api v0.35.1 // indirect
106
106
  k8s.io/apiextensions-apiserver v0.35.1 // indirect
107
107
  k8s.io/apiserver v0.35.1 // indirect
108
108
  k8s.io/component-base v0.35.1 // indirect
@@ -110,7 +110,7 @@ require (
110
110
  k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
111
111
  k8s.io/kubectl v0.35.1 // indirect
112
112
  k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 // indirect
113
- oras.land/oras-go/v2 v2.6.0 // indirect
113
+ oras.land/oras-go/v2 v2.6.2 // indirect
114
114
  sigs.k8s.io/controller-runtime v0.23.1 // indirect
115
115
  sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
116
116
  sigs.k8s.io/kustomize/api v0.21.1 // indirect
package/go.sum CHANGED
@@ -333,8 +333,8 @@ golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
333
333
  golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
334
334
  golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
335
335
  golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
336
- golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM=
337
- golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
336
+ golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek=
337
+ golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
338
338
  golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
339
339
  golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
340
340
  golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
@@ -391,8 +391,8 @@ k8s.io/kubectl v0.35.1 h1:zP3Er8C5i1dcAFUMh9Eva0kVvZHptXIn/+8NtRWMxwg=
391
391
  k8s.io/kubectl v0.35.1/go.mod h1:cQ2uAPs5IO/kx8R5s5J3Ihv3VCYwrx0obCXum0CvnXo=
392
392
  k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 h1:SjGebBtkBqHFOli+05xYbK8YF1Dzkbzn+gDM4X9T4Ck=
393
393
  k8s.io/utils v0.0.0-20251002143259-bc988d571ff4/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
394
- oras.land/oras-go/v2 v2.6.0 h1:X4ELRsiGkrbeox69+9tzTu492FMUu7zJQW6eJU+I2oc=
395
- oras.land/oras-go/v2 v2.6.0/go.mod h1:magiQDfG6H1O9APp+rOsvCPcW1GD2MM7vgnKY0Y+u1o=
394
+ oras.land/oras-go/v2 v2.6.2 h1:N04RXngAp1LJKTG6ifz3xHPipasEkWr+hFmInja5YKo=
395
+ oras.land/oras-go/v2 v2.6.2/go.mod h1:PlTtg4JTDJkDe8yVHpM2wz7/YDc00GVas+i4jAW2TZ4=
396
396
  sigs.k8s.io/controller-runtime v0.23.1 h1:TjJSM80Nf43Mg21+RCy3J70aj/W6KyvDtOlpKf+PupE=
397
397
  sigs.k8s.io/controller-runtime v0.23.1/go.mod h1:B6COOxKptp+YaUT5q4l6LqUJTRpizbgf9KSRNdQGns0=
398
398
  sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
package/network/README.md CHANGED
@@ -4,6 +4,18 @@ The JSON Schemas in this directory define strict serialized shapes. Every
4
4
  consumer must also enforce the cross-field rules below before using a message
5
5
  for authorization, routing, firewall configuration or accounting.
6
6
 
7
+ ## Server proxy telemetry
8
+
9
+ - A Linux proxy runtime uses a separate `network-ingest/proxy/{instanceId}`
10
+ certificate to submit `proxy.runtime.sample`; its control certificate cannot
11
+ be used for ingest. The authenticated producer ID is the managed instance ID.
12
+ - Each event records sampled cumulative bytes and process uptime at
13
+ `occurredAt`. Readers derive rates only between samples from the same process
14
+ lifetime with nondecreasing counters. A process restart starts a new series.
15
+ - The existing `proxy.flow.aggregate` remains an endpoint Mihomo profile
16
+ window and is not a server instance sample. Neither event authorizes access
17
+ or exposes individual connections.
18
+
7
19
  ## Runtime messages
8
20
 
9
21
  - Runtime mTLS certificates carry exactly one Soha URI SAN: