@opensoha/contracts 0.1.25 → 0.1.27

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 (200) hide show
  1. package/COMPATIBILITY.md +34 -0
  2. package/README.md +1 -1
  3. package/agent/environment/export.go +1 -0
  4. package/agent/environment/protocol_test.go +1 -1
  5. package/agent/guest/protocol_test.go +2 -2
  6. package/auth/catalog_generated.go +2 -2
  7. package/auth/permission-catalog.json +481 -1
  8. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  9. package/compat/openapi-loose-boundaries-0.1.0.json +1 -1
  10. package/delivery/document.schema.json +127 -9
  11. package/endpointcontrol/decode.go +64 -0
  12. package/endpointcontrol/models.go +138 -0
  13. package/endpointcontrol/models_test.go +51 -0
  14. package/endpointcontrol/protocol.schema.json +397 -0
  15. package/examples/relations_compat_test.go +18 -0
  16. package/fixtures/json-schema/endpoint-controls/invalid/controls.json +16 -0
  17. package/fixtures/json-schema/endpoint-controls/invalid/missing-channel-decision.json +15 -0
  18. package/fixtures/json-schema/endpoint-controls/invalid/receipt-content.json +36 -0
  19. package/fixtures/json-schema/endpoint-controls/valid/controls.json +16 -0
  20. package/fixtures/json-schema/endpoint-controls/valid/receipt.json +35 -0
  21. package/fixtures/json-schema/network-runtime-protocol/invalid/eap-activate-bad-fingerprint.json +14 -0
  22. package/fixtures/json-schema/network-runtime-protocol/invalid/eap-gateway-request.json +14 -0
  23. package/fixtures/json-schema/network-runtime-protocol/invalid/eap-private-key-request.json +15 -0
  24. package/fixtures/json-schema/network-runtime-protocol/invalid/eap-profile-without-eap-credential.json +22 -0
  25. package/fixtures/json-schema/network-runtime-protocol/invalid/endpoint-dns-observation.json +25 -0
  26. package/fixtures/json-schema/network-runtime-protocol/invalid/gateway-presence.json +22 -0
  27. package/fixtures/json-schema/network-runtime-protocol/invalid/mihomo-protection-zero-version.json +45 -0
  28. package/fixtures/json-schema/network-runtime-protocol/invalid/presence-raw-key.json +23 -0
  29. package/fixtures/json-schema/network-runtime-protocol/invalid/presence-zero-sequence.json +22 -0
  30. package/fixtures/json-schema/network-runtime-protocol/invalid/workload-wide-vpn.json +17 -0
  31. package/fixtures/json-schema/network-runtime-protocol/valid/eap-certificate-activate.json +14 -0
  32. package/fixtures/json-schema/network-runtime-protocol/valid/eap-certificate-request.json +14 -0
  33. package/fixtures/json-schema/network-runtime-protocol/valid/eap-profile-enrollment.json +24 -0
  34. package/fixtures/json-schema/network-runtime-protocol/valid/endpoint-presence.json +22 -0
  35. package/fixtures/json-schema/network-runtime-protocol/valid/ipv6-configuration.json +102 -0
  36. package/fixtures/json-schema/network-runtime-protocol/valid/mihomo-protected-policy.json +45 -0
  37. package/fixtures/json-schema/network-runtime-protocol/valid/site-dns-ipv6.json +25 -0
  38. package/fixtures/json-schema/network-runtime-protocol/valid/workload-direct-ztna.json +20 -0
  39. package/fixtures/openapi/DLPShadowDecision/invalid/step-up-type.json +14 -0
  40. package/fixtures/openapi/DLPShadowDecision/valid/archive-v2.json +14 -0
  41. package/fixtures/openapi/DLPShadowDecision/valid/step-up.json +14 -0
  42. package/fixtures/openapi/DLPShadowInput/invalid/self-reported-result.json +7 -0
  43. package/fixtures/openapi/DLPShadowInput/invalid/too-many-samples.json +14 -0
  44. package/fixtures/openapi/DLPShadowInput/valid/bounded.json +7 -0
  45. package/fixtures/openapi/DeliveryDocument/invalid/migration-missing-guide-build-template.json +30 -0
  46. package/fixtures/openapi/DeliveryDocument/invalid/migration-missing-guide-deployment-template.json +30 -0
  47. package/fixtures/openapi/DeliveryDocument/invalid/migration-missing-guide-workflow-template.json +27 -0
  48. package/fixtures/openapi/DeliveryDocument/valid/migration-build-template.json +31 -0
  49. package/fixtures/openapi/DeliveryDocument/valid/migration-deployment-template.json +31 -0
  50. package/fixtures/openapi/DeliveryDocument/valid/migration-workflow-template.json +28 -0
  51. package/fixtures/openapi/DeliveryPlanInput/invalid/manual-plan.json +7 -0
  52. package/fixtures/openapi/DeliveryPlanInput/valid/manual-plan.json +6 -0
  53. package/fixtures/openapi/DeliveryTargetInput/invalid/candidate-on-runtime-deploy.json +9 -0
  54. package/fixtures/openapi/DeliveryTargetInput/invalid/config-update-missing-service.json +7 -0
  55. package/fixtures/openapi/DeliveryTargetInput/valid/template-configuration-only.json +8 -0
  56. package/fixtures/openapi/DeliveryTargetInput/valid/template-configuration-without-runtime-environment.json +1 -0
  57. package/fixtures/openapi/DockerVolumeDLPAppealInput/invalid/p4-response.json +3 -0
  58. package/fixtures/openapi/DockerVolumeDLPAppealInput/valid/p4-response.json +3 -0
  59. package/fixtures/openapi/DockerVolumeDLPAppealReviewInput/invalid/p4-response.json +5 -0
  60. package/fixtures/openapi/DockerVolumeDLPAppealReviewInput/valid/p4-response.json +5 -0
  61. package/fixtures/openapi/DockerVolumeDLPAuthorizationInput/invalid/p4-response.json +3 -0
  62. package/fixtures/openapi/DockerVolumeDLPAuthorizationInput/valid/p4-response.json +3 -0
  63. package/fixtures/openapi/DockerVolumeDLPContent/invalid/archive-unsupported-channel.json +9 -0
  64. package/fixtures/openapi/DockerVolumeDLPContent/invalid/p4.json +6 -0
  65. package/fixtures/openapi/DockerVolumeDLPContent/invalid/step-up-audit.json +9 -0
  66. package/fixtures/openapi/DockerVolumeDLPContent/invalid/unavailable-engine.json +9 -0
  67. package/fixtures/openapi/DockerVolumeDLPContent/invalid/unknown-data-level.json +12 -0
  68. package/fixtures/openapi/DockerVolumeDLPContent/valid/classified-rule.json +16 -0
  69. package/fixtures/openapi/DockerVolumeDLPContent/valid/p4.json +8 -0
  70. package/fixtures/openapi/DockerVolumeDLPContent/valid/step-up.json +9 -0
  71. package/fixtures/openapi/DockerVolumeDLPDecision/invalid/p4.json +9 -0
  72. package/fixtures/openapi/DockerVolumeDLPDecision/invalid/step-up-type.json +12 -0
  73. package/fixtures/openapi/DockerVolumeDLPDecision/valid/archive-v2.json +12 -0
  74. package/fixtures/openapi/DockerVolumeDLPDecision/valid/p4.json +11 -0
  75. package/fixtures/openapi/DockerVolumeDLPDecision/valid/step-up.json +12 -0
  76. package/fixtures/openapi/DockerVolumeDLPSaveInput/invalid/p4.json +11 -0
  77. package/fixtures/openapi/DockerVolumeDLPSaveInput/valid/p4.json +11 -0
  78. package/fixtures/openapi/DockerVolumeFileReadInput/invalid/p4-response.json +5 -0
  79. package/fixtures/openapi/DockerVolumeFileReadInput/valid/p4-response.json +4 -0
  80. package/fixtures/openapi/EndpointDeviceInput/invalid/reported-management.json +5 -0
  81. package/fixtures/openapi/EndpointDeviceInput/valid/management-state.json +5 -0
  82. package/fixtures/openapi/EndpointDeviceRegistrationInput/invalid/self-promote-management.json +5 -0
  83. package/fixtures/openapi/KubernetesImportCandidateListEnvelope/invalid/source-with-spec.json +33 -0
  84. package/fixtures/openapi/KubernetesImportCandidateListEnvelope/invalid/source-without-uid.json +29 -0
  85. package/fixtures/openapi/KubernetesImportCandidateListEnvelope/valid/stable-source.json +30 -0
  86. package/fixtures/openapi/KubernetesPod/invalid/pod-uid.json +9 -0
  87. package/fixtures/openapi/KubernetesPod/valid/pod-uid.json +9 -0
  88. package/fixtures/openapi/KubernetesPodDetail/invalid/pod-uid.json +6 -0
  89. package/fixtures/openapi/KubernetesPodDetail/valid/pod-uid.json +6 -0
  90. package/fixtures/openapi/KubernetesServiceImportRequest/invalid/empty-source-uid.json +48 -0
  91. package/fixtures/openapi/KubernetesServiceImportRequest/valid/pinned-workloads-and-cr.json +48 -0
  92. package/fixtures/openapi/ManagedContentPasteInput/invalid/boundary.json +5 -0
  93. package/fixtures/openapi/ManagedContentPasteInput/valid/boundary.json +6 -0
  94. package/fixtures/openapi/ManagedContentPolicy/invalid/self-reported-allow.json +8 -0
  95. package/fixtures/openapi/ManagedContentPolicy/invalid/step-up-audit.json +8 -0
  96. package/fixtures/openapi/ManagedContentPolicy/invalid/unknown-extractor.json +8 -0
  97. package/fixtures/openapi/ManagedContentPolicy/valid/archive-v2.json +8 -0
  98. package/fixtures/openapi/ManagedContentPolicy/valid/network-and-level.json +10 -0
  99. package/fixtures/openapi/ManagedContentPolicy/valid/step-up.json +8 -0
  100. package/fixtures/openapi/ManagedContentReviewInput/invalid/boundary.json +5 -0
  101. package/fixtures/openapi/ManagedContentReviewInput/valid/boundary.json +5 -0
  102. package/fixtures/openapi/ManagedContentSaveInput/invalid/boundary.json +14 -0
  103. package/fixtures/openapi/ManagedContentSaveInput/valid/boundary.json +16 -0
  104. package/fixtures/openapi/ManagedContentUploadInput/invalid/boundary.json +7 -0
  105. package/fixtures/openapi/ManagedContentUploadInput/valid/boundary.json +6 -0
  106. package/fixtures/openapi/ManifestExecutionTaskPayload/invalid/initialization.json +7 -0
  107. package/fixtures/openapi/ManifestExecutionTaskPayload/valid/initialization.json +7 -0
  108. package/fixtures/openapi/ManifestRootResource/invalid/root.json +1 -0
  109. package/fixtures/openapi/ManifestRootResource/valid/root.json +1 -0
  110. package/fixtures/openapi/NetworkAccessPolicyInput/invalid/unknown-management-state.json +35 -0
  111. package/fixtures/openapi/NetworkAccessPolicyInput/valid/managed-device.json +35 -0
  112. package/fixtures/openapi/NetworkAdmissionPreviewRequest/invalid/deviceId-characters.json +4 -0
  113. package/fixtures/openapi/NetworkAdmissionPreviewRequest/invalid/nasBindingId-characters.json +4 -0
  114. package/fixtures/openapi/NetworkAdmissionPreviewRequest/invalid/subject-override.json +1 -0
  115. package/fixtures/openapi/NetworkAdmissionPreviewRequest/valid/device-nas.json +1 -0
  116. package/fixtures/openapi/NetworkAdmissionPreviewResult/invalid/missing-attributeVersion.json +13 -0
  117. package/fixtures/openapi/NetworkAdmissionPreviewResult/invalid/missing-evaluatedAt.json +13 -0
  118. package/fixtures/openapi/NetworkAdmissionPreviewResult/valid/versioned.json +14 -0
  119. package/fixtures/openapi/NetworkConflictAnalysisRequest/invalid/missing-runtime-ranges.json +1 -0
  120. package/fixtures/openapi/NetworkConflictAnalysisRequest/invalid/unknown-source-type.json +9 -0
  121. package/fixtures/openapi/NetworkConflictAnalysisRequest/valid/empty-runtime-ranges.json +3 -0
  122. package/fixtures/openapi/NetworkConflictAnalysisRequest/{invalid → valid}/ipv6-range.json +1 -1
  123. package/fixtures/openapi/NetworkEAPServerTrust/invalid/no-server-validation.json +5 -0
  124. package/fixtures/openapi/NetworkEAPServerTrust/valid/named-server.json +9 -0
  125. package/fixtures/openapi/NetworkEndpointResponsePolicyInput/invalid/all-sites-implicit.json +45 -0
  126. package/fixtures/openapi/NetworkEndpointResponsePolicyInput/invalid/unbounded-stages.json +54 -0
  127. package/fixtures/openapi/NetworkEndpointResponsePolicyInput/invalid/zero-heartbeat.json +47 -0
  128. package/fixtures/openapi/NetworkEndpointResponsePolicyInput/valid/staged-protection.json +47 -0
  129. package/fixtures/openapi/NetworkEndpointResponseRestoreInput/invalid/missing-reason.json +3 -0
  130. package/fixtures/openapi/NetworkEndpointResponseRestoreInput/valid/expected-current.json +4 -0
  131. package/fixtures/openapi/NetworkPolicyPreviewResult/invalid/attribute-version.json +1 -0
  132. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/admission-version.json +1 -0
  133. package/fixtures/openapi/NetworkPolicySubjects/invalid/duplicate-role.json +1 -0
  134. package/fixtures/openapi/NetworkPolicySubjects/invalid/role-characters.json +5 -0
  135. package/fixtures/openapi/NetworkPolicySubjects/valid/role-bound.json +1 -0
  136. package/fixtures/openapi/NetworkProxyConfigurationInput/invalid/missing-content.json +1 -0
  137. package/fixtures/openapi/NetworkProxyConfigurationPatchInput/invalid/bad-binding-id.json +9 -0
  138. package/fixtures/openapi/NetworkProxyConfigurationPatchInput/invalid/empty-content.json +1 -0
  139. package/fixtures/openapi/NetworkProxyConfigurationPatchInput/valid/binding-only.json +11 -0
  140. package/fixtures/openapi/NetworkProxyConfigurationPatchInput/valid/clear-binding-disabled.json +5 -0
  141. package/fixtures/openapi/NetworkProxyConfigurationPatchInput/valid/enabled.json +1 -0
  142. package/fixtures/openapi/NetworkSiteInput/invalid/unknown-governance.json +6 -0
  143. package/fixtures/openapi/NetworkSiteInput/valid/restricted-unmanaged.json +6 -0
  144. package/fixtures/openapi/ResourceRelationConfig/invalid/executable-rule.json +17 -0
  145. package/fixtures/openapi/ResourceRelationConfig/valid/unknown-kind.json +13 -0
  146. package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/migration-missing-guide-valid-yaml.json +38 -0
  147. package/fixtures/openapi/ServiceDeploymentTemplateInput/valid/migration-valid-yaml.json +39 -0
  148. package/fixtures/openapi/TemplateMigrationAssessment/invalid/initialization.json +9 -0
  149. package/fixtures/openapi/TemplateMigrationAssessment/valid/initialization.json +9 -0
  150. package/fixtures/openapi/TemplateMigrationPolicy/invalid/blank-guide.json +5 -0
  151. package/fixtures/openapi/TemplateMigrationPolicy/invalid/missing-guide.json +4 -0
  152. package/fixtures/openapi/TemplateMigrationPolicy/invalid/unknown-escape-hatch.json +6 -0
  153. package/fixtures/openapi/TemplateMigrationPolicy/valid/legacy-safe.json +4 -0
  154. package/fixtures/openapi/TemplateMigrationPolicy/valid/ordered-data-change.json +5 -0
  155. package/fixtures/openapi/TemplateUpdateBatchInput/invalid/duplicate-candidates.json +11 -0
  156. package/fixtures/openapi/TemplateUpdateBatchInput/invalid/empty-identities.json +10 -0
  157. package/fixtures/openapi/TemplateUpdateBatchInput/valid/staged-adoption.json +10 -0
  158. package/fixtures/openapi/TemplateUpdatePolicyInput/invalid/unknown-mode.json +8 -0
  159. package/fixtures/openapi/TemplateUpdatePolicyInput/valid/explicit-automatic.json +8 -0
  160. package/fixtures/openapi/TemplateUpdatePreviewInput/invalid/empty-identities.json +10 -0
  161. package/fixtures/openapi/TemplateUpdatePreviewInput/invalid/empty-targets.json +6 -0
  162. package/fixtures/openapi/TemplateUpdatePreviewInput/valid/cross-version-manual.json +14 -0
  163. package/gen/go/sohaapi/client.go +1 -1
  164. package/gen/go/sohaapi/client_test.go +2 -2
  165. package/gen/go/sohaapi/import_source_compat_test.go +12 -0
  166. package/gen/go/sohaapi/proxy_configuration_test.go +38 -0
  167. package/gen/go/sohaapi/types.go +3760 -345
  168. package/gen/ts/sohaapi/index.ts +5573 -181
  169. package/go.mod +2 -2
  170. package/helmrelease/delivery.go +4 -1
  171. package/helmrelease/initialization.go +10 -0
  172. package/helmrelease/runtime/delivery.go +40 -10
  173. package/helmrelease/runtime/delivery_test.go +4 -0
  174. package/helmrelease/runtime/initialization.go +186 -0
  175. package/helmrelease/runtime/initialization_test.go +203 -0
  176. package/network/README.md +34 -0
  177. package/network/network-radius-accounting.schema.json +4 -1
  178. package/network/network-runtime-protocol.schema.json +2166 -317
  179. package/network/proxy-runtime.schema.json +482 -67
  180. package/openapi/network_control_test.go +64 -0
  181. package/openapi/soha-api.json +53524 -43459
  182. package/openapi/soha-api.yaml +26431 -20491
  183. package/openapi/spec_generated.go +3 -3
  184. package/openapi/spec_test.go +42 -0
  185. package/package.json +6 -3
  186. package/proxytransport/handler.go +271 -0
  187. package/proxytransport/probe.go +30 -0
  188. package/proxytransport/scope.go +89 -0
  189. package/proxytransport/transport_test.go +60 -0
  190. package/resource/models.go +2 -0
  191. package/resource/relations.go +225 -0
  192. package/resource/relations_test.go +47 -0
  193. package/resource/root_cr.go +38 -0
  194. package/resource/runtime/argocd_integration_test.go +1 -1
  195. package/resource/runtime/initialization.go +66 -0
  196. package/resource/runtime/initialization_test.go +80 -0
  197. package/resource/runtime/relations.go +161 -0
  198. package/resource/runtime/relations_test.go +100 -0
  199. package/resource/runtime/root_cr.go +79 -0
  200. package/resource/runtime/root_cr_test.go +118 -0
@@ -0,0 +1,397 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://opensoha.dev/contracts/endpointcontrol/protocol.schema.json",
4
+ "title": "Endpoint channel controls",
5
+ "oneOf": [
6
+ {
7
+ "$ref": "#/$defs/EndpointChannelDesired"
8
+ },
9
+ {
10
+ "$ref": "#/$defs/EndpointChannelReport"
11
+ }
12
+ ],
13
+ "$defs": {
14
+ "EndpointChannelControls": {
15
+ "type": "object",
16
+ "additionalProperties": false,
17
+ "required": [
18
+ "usb",
19
+ "print",
20
+ "clipboard"
21
+ ],
22
+ "properties": {
23
+ "usb": {
24
+ "type": "boolean"
25
+ },
26
+ "print": {
27
+ "type": "boolean"
28
+ },
29
+ "clipboard": {
30
+ "type": "boolean"
31
+ }
32
+ }
33
+ },
34
+ "EndpointChannelReceipt": {
35
+ "type": "object",
36
+ "additionalProperties": false,
37
+ "required": [
38
+ "name",
39
+ "scope",
40
+ "state",
41
+ "targets",
42
+ "controlled",
43
+ "reasonCode"
44
+ ],
45
+ "properties": {
46
+ "name": {
47
+ "type": "string",
48
+ "enum": [
49
+ "usb",
50
+ "print",
51
+ "clipboard"
52
+ ]
53
+ },
54
+ "scope": {
55
+ "type": "string",
56
+ "enum": [
57
+ "current_usb_volumes",
58
+ "local_new_print_jobs",
59
+ "enrolled_console_win32"
60
+ ]
61
+ },
62
+ "state": {
63
+ "type": "string",
64
+ "enum": [
65
+ "off",
66
+ "controlled",
67
+ "partial",
68
+ "failed",
69
+ "unsupported",
70
+ "conflict",
71
+ "unconfigured",
72
+ "not_present"
73
+ ]
74
+ },
75
+ "targets": {
76
+ "type": "integer",
77
+ "minimum": 0,
78
+ "maximum": 256
79
+ },
80
+ "controlled": {
81
+ "type": "integer",
82
+ "minimum": 0,
83
+ "maximum": 256
84
+ },
85
+ "reasonCode": {
86
+ "type": "string",
87
+ "pattern": "^[a-z][a-z0-9_]{0,63}$"
88
+ }
89
+ }
90
+ },
91
+ "EndpointChannelPolicy": {
92
+ "type": "object",
93
+ "additionalProperties": false,
94
+ "required": [
95
+ "deviceId",
96
+ "revision",
97
+ "publishedVersion",
98
+ "draft",
99
+ "updatedAt"
100
+ ],
101
+ "properties": {
102
+ "deviceId": {
103
+ "type": "string",
104
+ "minLength": 1,
105
+ "maxLength": 128,
106
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
107
+ },
108
+ "revision": {
109
+ "type": "integer",
110
+ "format": "int64",
111
+ "minimum": 0
112
+ },
113
+ "publishedVersion": {
114
+ "type": "integer",
115
+ "format": "int64",
116
+ "minimum": 0
117
+ },
118
+ "draft": {
119
+ "$ref": "#/$defs/EndpointChannelControls"
120
+ },
121
+ "published": {
122
+ "$ref": "#/$defs/EndpointChannelControls"
123
+ },
124
+ "updatedAt": {
125
+ "type": "string",
126
+ "format": "date-time"
127
+ }
128
+ }
129
+ },
130
+ "EndpointChannelDesired": {
131
+ "type": "object",
132
+ "additionalProperties": false,
133
+ "required": [
134
+ "schemaVersion",
135
+ "deviceId",
136
+ "runtimeId",
137
+ "credentialId",
138
+ "policyVersion",
139
+ "challenge",
140
+ "controls",
141
+ "issuedAt",
142
+ "validUntil",
143
+ "configured"
144
+ ],
145
+ "properties": {
146
+ "schemaVersion": {
147
+ "type": "string",
148
+ "const": "endpoint-controls/v1alpha1"
149
+ },
150
+ "deviceId": {
151
+ "type": "string",
152
+ "minLength": 1,
153
+ "maxLength": 128,
154
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
155
+ },
156
+ "runtimeId": {
157
+ "type": "string",
158
+ "minLength": 1,
159
+ "maxLength": 128,
160
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
161
+ },
162
+ "credentialId": {
163
+ "type": "string",
164
+ "minLength": 1,
165
+ "maxLength": 128,
166
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
167
+ },
168
+ "policyVersion": {
169
+ "type": "integer",
170
+ "format": "int64",
171
+ "minimum": 0
172
+ },
173
+ "challenge": {
174
+ "type": "string",
175
+ "pattern": "^[A-Za-z0-9_-]{43}$"
176
+ },
177
+ "controls": {
178
+ "$ref": "#/$defs/EndpointChannelControls"
179
+ },
180
+ "issuedAt": {
181
+ "type": "string",
182
+ "format": "date-time"
183
+ },
184
+ "validUntil": {
185
+ "type": "string",
186
+ "format": "date-time"
187
+ },
188
+ "configured": {
189
+ "type": "boolean",
190
+ "description": "False means unconfigured; never a release. Release requires a higher explicit published version."
191
+ }
192
+ }
193
+ },
194
+ "EndpointChannelReport": {
195
+ "type": "object",
196
+ "additionalProperties": false,
197
+ "required": [
198
+ "schemaVersion",
199
+ "deviceId",
200
+ "runtimeId",
201
+ "credentialId",
202
+ "policyVersion",
203
+ "challenge",
204
+ "observedAt",
205
+ "channels"
206
+ ],
207
+ "properties": {
208
+ "schemaVersion": {
209
+ "type": "string",
210
+ "const": "endpoint-controls/v1alpha1"
211
+ },
212
+ "deviceId": {
213
+ "type": "string",
214
+ "minLength": 1,
215
+ "maxLength": 128,
216
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
217
+ },
218
+ "runtimeId": {
219
+ "type": "string",
220
+ "minLength": 1,
221
+ "maxLength": 128,
222
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
223
+ },
224
+ "credentialId": {
225
+ "type": "string",
226
+ "minLength": 1,
227
+ "maxLength": 128,
228
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
229
+ },
230
+ "policyVersion": {
231
+ "type": "integer",
232
+ "format": "int64",
233
+ "minimum": 0
234
+ },
235
+ "challenge": {
236
+ "type": "string",
237
+ "pattern": "^[A-Za-z0-9_-]{43}$"
238
+ },
239
+ "observedAt": {
240
+ "type": "string",
241
+ "format": "date-time"
242
+ },
243
+ "channels": {
244
+ "type": "array",
245
+ "minItems": 3,
246
+ "maxItems": 3,
247
+ "items": {
248
+ "$ref": "#/$defs/EndpointChannelReceipt"
249
+ }
250
+ }
251
+ }
252
+ },
253
+ "EndpointChannelView": {
254
+ "type": "object",
255
+ "additionalProperties": false,
256
+ "required": [
257
+ "policy",
258
+ "fresh",
259
+ "runtimeCount",
260
+ "pendingRuntimeCount"
261
+ ],
262
+ "properties": {
263
+ "policy": {
264
+ "$ref": "#/$defs/EndpointChannelPolicy"
265
+ },
266
+ "receipt": {
267
+ "$ref": "#/$defs/EndpointChannelObservation"
268
+ },
269
+ "receivedAt": {
270
+ "type": "string",
271
+ "format": "date-time"
272
+ },
273
+ "fresh": {
274
+ "type": "boolean"
275
+ },
276
+ "runtimeCount": {
277
+ "type": "integer",
278
+ "minimum": 0
279
+ },
280
+ "pendingRuntimeCount": {
281
+ "type": "integer",
282
+ "minimum": 0
283
+ }
284
+ }
285
+ },
286
+ "EndpointChannelSaveInput": {
287
+ "type": "object",
288
+ "additionalProperties": false,
289
+ "required": [
290
+ "expectedRevision",
291
+ "draft"
292
+ ],
293
+ "properties": {
294
+ "expectedRevision": {
295
+ "type": "integer",
296
+ "format": "int64",
297
+ "minimum": 0
298
+ },
299
+ "draft": {
300
+ "$ref": "#/$defs/EndpointChannelControls"
301
+ }
302
+ }
303
+ },
304
+ "EndpointChannelPublishInput": {
305
+ "type": "object",
306
+ "additionalProperties": false,
307
+ "required": [
308
+ "expectedRevision"
309
+ ],
310
+ "properties": {
311
+ "expectedRevision": {
312
+ "type": "integer",
313
+ "format": "int64",
314
+ "minimum": 1
315
+ }
316
+ }
317
+ },
318
+ "EndpointChannelPolicyEnvelope": {
319
+ "type": "object",
320
+ "additionalProperties": false,
321
+ "required": [
322
+ "data"
323
+ ],
324
+ "properties": {
325
+ "data": {
326
+ "$ref": "#/$defs/EndpointChannelPolicy"
327
+ }
328
+ }
329
+ },
330
+ "EndpointChannelDesiredEnvelope": {
331
+ "type": "object",
332
+ "additionalProperties": false,
333
+ "required": [
334
+ "data"
335
+ ],
336
+ "properties": {
337
+ "data": {
338
+ "$ref": "#/$defs/EndpointChannelDesired"
339
+ }
340
+ }
341
+ },
342
+ "EndpointChannelViewEnvelope": {
343
+ "type": "object",
344
+ "additionalProperties": false,
345
+ "required": [
346
+ "data"
347
+ ],
348
+ "properties": {
349
+ "data": {
350
+ "$ref": "#/$defs/EndpointChannelView"
351
+ }
352
+ }
353
+ },
354
+ "EndpointChannelObservation": {
355
+ "type": "object",
356
+ "additionalProperties": false,
357
+ "required": [
358
+ "runtimeId",
359
+ "credentialId",
360
+ "policyVersion",
361
+ "observedAt",
362
+ "channels"
363
+ ],
364
+ "properties": {
365
+ "runtimeId": {
366
+ "type": "string",
367
+ "minLength": 1,
368
+ "maxLength": 128,
369
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
370
+ },
371
+ "credentialId": {
372
+ "type": "string",
373
+ "minLength": 1,
374
+ "maxLength": 128,
375
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
376
+ },
377
+ "policyVersion": {
378
+ "type": "integer",
379
+ "format": "int64",
380
+ "minimum": 0
381
+ },
382
+ "observedAt": {
383
+ "type": "string",
384
+ "format": "date-time"
385
+ },
386
+ "channels": {
387
+ "type": "array",
388
+ "minItems": 3,
389
+ "maxItems": 3,
390
+ "items": {
391
+ "$ref": "#/$defs/EndpointChannelReceipt"
392
+ }
393
+ }
394
+ }
395
+ }
396
+ }
397
+ }
@@ -0,0 +1,18 @@
1
+ package examples
2
+
3
+ import (
4
+ sdk "github.com/opensoha/soha-contracts/gen/go/sohaapi"
5
+ "testing"
6
+ )
7
+
8
+ func TestRelationAdditionPreservesPublishedEnumNames(t *testing.T) {
9
+ values := []sdk.PersonalGuestRuntimeInputKind{sdk.Browser, sdk.Docker, sdk.Execute, sdk.FileRead, sdk.FileWrite}
10
+ for i, want := range []string{"browser", "docker", "execute", "file_read", "file_write"} {
11
+ if string(values[i]) != want {
12
+ t.Fatalf("published enum %d changed", i)
13
+ }
14
+ }
15
+ if sdk.JSON != sdk.ExportDeliveryDocumentParamsFormatJSON || sdk.Yaml != sdk.ExportDeliveryDocumentParamsFormatYaml {
16
+ t.Fatal("published format aliases changed")
17
+ }
18
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "schemaVersion": "endpoint-controls/v1alpha1",
3
+ "deviceId": "device",
4
+ "runtimeId": "endpoint",
5
+ "credentialId": "credential",
6
+ "policyVersion": 1,
7
+ "challenge": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
8
+ "controls": {
9
+ "usb": true,
10
+ "print": true,
11
+ "clipboard": true
12
+ },
13
+ "issuedAt": "2026-10-28T00:00:00Z",
14
+ "validUntil": "2026-10-28T00:01:00Z",
15
+ "content": "must not transport file content"
16
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "schemaVersion": "endpoint-controls/v1alpha1",
3
+ "deviceId": "device",
4
+ "runtimeId": "endpoint",
5
+ "credentialId": "credential",
6
+ "policyVersion": 1,
7
+ "challenge": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
8
+ "controls": {
9
+ "usb": true,
10
+ "print": true
11
+ },
12
+ "issuedAt": "2026-10-28T00:00:00Z",
13
+ "validUntil": "2026-10-28T00:01:00Z",
14
+ "configured": true
15
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "schemaVersion": "endpoint-controls/v1alpha1",
3
+ "deviceId": "device",
4
+ "runtimeId": "endpoint",
5
+ "credentialId": "credential",
6
+ "policyVersion": 1,
7
+ "challenge": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
8
+ "observedAt": "2026-10-28T00:00:00Z",
9
+ "channels": [
10
+ {
11
+ "name": "usb",
12
+ "scope": "current_usb_volumes",
13
+ "state": "controlled",
14
+ "targets": 1,
15
+ "controlled": 1,
16
+ "reasonCode": "native_scope_only"
17
+ },
18
+ {
19
+ "name": "print",
20
+ "scope": "local_new_print_jobs",
21
+ "state": "controlled",
22
+ "targets": 1,
23
+ "controlled": 1,
24
+ "reasonCode": "native_scope_only"
25
+ },
26
+ {
27
+ "name": "clipboard",
28
+ "scope": "enrolled_console_win32",
29
+ "state": "controlled",
30
+ "targets": 1,
31
+ "controlled": 1,
32
+ "reasonCode": "native_scope_only"
33
+ }
34
+ ],
35
+ "clipboardText": "forbidden"
36
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "schemaVersion": "endpoint-controls/v1alpha1",
3
+ "deviceId": "device",
4
+ "runtimeId": "endpoint",
5
+ "credentialId": "credential",
6
+ "policyVersion": 1,
7
+ "challenge": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
8
+ "controls": {
9
+ "usb": true,
10
+ "print": true,
11
+ "clipboard": true
12
+ },
13
+ "issuedAt": "2026-10-28T00:00:00Z",
14
+ "validUntil": "2026-10-28T00:01:00Z",
15
+ "configured": true
16
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "schemaVersion": "endpoint-controls/v1alpha1",
3
+ "deviceId": "device",
4
+ "runtimeId": "endpoint",
5
+ "credentialId": "credential",
6
+ "policyVersion": 1,
7
+ "challenge": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
8
+ "observedAt": "2026-10-28T00:00:00Z",
9
+ "channels": [
10
+ {
11
+ "name": "usb",
12
+ "scope": "current_usb_volumes",
13
+ "state": "controlled",
14
+ "targets": 1,
15
+ "controlled": 1,
16
+ "reasonCode": "native_scope_only"
17
+ },
18
+ {
19
+ "name": "print",
20
+ "scope": "local_new_print_jobs",
21
+ "state": "controlled",
22
+ "targets": 1,
23
+ "controlled": 1,
24
+ "reasonCode": "native_scope_only"
25
+ },
26
+ {
27
+ "name": "clipboard",
28
+ "scope": "enrolled_console_win32",
29
+ "state": "controlled",
30
+ "targets": 1,
31
+ "controlled": 1,
32
+ "reasonCode": "native_scope_only"
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "presence-1",
4
+ "messageType": "eap.certificate.activate.request",
5
+ "producerId": "endpoint-lab",
6
+ "runtimeId": "endpoint-lab",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-10-14T00:00:00Z",
9
+ "expiresAt": "2026-10-14T00:00:30Z",
10
+ "payload": {
11
+ "credentialId": "eap-credential-1",
12
+ "fingerprint": "sha256:bad"
13
+ }
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "presence-1",
4
+ "messageType": "eap.certificate.request",
5
+ "producerId": "endpoint-lab",
6
+ "runtimeId": "endpoint-lab",
7
+ "runtimeKind": "gateway",
8
+ "occurredAt": "2026-10-14T00:00:00Z",
9
+ "expiresAt": "2026-10-14T00:00:30Z",
10
+ "payload": {
11
+ "requestId": "eap-rotation-1",
12
+ "csrPem": "-----BEGIN CERTIFICATE REQUEST-----\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n-----END CERTIFICATE REQUEST-----\n"
13
+ }
14
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "presence-1",
4
+ "messageType": "eap.certificate.request",
5
+ "producerId": "endpoint-lab",
6
+ "runtimeId": "endpoint-lab",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-10-14T00:00:00Z",
9
+ "expiresAt": "2026-10-14T00:00:30Z",
10
+ "payload": {
11
+ "requestId": "eap-rotation-1",
12
+ "csrPem": "-----BEGIN CERTIFICATE REQUEST-----\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n-----END CERTIFICATE REQUEST-----\n",
13
+ "privateKey": "never-transmit"
14
+ }
15
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-enroll-wireguard-0001",
4
+ "messageType": "runtime.enroll.request",
5
+ "producerId": "endpoint-alice",
6
+ "runtimeId": "endpoint-alice",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-09-02T08:00:00Z",
9
+ "expiresAt": "2026-09-02T08:05:00Z",
10
+ "payload": {
11
+ "enrollmentId": "enrollment-alice",
12
+ "challengeId": "challenge-alice",
13
+ "deviceId": "device-alice-laptop",
14
+ "devicePublicKey": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA7qY8R9gAwRQmJau0p7uB8mVJwA6m3i3zYvRrV7lIl1E=\n-----END PUBLIC KEY-----",
15
+ "wireguardPublicKey": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=",
16
+ "platform": "macos",
17
+ "clientVersion": "0.2.0",
18
+ "capabilities": [
19
+ "eap-profile-v1"
20
+ ]
21
+ }
22
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-dns-1",
4
+ "messageType": "dns.observations",
5
+ "producerId": "gateway-site-a",
6
+ "runtimeId": "gateway-site-a",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-09-02T08:00:00Z",
9
+ "expiresAt": "2026-09-02T08:05:00Z",
10
+ "payload": {
11
+ "configurationVersion": 12,
12
+ "policyVersion": 7,
13
+ "observations": [
14
+ {
15
+ "resourceId": "resource-payroll",
16
+ "hostname": "payroll.example.internal",
17
+ "addresses": [
18
+ "fd20::10"
19
+ ],
20
+ "observedAt": "2026-09-02T08:00:00Z",
21
+ "ttlSeconds": 60
22
+ }
23
+ ]
24
+ }
25
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "presence-1",
4
+ "messageType": "endpoint.presence.request",
5
+ "producerId": "endpoint-lab",
6
+ "runtimeId": "endpoint-lab",
7
+ "runtimeKind": "gateway",
8
+ "occurredAt": "2026-10-14T00:00:00Z",
9
+ "expiresAt": "2026-10-14T00:00:30Z",
10
+ "payload": {
11
+ "deviceId": "device-lab",
12
+ "bootId": "boot-1",
13
+ "sequence": 1,
14
+ "status": "healthy",
15
+ "configurationVersion": 1,
16
+ "policyVersion": 1,
17
+ "uiState": "unknown",
18
+ "capabilities": [
19
+ "endpoint-presence-v1"
20
+ ]
21
+ }
22
+ }