@opensoha/contracts 0.1.16 → 0.1.18

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 (391) hide show
  1. package/COMPATIBILITY.md +91 -0
  2. package/README.md +49 -3
  3. package/auth/catalog_generated.go +2 -2
  4. package/auth/catalog_test.go +32 -0
  5. package/auth/outpost_headers.go +17 -0
  6. package/auth/outpost_headers_test.go +16 -0
  7. package/auth/permission-catalog.json +1097 -187
  8. package/compat/consumer-revisions.json +3 -0
  9. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  10. package/compat/openapi-loose-boundaries-0.1.0.json +78 -46
  11. package/delivery/canonical.go +136 -0
  12. package/delivery/document.go +203 -0
  13. package/delivery/document.schema.json +1527 -0
  14. package/delivery/document_test.go +191 -0
  15. package/delivery/parser.go +155 -0
  16. package/evaluation/evaluation-run.schema.json +64 -10
  17. package/fixtures/json-schema/gateway-manifest/invalid/bad-execution-mode.json +73 -0
  18. package/fixtures/json-schema/gateway-manifest/invalid/unversioned-check.json +85 -0
  19. package/fixtures/json-schema/gateway-manifest/valid/checks.json +86 -0
  20. package/fixtures/json-schema/gateway-manifest/valid/versioned-task.json +73 -0
  21. package/fixtures/json-schema/network-ingest-event/invalid/duplicate-event.json +33 -0
  22. package/fixtures/json-schema/network-ingest-event/invalid/message-payload-mismatch.json +23 -0
  23. package/fixtures/json-schema/network-ingest-event/invalid/password.json +22 -0
  24. package/fixtures/json-schema/network-ingest-event/invalid/proxy-flow-destination.json +28 -0
  25. package/fixtures/json-schema/network-ingest-event/invalid/vpn-probe-negative-rtt.json +34 -0
  26. package/fixtures/json-schema/network-ingest-event/invalid/vpn-stats-secret.json +27 -0
  27. package/fixtures/json-schema/network-ingest-event/valid/endpoint-proxy-flow.json +27 -0
  28. package/fixtures/json-schema/network-ingest-event/valid/freeradius-accounting.json +25 -0
  29. package/fixtures/json-schema/network-ingest-event/valid/gateway.json +53 -0
  30. package/fixtures/json-schema/network-ingest-event/valid/vpn-probe-batch.json +45 -0
  31. package/fixtures/json-schema/network-ingest-event/valid/vpn-tunnel-stats.json +26 -0
  32. package/fixtures/json-schema/network-radius-accounting/invalid/password.json +9 -0
  33. package/fixtures/json-schema/network-radius-accounting/valid/accounting.json +16 -0
  34. package/fixtures/json-schema/network-runtime-protocol/invalid/invalid-cidr.json +31 -0
  35. package/fixtures/json-schema/network-runtime-protocol/invalid/message-payload-mismatch.json +19 -0
  36. package/fixtures/json-schema/network-runtime-protocol/invalid/mihomo-raw-subscription.json +33 -0
  37. package/fixtures/json-schema/network-runtime-protocol/invalid/nas-authorization-password.json +18 -0
  38. package/fixtures/json-schema/network-runtime-protocol/invalid/nas-eap-without-certificate.json +17 -0
  39. package/fixtures/json-schema/network-runtime-protocol/invalid/private-key.json +20 -0
  40. package/fixtures/json-schema/network-runtime-protocol/invalid/raw-credential-reference.json +16 -0
  41. package/fixtures/json-schema/network-runtime-protocol/invalid/runtime-interval-too-short.json +23 -0
  42. package/fixtures/json-schema/network-runtime-protocol/invalid/vpn-managed-bad-token.json +15 -0
  43. package/fixtures/json-schema/network-runtime-protocol/invalid/vpn-managed-mode-override.json +16 -0
  44. package/fixtures/json-schema/network-runtime-protocol/invalid/wireguard-capability-without-key.json +19 -0
  45. package/fixtures/json-schema/network-runtime-protocol/invalid/wireguard-default-route.json +31 -0
  46. package/fixtures/json-schema/network-runtime-protocol/invalid/ztna-without-access-grant.json +17 -0
  47. package/fixtures/json-schema/network-runtime-protocol/valid/configuration-desired.json +86 -0
  48. package/fixtures/json-schema/network-runtime-protocol/valid/direct-ztna-connect.json +19 -0
  49. package/fixtures/json-schema/network-runtime-protocol/valid/direct-ztna-result.json +33 -0
  50. package/fixtures/json-schema/network-runtime-protocol/valid/internal-ztna-connect.json +19 -0
  51. package/fixtures/json-schema/network-runtime-protocol/valid/managed-vpn-macos-enrollment.json +27 -0
  52. package/fixtures/json-schema/network-runtime-protocol/valid/mihomo-app-subscription-configuration.json +32 -0
  53. package/fixtures/json-schema/network-runtime-protocol/valid/mihomo-manual-node-configuration.json +32 -0
  54. package/fixtures/json-schema/network-runtime-protocol/valid/mihomo-wireguard-configuration.json +70 -0
  55. package/fixtures/json-schema/network-runtime-protocol/valid/nas-authorization-request.json +19 -0
  56. package/fixtures/json-schema/network-runtime-protocol/valid/nas-authorization-result.json +24 -0
  57. package/fixtures/json-schema/network-runtime-protocol/valid/nas-session-command-result.json +17 -0
  58. package/fixtures/json-schema/network-runtime-protocol/valid/nas-session-command.json +27 -0
  59. package/fixtures/json-schema/network-runtime-protocol/valid/vpn-connect-request.json +17 -0
  60. package/fixtures/json-schema/network-runtime-protocol/valid/vpn-connect-result.json +34 -0
  61. package/fixtures/json-schema/network-runtime-protocol/valid/vpn-managed-connect.json +15 -0
  62. package/fixtures/json-schema/network-runtime-protocol/valid/wireguard-enrollment.json +20 -0
  63. package/fixtures/json-schema/network-runtime-protocol/valid/wireguard-site-link.json +48 -0
  64. package/fixtures/openapi/AgentChatInput/invalid/empty-question.json +4 -0
  65. package/fixtures/openapi/AgentChatInput/invalid/system-role.json +9 -0
  66. package/fixtures/openapi/AgentChatInput/valid/authorized-background.json +5 -0
  67. package/fixtures/openapi/AgentChatInput/valid/conversation.json +15 -0
  68. package/fixtures/openapi/AgentRunnerToolCallRequest/invalid/model-identity.json +1 -0
  69. package/fixtures/openapi/AgentRunnerToolCallRequest/valid/search.json +1 -0
  70. package/fixtures/openapi/AnnouncementReceiptPageEnvelope/invalid/missing-read-count.json +9 -0
  71. package/fixtures/openapi/AnnouncementReceiptPageEnvelope/valid/read-and-unread.json +28 -0
  72. package/fixtures/openapi/ApplicationInput/invalid/negative-version.json +6 -0
  73. package/fixtures/openapi/ApplicationInput/invalid/zero-version.json +6 -0
  74. package/fixtures/openapi/ApplicationInput/valid/versioned.json +6 -0
  75. package/fixtures/openapi/ApprovalRequest/invalid/resolved-scopes.json +20 -0
  76. package/fixtures/openapi/ApprovalRequest/valid/resolved-scopes.json +21 -0
  77. package/fixtures/openapi/BuildTemplateInput/invalid/negative-revision.json +6 -0
  78. package/fixtures/openapi/BuildTemplateInput/valid/draft.json +11 -0
  79. package/fixtures/openapi/BuildTriggerRequest/invalid/no-ref.json +1 -0
  80. package/fixtures/openapi/BuildTriggerRequest/valid/no-environment.json +1 -0
  81. package/fixtures/openapi/BuildpacksConfiguration/invalid/mutable-builder.json +5 -0
  82. package/fixtures/openapi/BuildpacksConfiguration/invalid/privilege-override.json +6 -0
  83. package/fixtures/openapi/BuildpacksConfiguration/invalid/unsupported-platform.json +5 -0
  84. package/fixtures/openapi/BuildpacksConfiguration/valid/pinned.json +5 -0
  85. package/fixtures/openapi/CapabilityAssessment/invalid/contract.json +16 -0
  86. package/fixtures/openapi/CapabilityAssessment/valid/contract.json +16 -0
  87. package/fixtures/openapi/CapabilityPlan/invalid/contract.json +16 -0
  88. package/fixtures/openapi/CapabilityPlan/valid/contract.json +19 -0
  89. package/fixtures/openapi/CapabilityPlanValidation/invalid/contract.json +5 -0
  90. package/fixtures/openapi/CapabilityPlanValidation/valid/contract.json +11 -0
  91. package/fixtures/openapi/CapabilityTask/invalid/contract.json +33 -0
  92. package/fixtures/openapi/CapabilityTask/valid/contract.json +34 -0
  93. package/fixtures/openapi/CapabilityTaskInput/invalid/contract.json +22 -0
  94. package/fixtures/openapi/CapabilityTaskInput/valid/contract.json +22 -0
  95. package/fixtures/openapi/CapabilityValueSemantic/invalid/contract.json +4 -0
  96. package/fixtures/openapi/CapabilityValueSemantic/valid/contract.json +7 -0
  97. package/fixtures/openapi/DeliveryAccessResult/invalid/release-verification.json +8 -0
  98. package/fixtures/openapi/DeliveryAccessResult/valid/release-verification.json +8 -0
  99. package/fixtures/openapi/DeliveryBatchAssessment/invalid/release-verification.json +11 -0
  100. package/fixtures/openapi/DeliveryBatchAssessment/valid/release-verification.json +11 -0
  101. package/fixtures/openapi/DeliveryBatchAssessmentInput/invalid/release-verification.json +9 -0
  102. package/fixtures/openapi/DeliveryBatchAssessmentInput/valid/release-verification.json +8 -0
  103. package/fixtures/openapi/DeliveryBatchInput/invalid/ambiguous-source.json +19 -0
  104. package/fixtures/openapi/DeliveryBatchInput/invalid/missing-idempotency.json +16 -0
  105. package/fixtures/openapi/DeliveryBatchInput/valid/quick-deploy.json +17 -0
  106. package/fixtures/openapi/DeliveryBatchInput/valid/saved-workflow.json +5 -0
  107. package/fixtures/openapi/DeliveryBlueprintInput/invalid/unversioned-preset.json +31 -0
  108. package/fixtures/openapi/DeliveryBlueprintInput/valid/service-preset.json +32 -0
  109. package/fixtures/openapi/DeliveryDocument/invalid/unknown-field.json +24 -0
  110. package/fixtures/openapi/DeliveryDocument/invalid/unknown-kind.json +23 -0
  111. package/fixtures/openapi/DeliveryDocument/invalid/unknown-version.json +23 -0
  112. package/fixtures/openapi/DeliveryDocument/valid/build-template.json +26 -0
  113. package/fixtures/openapi/DeliveryDocument/valid/deployment-template.json +26 -0
  114. package/fixtures/openapi/DeliveryDocument/valid/legacy-dag.json +39 -0
  115. package/fixtures/openapi/DeliveryDocument/valid/workflow-template.json +23 -0
  116. package/fixtures/openapi/DeliveryDocument/valid/workflow.json +20 -0
  117. package/fixtures/openapi/DeliveryDraftInput/invalid/short-idempotency-key.json +30 -0
  118. package/fixtures/openapi/DeliveryDraftInput/valid/idempotent-create.json +30 -0
  119. package/fixtures/openapi/DeliveryDraftService/invalid/zero-version.json +7 -0
  120. package/fixtures/openapi/DeliveryDraftService/valid/versioned-template.json +9 -0
  121. package/fixtures/openapi/DeliveryExecutionHistoryPage/invalid-kind.json +9 -0
  122. package/fixtures/openapi/DeliveryExecutionHistoryPage/valid-build.json +16 -0
  123. package/fixtures/openapi/DeliveryExecutionHistoryPage/valid-empty.json +3 -0
  124. package/fixtures/openapi/DeliveryPlanApprovalInput/invalid/confirm.json +1 -0
  125. package/fixtures/openapi/DeliveryPlanApprovalInput/valid/approve.json +1 -0
  126. package/fixtures/openapi/DeliveryPlanInput/invalid/draft-manifest-revision.json +1 -0
  127. package/fixtures/openapi/DeliveryPlanInput/valid/manifest-revision.json +1 -0
  128. package/fixtures/openapi/DeliveryTargetInput/invalid/deploy-without-environment.json +7 -0
  129. package/fixtures/openapi/DeliveryTargetInput/valid/build-without-environment.json +6 -0
  130. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/duplicate-kind.json +13 -0
  131. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/embedded-credentials.json +16 -0
  132. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/empty-kinds.json +10 -0
  133. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/negative-generation.json +15 -0
  134. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/unknown-kind.json +12 -0
  135. package/fixtures/openapi/DeliveryTemplateSourceInput/valid/manual-source.json +15 -0
  136. package/fixtures/openapi/DeliveryWorkflowDefinition/invalid/unversioned-template.json +15 -0
  137. package/fixtures/openapi/DeliveryWorkflowDefinition/valid/cross-app.json +24 -0
  138. package/fixtures/openapi/DeliveryWorkflowInput/invalid/short-key.json +1 -0
  139. package/fixtures/openapi/DeliveryWorkflowInput/valid/idempotent-create.json +1 -0
  140. package/fixtures/openapi/DeploymentTemplatePreviewInput/invalid/invalid-target-override.json +7 -0
  141. package/fixtures/openapi/DeploymentTemplatePreviewInput/invalid/invalid-zero-version.json +6 -0
  142. package/fixtures/openapi/DeploymentTemplatePreviewInput/valid/valid.json +6 -0
  143. package/fixtures/openapi/DockerDeliveryConfiguration/invalid/empty-mappings.json +5 -0
  144. package/fixtures/openapi/DockerDeliveryConfiguration/valid/compose.json +7 -0
  145. package/fixtures/openapi/DockerDeliverySnapshot/invalid/missing-required-field.json +19 -0
  146. package/fixtures/openapi/DockerDeliverySnapshot/valid/frozen-project.json +20 -0
  147. package/fixtures/openapi/DockerOperationCallbackRequest/invalid/cancellation-acknowledged-not-boolean.json +13 -0
  148. package/fixtures/openapi/DockerOperationCallbackRequest/valid/cancellation-acknowledged.json +13 -0
  149. package/fixtures/openapi/DockerProjectInput/invalid/empty-host.json +4 -0
  150. package/fixtures/openapi/DockerProjectInput/valid/inline-idempotent.json +7 -0
  151. package/fixtures/openapi/DockerQuickCreateHostInput/invalid/capacity-type.json +1 -0
  152. package/fixtures/openapi/DockerQuickCreateHostInput/valid/capacity.json +1 -0
  153. package/fixtures/openapi/EndpointDevice/invalid/missing-owner.json +8 -0
  154. package/fixtures/openapi/EndpointDevice/valid/active.json +35 -0
  155. package/fixtures/openapi/EndpointDeviceRegistrationInput/invalid/client-owned-status.json +5 -0
  156. package/fixtures/openapi/EndpointDeviceRegistrationInput/invalid/oversized-network-inventory.json +18 -0
  157. package/fixtures/openapi/EndpointDeviceRegistrationInput/valid/macos.json +28 -0
  158. package/fixtures/openapi/HelmDeliveryConfiguration/invalid/plain-credential.json +21 -0
  159. package/fixtures/openapi/HelmDeliveryConfiguration/invalid/release-name.json +20 -0
  160. package/fixtures/openapi/HelmDeliveryConfiguration/valid/private-oci.json +20 -0
  161. package/fixtures/openapi/HelmDeliverySnapshot/invalid/secret-plan.json +31 -0
  162. package/fixtures/openapi/HelmDeliverySnapshot/invalid/unknown-operation.json +28 -0
  163. package/fixtures/openapi/HelmDeliverySnapshot/valid/first-install.json +28 -0
  164. package/fixtures/openapi/IdentityApplication/invalid/outpost-status.json +1 -0
  165. package/fixtures/openapi/IdentityApplicationOnboardingInput/invalid/missing-access.json +12 -0
  166. package/fixtures/openapi/IdentityApplicationOnboardingInput/valid/link.json +13 -0
  167. package/fixtures/openapi/IdentityOutpost/invalid/missing-runtime-status.json +9 -0
  168. package/fixtures/openapi/IdentityOutpost/valid/healthy.json +17 -0
  169. package/fixtures/openapi/IdentityOutpost/valid/unregistered.json +12 -0
  170. package/fixtures/openapi/IdentityOutpostDeployment/invalid/missing-protocol.json +3 -0
  171. package/fixtures/openapi/IdentityOutpostDeployment/valid/remote.json +6 -0
  172. package/fixtures/openapi/IdentityOutpostInput/invalid/forged-observation.json +7 -0
  173. package/fixtures/openapi/IdentityOutpostInput/valid/forward-auth.json +6 -0
  174. package/fixtures/openapi/IdentityOutpostInput/valid/legacy.json +8 -0
  175. package/fixtures/openapi/IdentityProviderSetup/invalid/fake-verification.json +1 -0
  176. package/fixtures/openapi/IdentityProviderSetup/valid/incomplete.json +1 -0
  177. package/fixtures/openapi/IdentityProviderSetup/valid/remote.json +1 -0
  178. package/fixtures/openapi/IdentityProviderUserMetadata/invalid/attributes.json +8 -0
  179. package/fixtures/openapi/IdentityProviderUserMetadata/valid/attributes.json +13 -0
  180. package/fixtures/openapi/KubernetesCustomResource/invalid/negative-generation.json +1 -0
  181. package/fixtures/openapi/KubernetesCustomResource/valid/deleting-operator.json +1 -0
  182. package/fixtures/openapi/KubernetesResourceCreationReceipt/invalid/manifest-content.json +20 -0
  183. package/fixtures/openapi/KubernetesResourceCreationReceipt/valid/confirmed.json +20 -0
  184. package/fixtures/openapi/KubernetesResourceCreationReceipt/valid/unknown.json +19 -0
  185. package/fixtures/openapi/LLMUpstreamTestResultEnvelope/invalid/models-not-array.json +9 -0
  186. package/fixtures/openapi/LLMUpstreamTestResultEnvelope/valid/discovered-models.json +11 -0
  187. package/fixtures/openapi/ManifestDeploymentEnvelope/invalid/negative-resource-observation.json +57 -0
  188. package/fixtures/openapi/ManifestDeploymentEnvelope/valid/operator-deleting.json +57 -0
  189. package/fixtures/openapi/ManifestExecutionTaskPayload/invalid/gitops-empty.json +7 -0
  190. package/fixtures/openapi/ManifestExecutionTaskPayload/valid/gitops-frozen-children.json +18 -0
  191. package/fixtures/openapi/ManifestKustomizeOptions/invalid/escaping-entry.json +1 -0
  192. package/fixtures/openapi/ManifestKustomizeOptions/invalid/mutable-image.json +1 -0
  193. package/fixtures/openapi/ManifestKustomizeOptions/valid/overlay-images.json +7 -0
  194. package/fixtures/openapi/ManifestRevisionInput/invalid/missing-version.json +1 -0
  195. package/fixtures/openapi/ManifestRevisionInput/valid/current-draft.json +1 -0
  196. package/fixtures/openapi/ManifestServiceTemplateInputs/invalid/mutable-image.json +8 -0
  197. package/fixtures/openapi/ManifestServiceTemplateInputs/valid/frozen-service-image.json +9 -0
  198. package/fixtures/openapi/NetworkAccessGrant/invalid/token-digest.json +15 -0
  199. package/fixtures/openapi/NetworkAccessGrant/valid/issued.json +14 -0
  200. package/fixtures/openapi/NetworkAccessGrantInput/invalid/no-resources.json +7 -0
  201. package/fixtures/openapi/NetworkAccessGrantInput/valid/direct-ztna.json +8 -0
  202. package/fixtures/openapi/NetworkAccessGrantSecret/invalid/short-token.json +17 -0
  203. package/fixtures/openapi/NetworkAccessGrantSecret/valid/issued.json +17 -0
  204. package/fixtures/openapi/NetworkAccessPolicy/invalid/missing-version.json +20 -0
  205. package/fixtures/openapi/NetworkAccessPolicy/valid/published-draft.json +21 -0
  206. package/fixtures/openapi/NetworkAccessPolicyInput/invalid/duplicate-team.json +17 -0
  207. package/fixtures/openapi/NetworkAccessPolicyInput/valid/team-and-tag-allow.json +17 -0
  208. package/fixtures/openapi/NetworkConflictAnalysisRequest/invalid/ipv6-range.json +9 -0
  209. package/fixtures/openapi/NetworkConflictAnalysisRequest/valid/runtime-ranges.json +15 -0
  210. package/fixtures/openapi/NetworkConnectionOption/invalid/secret.json +10 -0
  211. package/fixtures/openapi/NetworkConnectionOption/valid/wifi.json +9 -0
  212. package/fixtures/openapi/NetworkConnectionOption/valid/wired.json +8 -0
  213. package/fixtures/openapi/NetworkGateway/invalid/missing-site.json +7 -0
  214. package/fixtures/openapi/NetworkGateway/valid/online.json +23 -0
  215. package/fixtures/openapi/NetworkGatewayInput/invalid/default-route-overlay.json +13 -0
  216. package/fixtures/openapi/NetworkGatewayInput/valid/routed.json +14 -0
  217. package/fixtures/openapi/NetworkLease/invalid/empty-cidrs.json +12 -0
  218. package/fixtures/openapi/NetworkLease/valid/active.json +12 -0
  219. package/fixtures/openapi/NetworkMihomoProfile/invalid/subscription-leak.json +20 -0
  220. package/fixtures/openapi/NetworkMihomoProfile/valid/managed.json +21 -0
  221. package/fixtures/openapi/NetworkMihomoProfileInput/invalid/app-subscription-secret.json +14 -0
  222. package/fixtures/openapi/NetworkMihomoProfileInput/invalid/manual-node-with-subscription.json +20 -0
  223. package/fixtures/openapi/NetworkMihomoProfileInput/valid/app-subscription.json +14 -0
  224. package/fixtures/openapi/NetworkMihomoProfileInput/valid/managed.json +16 -0
  225. package/fixtures/openapi/NetworkMihomoProfileInput/valid/manual-node.json +21 -0
  226. package/fixtures/openapi/NetworkNASBinding/invalid/secret.json +13 -0
  227. package/fixtures/openapi/NetworkNASBinding/valid/default.json +16 -0
  228. package/fixtures/openapi/NetworkNASBindingInput/invalid/secret.json +10 -0
  229. package/fixtures/openapi/NetworkNASBindingInput/valid/default.json +13 -0
  230. package/fixtures/openapi/NetworkPolicyPreviewRequest/invalid/unknown-mode.json +6 -0
  231. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-direct-ztna.json +6 -0
  232. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-vpn-ztna.json +6 -0
  233. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-vpn.json +6 -0
  234. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/internal-direct.json +7 -0
  235. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/internal-ztna.json +7 -0
  236. package/fixtures/openapi/NetworkPolicyPreviewResult/invalid/bypass-path.json +9 -0
  237. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/onboarding.json +10 -0
  238. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/protected-broad-path-denied.json +9 -0
  239. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/protected-resource.json +9 -0
  240. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/quarantine.json +10 -0
  241. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/restricted.json +10 -0
  242. package/fixtures/openapi/NetworkPolicySnapshot/invalid/zero-version.json +7 -0
  243. package/fixtures/openapi/NetworkPolicySnapshot/valid/published.json +7 -0
  244. package/fixtures/openapi/NetworkResourceInput/invalid/invalid-port.json +10 -0
  245. package/fixtures/openapi/NetworkResourceInput/valid/protected-cidr.json +10 -0
  246. package/fixtures/openapi/NetworkRuntimeEnrollmentInput/invalid/excessive-ttl.json +7 -0
  247. package/fixtures/openapi/NetworkRuntimeEnrollmentInput/valid/endpoint.json +7 -0
  248. package/fixtures/openapi/NetworkRuntimeEnrollmentSecret/invalid/short-token.json +15 -0
  249. package/fixtures/openapi/NetworkRuntimeEnrollmentSecret/valid/pending.json +15 -0
  250. package/fixtures/openapi/NetworkSession/invalid/unknown-status.json +14 -0
  251. package/fixtures/openapi/NetworkSession/valid/restricted-vpn-ztna.json +16 -0
  252. package/fixtures/openapi/NetworkSessionActionExecuteInput/invalid/short-hash.json +6 -0
  253. package/fixtures/openapi/NetworkSessionActionExecuteInput/valid/restrict.json +6 -0
  254. package/fixtures/openapi/NetworkSessionActionInput/invalid/unknown-action.json +5 -0
  255. package/fixtures/openapi/NetworkSessionActionInput/valid/restrict.json +5 -0
  256. package/fixtures/openapi/NetworkSessionActionPlan/invalid/missing-hash.json +12 -0
  257. package/fixtures/openapi/NetworkSessionActionPlan/valid/fallback-disconnect.json +13 -0
  258. package/fixtures/openapi/NetworkSessionCommand/invalid/unknown-status.json +14 -0
  259. package/fixtures/openapi/NetworkSessionCommand/valid/pending.json +14 -0
  260. package/fixtures/openapi/NetworkSiteInput/invalid/unknown-status.json +4 -0
  261. package/fixtures/openapi/NetworkSiteInput/valid/shanghai.json +5 -0
  262. package/fixtures/openapi/NetworkSiteProfileBinding/invalid/vlan.json +9 -0
  263. package/fixtures/openapi/NetworkSiteProfileBinding/valid/default.json +10 -0
  264. package/fixtures/openapi/NetworkSiteProfileBindingInput/invalid/timeout.json +7 -0
  265. package/fixtures/openapi/NetworkSiteProfileBindingInput/valid/default.json +7 -0
  266. package/fixtures/openapi/NetworkSpaceInput/invalid/empty-cidrs.json +6 -0
  267. package/fixtures/openapi/NetworkSpaceInput/invalid/malformed-cidr.json +6 -0
  268. package/fixtures/openapi/NetworkSpaceInput/valid/corp.json +6 -0
  269. package/fixtures/openapi/NetworkTelemetrySummary/invalid/raw-destination.json +29 -0
  270. package/fixtures/openapi/NetworkTelemetrySummary/valid/proxy-flow.json +36 -0
  271. package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/auto-with-gateway.json +6 -0
  272. package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/missing-manual-gateway.json +5 -0
  273. package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/mode-override.json +7 -0
  274. package/fixtures/openapi/NetworkVPNConnectionIntentInput/valid/auto-intent.json +5 -0
  275. package/fixtures/openapi/NetworkVPNConnectionIntentInput/valid/manual-intent.json +6 -0
  276. package/fixtures/openapi/NetworkVPNProfileInput/invalid/unknown-private-key.json +25 -0
  277. package/fixtures/openapi/NetworkVPNProfileInput/valid/assigned-profile.json +24 -0
  278. package/fixtures/openapi/NetworkVPNSelectionPolicyInput/invalid/unbounded-attempts.json +21 -0
  279. package/fixtures/openapi/NetworkVPNSelectionPolicyInput/valid/provider-policy.json +21 -0
  280. package/fixtures/openapi/ObservabilityMetricAssessmentInput/invalid/arbitrary-expression.json +10 -0
  281. package/fixtures/openapi/ObservabilityMetricAssessmentInput/valid/metric-window.json +10 -0
  282. package/fixtures/openapi/PluginManifest/valid/hermes-api.json +53 -0
  283. package/fixtures/openapi/ProgressiveRolloutControlInput/invalid/missing-identity.json +5 -0
  284. package/fixtures/openapi/ProgressiveRolloutControlInput/invalid/skip-analysis.json +5 -0
  285. package/fixtures/openapi/ProgressiveRolloutControlInput/valid/pause.json +5 -0
  286. package/fixtures/openapi/ReleaseTargetInput/invalid/missing-required-field.json +15 -0
  287. package/fixtures/openapi/ReleaseTargetInput/valid/docker-compose.json +16 -0
  288. package/fixtures/openapi/RepositoryAnalysis/invalid/moving-ref.json +11 -0
  289. package/fixtures/openapi/RepositoryAnalysis/valid/go.json +29 -0
  290. package/fixtures/openapi/RepositoryAnalysisInput/invalid/arbitrary-source-url.json +6 -0
  291. package/fixtures/openapi/RepositoryAnalysisInput/invalid/missing-ref.json +4 -0
  292. package/fixtures/openapi/RepositoryAnalysisInput/valid/nested-project.json +6 -0
  293. package/fixtures/openapi/ResourceLease/invalid/missing-session.json +10 -0
  294. package/fixtures/openapi/ResourceLease/valid/active.json +11 -0
  295. package/fixtures/openapi/ServiceDeploymentTemplateBinding/invalid/invalid-unpinned.json +4 -0
  296. package/fixtures/openapi/ServiceDeploymentTemplateBinding/valid/valid.json +7 -0
  297. package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-executable-schema.json +25 -0
  298. package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-missing-schema.json +21 -0
  299. package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-mixed-renderers.json +40 -0
  300. package/fixtures/openapi/ServiceDeploymentTemplateInput/valid/valid-nested-parameters.json +41 -0
  301. package/fixtures/openapi/ServiceDeploymentTemplateInput/valid/valid-yaml.json +34 -0
  302. package/fixtures/openapi/TemplatePublishInput/invalid/missing-revision.json +1 -0
  303. package/fixtures/openapi/TemplatePublishInput/invalid/unknown-field.json +4 -0
  304. package/fixtures/openapi/TemplatePublishInput/invalid/zero-revision.json +3 -0
  305. package/fixtures/openapi/TemplatePublishInput/valid/revision.json +3 -0
  306. package/fixtures/openapi/ToolCapability/invalid/bad-idempotency.json +35 -0
  307. package/fixtures/openapi/ToolCapability/invalid/unversioned-check.json +47 -0
  308. package/fixtures/openapi/ToolCapability/valid/checks.json +48 -0
  309. package/fixtures/openapi/ToolCapability/valid/versioned-task.json +35 -0
  310. package/fixtures/openapi/ToolInvocationRequest/invalid/empty-version.json +8 -0
  311. package/fixtures/openapi/ToolInvocationRequest/valid/versioned.json +8 -0
  312. package/fixtures/openapi/ToolInvocationResult/invalid/missing-status-call.json +13 -0
  313. package/fixtures/openapi/ToolInvocationResult/valid/task.json +20 -0
  314. package/fixtures/openapi/VirtualMachineCreateInput/invalid/capacity-type.json +1 -0
  315. package/fixtures/openapi/VirtualMachineCreateInput/valid/capacity.json +1 -0
  316. package/fixtures/openapi/VirtualizationCapacityInput/invalid/missing-disk.json +1 -0
  317. package/fixtures/openapi/VirtualizationCapacityInput/valid/running-vm.json +1 -0
  318. package/fixtures/openapi/VirtualizationCapacityResult/invalid/invented-status.json +1 -0
  319. package/fixtures/openapi/VirtualizationCapacityResult/valid/available.json +1 -0
  320. package/fixtures/openapi/VirtualizationWorkerCreateInput/invalid/secret-input.json +5 -0
  321. package/fixtures/openapi/VirtualizationWorkerCreateInput/valid/one-worker.json +4 -0
  322. package/fixtures/openapi/VirtualizationWorkerPoolInput/invalid/external-owner.json +27 -0
  323. package/fixtures/openapi/VirtualizationWorkerPoolInput/invalid/zero-budget.json +27 -0
  324. package/fixtures/openapi/VirtualizationWorkerPoolInput/valid/registered.json +27 -0
  325. package/fixtures/openapi/VirtualizationWorkerPoolListEnvelope/invalid/nested-data.json +5 -0
  326. package/fixtures/openapi/VirtualizationWorkerPoolListEnvelope/valid/empty.json +3 -0
  327. package/fixtures/openapi/WorkbenchContextSelection/invalid/missing-file-content.json +8 -0
  328. package/fixtures/openapi/WorkbenchContextSelection/invalid/unknown-reference-kind.json +8 -0
  329. package/fixtures/openapi/WorkbenchContextSelection/valid/text-and-resource.json +17 -0
  330. package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/trigger-without-plan.json +10 -0
  331. package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/unknown-trigger.json +28 -0
  332. package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/zero-interval.json +28 -0
  333. package/fixtures/openapi/WorkbenchInspectionTaskInput/valid/alert-capability.json +30 -0
  334. package/fixtures/openapi/WorkbenchInspectionTaskInput/valid/scheduled-capability.json +28 -0
  335. package/fixtures/openapi/WorkbenchInspectionTrigger/invalid/missing-rule.json +3 -0
  336. package/fixtures/openapi/WorkbenchInspectionTrigger/invalid/schedule-alert-selector.json +4 -0
  337. package/fixtures/openapi/WorkbenchInspectionTrigger/valid/schedule.json +3 -0
  338. package/fixtures/openapi/WorkbenchModelPreferences/invalid/unknown-effort.json +1 -0
  339. package/fixtures/openapi/WorkbenchModelPreferences/valid/selected.json +1 -0
  340. package/fixtures/openapi/WorkflowCatalogPage/invalid/unsupported-kind.json +6 -0
  341. package/fixtures/openapi/WorkflowCatalogPage/valid/build-without-environment.json +6 -0
  342. package/fixtures/openapi/WorkflowTemplateInput/invalid/zero-revision.json +6 -0
  343. package/fixtures/openapi/WorkflowTemplateInput/valid/draft.json +10 -0
  344. package/gen/go/sohaapi/client.go +1 -1
  345. package/gen/go/sohaapi/types.go +15610 -6415
  346. package/gen/go/sohaapi/types_test.go +100 -1
  347. package/gen/go/sohaapi/vpn_models_test.go +21 -0
  348. package/gen/ts/sohaapi/index.ts +27859 -17518
  349. package/go.mod +107 -5
  350. package/go.sum +379 -16
  351. package/helmrelease/delivery.go +283 -0
  352. package/helmrelease/delivery_test.go +102 -0
  353. package/helmrelease/frozen_chart.go +91 -0
  354. package/helmrelease/result.go +27 -0
  355. package/helmrelease/runtime/delivery.go +508 -0
  356. package/helmrelease/runtime/delivery_test.go +236 -0
  357. package/helmrelease/runtime/resources_test.go +60 -0
  358. package/helmrelease/values.go +99 -0
  359. package/knowledge/context-envelope.schema.json +1 -0
  360. package/mcp/gateway-manifest.schema.json +387 -72
  361. package/network/README.md +156 -0
  362. package/network/network-ingest-event.schema.json +415 -0
  363. package/network/network-radius-accounting.schema.json +41 -0
  364. package/network/network-runtime-protocol.schema.json +1208 -0
  365. package/network/schema.go +26 -0
  366. package/network/schema_test.go +22 -0
  367. package/openapi/soha-api.json +59260 -35960
  368. package/openapi/soha-api.yaml +36064 -26232
  369. package/openapi/spec_generated.go +3 -3
  370. package/package.json +7 -1
  371. package/resource/manifest_health.go +155 -0
  372. package/resource/manifest_health_test.go +37 -0
  373. package/resource/models.go +14 -0
  374. package/resource/runtime/argocd.go +166 -0
  375. package/resource/runtime/argocd_integration_test.go +142 -0
  376. package/resource/runtime/argocd_observation.go +143 -0
  377. package/resource/runtime/argocd_operation.go +253 -0
  378. package/resource/runtime/argocd_resources.go +115 -0
  379. package/resource/runtime/argocd_resources_test.go +107 -0
  380. package/resource/runtime/argocd_test.go +386 -0
  381. package/resource/runtime/health.go +115 -0
  382. package/resource/runtime/health_test.go +78 -0
  383. package/resource/runtime/operator_integration_test.go +174 -0
  384. package/resource/runtime/ownership.go +178 -0
  385. package/resource/runtime/ownership_test.go +178 -0
  386. package/resource/runtime/rollout_integration_test.go +287 -0
  387. package/resource/runtime/rollout_observation.go +252 -0
  388. package/resource/runtime/rollout_operation.go +398 -0
  389. package/resource/runtime/rollout_resources.go +385 -0
  390. package/resource/runtime/rollout_task.go +165 -0
  391. package/resource/runtime/rollout_test.go +450 -0
@@ -0,0 +1,1208 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://contracts.opensoha.dev/network/network-runtime-protocol.schema.json",
4
+ "title": "OpenSoha Network Runtime Protocol Message",
5
+ "description": "Strict, versioned control messages exchanged by network-control, endpoint services and network gateways. Private keys and raw authentication credentials are intentionally excluded.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schemaVersion",
10
+ "messageId",
11
+ "messageType",
12
+ "producerId",
13
+ "runtimeId",
14
+ "runtimeKind",
15
+ "occurredAt",
16
+ "expiresAt",
17
+ "payload"
18
+ ],
19
+ "properties": {
20
+ "schemaVersion": { "const": "network-runtime/v1alpha1" },
21
+ "messageId": { "$ref": "#/$defs/Identifier" },
22
+ "messageType": {
23
+ "enum": [
24
+ "vpn.managed.prepare.request",
25
+ "vpn.managed.prepare.result",
26
+ "vpn.managed.connect.request",
27
+ "vpn.managed.connect.result",
28
+ "runtime.enroll.request",
29
+ "runtime.enroll.result",
30
+ "configuration.desired",
31
+ "configuration.applied",
32
+ "lease.renew.request",
33
+ "lease.renew.result",
34
+ "lease.revoke",
35
+ "vpn.connect.request",
36
+ "vpn.connect.result",
37
+ "nas.authorization.request",
38
+ "nas.authorization.result",
39
+ "nas.session.command",
40
+ "nas.session.command.result"
41
+ ]
42
+ },
43
+ "producerId": { "$ref": "#/$defs/Identifier" },
44
+ "runtimeId": { "$ref": "#/$defs/Identifier" },
45
+ "runtimeKind": { "enum": ["endpoint", "gateway", "nas"] },
46
+ "occurredAt": { "type": "string", "format": "date-time" },
47
+ "expiresAt": { "type": "string", "format": "date-time" },
48
+ "payload": {
49
+ "oneOf": [
50
+ { "$ref": "#/$defs/VPNManagedPrepareResult" },
51
+ { "$ref": "#/$defs/VPNManagedConnectRequest" },
52
+ { "$ref": "#/$defs/VPNManagedConnectResult" },
53
+ { "$ref": "#/$defs/EnrollmentRequest" },
54
+ { "$ref": "#/$defs/EnrollmentResult" },
55
+ { "$ref": "#/$defs/ConfigurationDesired" },
56
+ { "$ref": "#/$defs/ConfigurationApplied" },
57
+ { "$ref": "#/$defs/LeaseRenewRequest" },
58
+ { "$ref": "#/$defs/LeaseRenewResult" },
59
+ { "$ref": "#/$defs/LeaseRevoke" },
60
+ { "$ref": "#/$defs/VPNConnectRequest" },
61
+ { "$ref": "#/$defs/VPNConnectResult" },
62
+ { "$ref": "#/$defs/NASAuthorizationRequest" },
63
+ { "$ref": "#/$defs/NASAuthorizationResult" },
64
+ { "$ref": "#/$defs/NASSessionCommand" },
65
+ { "$ref": "#/$defs/NASSessionCommandResult" }
66
+ ]
67
+ }
68
+ },
69
+ "allOf": [
70
+ {
71
+ "if": {
72
+ "properties": {
73
+ "messageType": {
74
+ "const": "vpn.managed.prepare.request"
75
+ }
76
+ },
77
+ "required": [
78
+ "messageType"
79
+ ]
80
+ },
81
+ "then": {
82
+ "properties": {
83
+ "runtimeKind": {
84
+ "const": "endpoint"
85
+ },
86
+ "payload": {
87
+ "$ref": "#/$defs/VPNManagedConnectRequest"
88
+ }
89
+ }
90
+ }
91
+ },
92
+ {
93
+ "if": {
94
+ "properties": {
95
+ "messageType": {
96
+ "const": "vpn.managed.prepare.result"
97
+ }
98
+ },
99
+ "required": [
100
+ "messageType"
101
+ ]
102
+ },
103
+ "then": {
104
+ "properties": {
105
+ "runtimeKind": {
106
+ "const": "endpoint"
107
+ },
108
+ "payload": {
109
+ "$ref": "#/$defs/VPNManagedPrepareResult"
110
+ }
111
+ }
112
+ }
113
+ },
114
+ {
115
+ "if": {
116
+ "properties": {
117
+ "messageType": {
118
+ "const": "vpn.managed.connect.request"
119
+ }
120
+ },
121
+ "required": [
122
+ "messageType"
123
+ ]
124
+ },
125
+ "then": {
126
+ "properties": {
127
+ "runtimeKind": {
128
+ "const": "endpoint"
129
+ },
130
+ "payload": {
131
+ "$ref": "#/$defs/VPNManagedConnectRequest"
132
+ }
133
+ }
134
+ }
135
+ },
136
+ {
137
+ "if": {
138
+ "properties": {
139
+ "messageType": {
140
+ "const": "vpn.managed.connect.result"
141
+ }
142
+ },
143
+ "required": [
144
+ "messageType"
145
+ ]
146
+ },
147
+ "then": {
148
+ "properties": {
149
+ "runtimeKind": {
150
+ "const": "endpoint"
151
+ },
152
+ "payload": {
153
+ "$ref": "#/$defs/VPNManagedConnectResult"
154
+ }
155
+ }
156
+ }
157
+ },
158
+ {
159
+ "if": { "properties": { "messageType": { "const": "runtime.enroll.request" } }, "required": ["messageType"] },
160
+ "then": { "properties": { "payload": { "$ref": "#/$defs/EnrollmentRequest" } } }
161
+ },
162
+ {
163
+ "if": { "properties": { "messageType": { "const": "runtime.enroll.result" } }, "required": ["messageType"] },
164
+ "then": { "properties": { "payload": { "$ref": "#/$defs/EnrollmentResult" } } }
165
+ },
166
+ {
167
+ "if": { "properties": { "messageType": { "const": "configuration.desired" } }, "required": ["messageType"] },
168
+ "then": { "properties": { "payload": { "$ref": "#/$defs/ConfigurationDesired" } } }
169
+ },
170
+ {
171
+ "if": { "properties": { "messageType": { "const": "configuration.applied" } }, "required": ["messageType"] },
172
+ "then": { "properties": { "payload": { "$ref": "#/$defs/ConfigurationApplied" } } }
173
+ },
174
+ {
175
+ "if": { "properties": { "messageType": { "const": "lease.renew.request" } }, "required": ["messageType"] },
176
+ "then": { "properties": { "payload": { "$ref": "#/$defs/LeaseRenewRequest" } } }
177
+ },
178
+ {
179
+ "if": { "properties": { "messageType": { "const": "lease.renew.result" } }, "required": ["messageType"] },
180
+ "then": { "properties": { "payload": { "$ref": "#/$defs/LeaseRenewResult" } } }
181
+ },
182
+ {
183
+ "if": { "properties": { "messageType": { "const": "lease.revoke" } }, "required": ["messageType"] },
184
+ "then": { "properties": { "payload": { "$ref": "#/$defs/LeaseRevoke" } } }
185
+ },
186
+ {
187
+ "if": { "properties": { "messageType": { "const": "vpn.connect.request" } }, "required": ["messageType"] },
188
+ "then": {
189
+ "properties": {
190
+ "runtimeKind": { "const": "endpoint" },
191
+ "payload": { "$ref": "#/$defs/VPNConnectRequest" }
192
+ }
193
+ }
194
+ },
195
+ {
196
+ "if": { "properties": { "messageType": { "const": "vpn.connect.result" } }, "required": ["messageType"] },
197
+ "then": {
198
+ "properties": {
199
+ "runtimeKind": { "const": "endpoint" },
200
+ "payload": { "$ref": "#/$defs/VPNConnectResult" }
201
+ }
202
+ }
203
+ },
204
+ {
205
+ "if": { "properties": { "messageType": { "const": "nas.authorization.request" } }, "required": ["messageType"] },
206
+ "then": {
207
+ "properties": {
208
+ "runtimeKind": { "const": "nas" },
209
+ "payload": { "$ref": "#/$defs/NASAuthorizationRequest" }
210
+ }
211
+ }
212
+ },
213
+ {
214
+ "if": { "properties": { "messageType": { "const": "nas.authorization.result" } }, "required": ["messageType"] },
215
+ "then": {
216
+ "properties": {
217
+ "runtimeKind": { "const": "nas" },
218
+ "payload": { "$ref": "#/$defs/NASAuthorizationResult" }
219
+ }
220
+ }
221
+ },
222
+ {
223
+ "if": { "properties": { "messageType": { "const": "nas.session.command" } }, "required": ["messageType"] },
224
+ "then": {
225
+ "properties": {
226
+ "runtimeKind": { "const": "nas" },
227
+ "payload": { "$ref": "#/$defs/NASSessionCommand" }
228
+ }
229
+ }
230
+ },
231
+ {
232
+ "if": { "properties": { "messageType": { "const": "nas.session.command.result" } }, "required": ["messageType"] },
233
+ "then": {
234
+ "properties": {
235
+ "runtimeKind": { "const": "nas" },
236
+ "payload": { "$ref": "#/$defs/NASSessionCommandResult" }
237
+ }
238
+ }
239
+ }
240
+ ],
241
+ "$defs": {
242
+ "VPNManagedPrepareRequest": {
243
+ "type": "object",
244
+ "additionalProperties": false,
245
+ "required": [
246
+ "requestId",
247
+ "intentId",
248
+ "intentToken"
249
+ ],
250
+ "properties": {
251
+ "requestId": {
252
+ "$ref": "#/$defs/Identifier"
253
+ },
254
+ "intentId": {
255
+ "$ref": "#/$defs/Identifier"
256
+ },
257
+ "intentToken": {
258
+ "type": "string",
259
+ "minLength": 43,
260
+ "maxLength": 43,
261
+ "pattern": "^[A-Za-z0-9_-]{43}$"
262
+ }
263
+ }
264
+ },
265
+ "VPNProbeDescriptor": {
266
+ "type": "object",
267
+ "additionalProperties": false,
268
+ "required": [
269
+ "gatewayId",
270
+ "runtimeId",
271
+ "name",
272
+ "providerCode"
273
+ ],
274
+ "properties": {
275
+ "gatewayId": {
276
+ "$ref": "#/$defs/Identifier"
277
+ },
278
+ "runtimeId": {
279
+ "$ref": "#/$defs/Identifier"
280
+ },
281
+ "name": {
282
+ "type": "string",
283
+ "maxLength": 200,
284
+ "minLength": 1
285
+ },
286
+ "providerCode": {
287
+ "type": "string",
288
+ "maxLength": 64
289
+ },
290
+ "url": {
291
+ "type": "string",
292
+ "maxLength": 2048,
293
+ "pattern": "^https://[^?#]+/vpn/probe$"
294
+ },
295
+ "token": {
296
+ "type": "string",
297
+ "minLength": 64,
298
+ "maxLength": 4096
299
+ },
300
+ "expiresAt": {
301
+ "type": "string",
302
+ "format": "date-time"
303
+ }
304
+ }
305
+ },
306
+ "VPNManagedPrepareResult": {
307
+ "type": "object",
308
+ "additionalProperties": false,
309
+ "required": [
310
+ "requestId",
311
+ "intentId",
312
+ "profileId",
313
+ "profileRevision",
314
+ "selectionPolicyRevision",
315
+ "expiresAt",
316
+ "samplesPerGateway",
317
+ "timeoutMillis",
318
+ "maxConcurrency",
319
+ "descriptors"
320
+ ],
321
+ "properties": {
322
+ "requestId": {
323
+ "$ref": "#/$defs/Identifier"
324
+ },
325
+ "intentId": {
326
+ "$ref": "#/$defs/Identifier"
327
+ },
328
+ "profileId": {
329
+ "$ref": "#/$defs/Identifier"
330
+ },
331
+ "profileRevision": {
332
+ "type": "integer",
333
+ "minimum": 1
334
+ },
335
+ "selectionPolicyRevision": {
336
+ "type": "integer",
337
+ "minimum": 1
338
+ },
339
+ "expiresAt": {
340
+ "type": "string",
341
+ "format": "date-time"
342
+ },
343
+ "samplesPerGateway": {
344
+ "type": "integer",
345
+ "minimum": 1,
346
+ "maximum": 10
347
+ },
348
+ "timeoutMillis": {
349
+ "type": "integer",
350
+ "minimum": 100,
351
+ "maximum": 3000
352
+ },
353
+ "maxConcurrency": {
354
+ "type": "integer",
355
+ "minimum": 1,
356
+ "maximum": 4
357
+ },
358
+ "descriptors": {
359
+ "type": "array",
360
+ "minItems": 0,
361
+ "maxItems": 32,
362
+ "items": {
363
+ "$ref": "#/$defs/VPNProbeDescriptor"
364
+ }
365
+ }
366
+ }
367
+ },
368
+ "VPNManagedConnectRequest": {
369
+ "type": "object",
370
+ "additionalProperties": false,
371
+ "required": [
372
+ "requestId",
373
+ "intentId",
374
+ "intentToken"
375
+ ],
376
+ "properties": {
377
+ "requestId": {
378
+ "$ref": "#/$defs/Identifier"
379
+ },
380
+ "intentId": {
381
+ "$ref": "#/$defs/Identifier"
382
+ },
383
+ "intentToken": {
384
+ "type": "string",
385
+ "minLength": 43,
386
+ "maxLength": 43,
387
+ "pattern": "^[A-Za-z0-9_-]{43}$"
388
+ },
389
+ "probeBatchId": {
390
+ "$ref": "#/$defs/Identifier"
391
+ }
392
+ }
393
+ },
394
+ "VPNManagedConnectResult": {
395
+ "type": "object",
396
+ "additionalProperties": false,
397
+ "required": [
398
+ "requestId",
399
+ "decision",
400
+ "reasonCode",
401
+ "policyVersion",
402
+ "validUntil",
403
+ "networkLeases",
404
+ "resourceLeases",
405
+ "profileId",
406
+ "profileRevision",
407
+ "selectionPolicyRevision",
408
+ "selection",
409
+ "selectionReason",
410
+ "siteId",
411
+ "networkSpaceId",
412
+ "mode",
413
+ "resourceIds",
414
+ "decisionId",
415
+ "failoverOnDisconnect",
416
+ "retryCooldownSeconds",
417
+ "maxAttempts"
418
+ ],
419
+ "properties": {
420
+ "requestId": {
421
+ "$ref": "#/$defs/Identifier"
422
+ },
423
+ "decision": {
424
+ "enum": [
425
+ "allow",
426
+ "deny"
427
+ ]
428
+ },
429
+ "reasonCode": {
430
+ "type": "string",
431
+ "minLength": 1,
432
+ "maxLength": 128
433
+ },
434
+ "sessionId": {
435
+ "$ref": "#/$defs/Identifier"
436
+ },
437
+ "gatewayId": {
438
+ "$ref": "#/$defs/Identifier"
439
+ },
440
+ "configurationVersion": {
441
+ "type": "integer",
442
+ "minimum": 1
443
+ },
444
+ "policyVersion": {
445
+ "type": "integer",
446
+ "minimum": 1
447
+ },
448
+ "validUntil": {
449
+ "type": "string",
450
+ "format": "date-time"
451
+ },
452
+ "networkLeases": {
453
+ "type": "array",
454
+ "maxItems": 256,
455
+ "items": {
456
+ "$ref": "#/$defs/NetworkLease"
457
+ }
458
+ },
459
+ "resourceLeases": {
460
+ "type": "array",
461
+ "maxItems": 512,
462
+ "items": {
463
+ "$ref": "#/$defs/ResourceLease"
464
+ }
465
+ },
466
+ "profileId": {
467
+ "$ref": "#/$defs/Identifier"
468
+ },
469
+ "profileRevision": {
470
+ "type": "integer",
471
+ "minimum": 1
472
+ },
473
+ "selectionPolicyRevision": {
474
+ "type": "integer",
475
+ "minimum": 1
476
+ },
477
+ "selection": {
478
+ "enum": [
479
+ "auto",
480
+ "manual"
481
+ ]
482
+ },
483
+ "selectionReason": {
484
+ "type": "string",
485
+ "maxLength": 128,
486
+ "minLength": 1
487
+ },
488
+ "siteId": {
489
+ "$ref": "#/$defs/Identifier"
490
+ },
491
+ "networkSpaceId": {
492
+ "$ref": "#/$defs/Identifier"
493
+ },
494
+ "mode": {
495
+ "enum": [
496
+ "internal_ztna",
497
+ "external_vpn",
498
+ "external_vpn_ztna",
499
+ "external_direct_ztna"
500
+ ]
501
+ },
502
+ "resourceIds": {
503
+ "type": "array",
504
+ "maxItems": 256,
505
+ "uniqueItems": true,
506
+ "items": {
507
+ "$ref": "#/$defs/Identifier"
508
+ }
509
+ },
510
+ "decisionId": {
511
+ "$ref": "#/$defs/Identifier"
512
+ },
513
+ "failoverOnDisconnect": {
514
+ "type": "boolean"
515
+ },
516
+ "retryCooldownSeconds": {
517
+ "type": "integer",
518
+ "minimum": 5,
519
+ "maximum": 300
520
+ },
521
+ "maxAttempts": {
522
+ "type": "integer",
523
+ "minimum": 1,
524
+ "maximum": 5
525
+ }
526
+ },
527
+ "allOf": [
528
+ {
529
+ "if": {
530
+ "properties": {
531
+ "decision": {
532
+ "const": "allow"
533
+ }
534
+ },
535
+ "required": [
536
+ "decision"
537
+ ]
538
+ },
539
+ "then": {
540
+ "required": [
541
+ "sessionId",
542
+ "gatewayId",
543
+ "configurationVersion"
544
+ ],
545
+ "anyOf": [
546
+ {
547
+ "properties": {
548
+ "networkLeases": {
549
+ "minItems": 1
550
+ }
551
+ }
552
+ },
553
+ {
554
+ "properties": {
555
+ "resourceLeases": {
556
+ "minItems": 1
557
+ }
558
+ }
559
+ }
560
+ ]
561
+ },
562
+ "else": {
563
+ "properties": {
564
+ "networkLeases": {
565
+ "maxItems": 0
566
+ },
567
+ "resourceLeases": {
568
+ "maxItems": 0
569
+ }
570
+ }
571
+ }
572
+ }
573
+ ]
574
+ },
575
+ "VPNProbeConfiguration": {
576
+ "type": "object",
577
+ "additionalProperties": false,
578
+ "required": [
579
+ "gatewayId",
580
+ "verificationKey"
581
+ ],
582
+ "properties": {
583
+ "gatewayId": {
584
+ "$ref": "#/$defs/Identifier"
585
+ },
586
+ "verificationKey": {
587
+ "type": "string",
588
+ "minLength": 44,
589
+ "maxLength": 44,
590
+ "pattern": "^[A-Za-z0-9+/]{43}=$"
591
+ }
592
+ }
593
+ },
594
+ "Identifier": {
595
+ "type": "string",
596
+ "minLength": 1,
597
+ "maxLength": 128,
598
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
599
+ },
600
+ "AccessProfile": {
601
+ "enum": ["onboarding", "full", "restricted", "quarantine", "deny"]
602
+ },
603
+ "IPv4Address": {
604
+ "type": "string",
605
+ "maxLength": 15,
606
+ "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$"
607
+ },
608
+ "IPv4CIDR": {
609
+ "type": "string",
610
+ "maxLength": 18,
611
+ "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])/(?:[0-9]|[12][0-9]|3[0-2])$",
612
+ "description": "Canonical IPv4 CIDR. IPv6 is intentionally deferred beyond network-runtime/v1alpha1."
613
+ },
614
+ "SplitRoute": {
615
+ "allOf": [
616
+ { "$ref": "#/$defs/IPv4CIDR" },
617
+ { "not": { "const": "0.0.0.0/0" } }
618
+ ]
619
+ },
620
+ "WireGuardPublicKey": {
621
+ "type": "string",
622
+ "minLength": 44,
623
+ "maxLength": 44,
624
+ "pattern": "^[A-Za-z0-9+/]{43}=$"
625
+ },
626
+ "RadiusAttributes": {
627
+ "type": "object",
628
+ "additionalProperties": false,
629
+ "required": ["sessionTimeoutSeconds"],
630
+ "properties": {
631
+ "vlanId": { "type": "integer", "minimum": 1, "maximum": 4094 },
632
+ "filterId": { "type": "string", "minLength": 1, "maxLength": 128 },
633
+ "sessionTimeoutSeconds": { "type": "integer", "minimum": 1, "maximum": 86400 }
634
+ }
635
+ },
636
+ "NetworkLease": {
637
+ "type": "object",
638
+ "additionalProperties": false,
639
+ "required": [
640
+ "id",
641
+ "sessionId",
642
+ "subjectId",
643
+ "deviceId",
644
+ "networkSpaceId",
645
+ "cidrs",
646
+ "policyVersion",
647
+ "issuedAt",
648
+ "expiresAt"
649
+ ],
650
+ "properties": {
651
+ "id": { "$ref": "#/$defs/Identifier" },
652
+ "sessionId": { "$ref": "#/$defs/Identifier" },
653
+ "subjectId": { "$ref": "#/$defs/Identifier" },
654
+ "deviceId": { "$ref": "#/$defs/Identifier" },
655
+ "networkSpaceId": { "$ref": "#/$defs/Identifier" },
656
+ "cidrs": {
657
+ "type": "array",
658
+ "minItems": 1,
659
+ "maxItems": 128,
660
+ "uniqueItems": true,
661
+ "items": { "$ref": "#/$defs/IPv4CIDR" }
662
+ },
663
+ "policyVersion": { "type": "integer", "minimum": 1 },
664
+ "issuedAt": { "type": "string", "format": "date-time" },
665
+ "expiresAt": { "type": "string", "format": "date-time" }
666
+ }
667
+ },
668
+ "ResourceLease": {
669
+ "type": "object",
670
+ "additionalProperties": false,
671
+ "required": [
672
+ "id",
673
+ "sessionId",
674
+ "subjectId",
675
+ "deviceId",
676
+ "resourceIds",
677
+ "policyVersion",
678
+ "issuedAt",
679
+ "expiresAt"
680
+ ],
681
+ "properties": {
682
+ "id": { "$ref": "#/$defs/Identifier" },
683
+ "sessionId": { "$ref": "#/$defs/Identifier" },
684
+ "subjectId": { "$ref": "#/$defs/Identifier" },
685
+ "deviceId": { "$ref": "#/$defs/Identifier" },
686
+ "resourceIds": {
687
+ "type": "array",
688
+ "minItems": 1,
689
+ "maxItems": 256,
690
+ "uniqueItems": true,
691
+ "items": { "$ref": "#/$defs/Identifier" }
692
+ },
693
+ "policyVersion": { "type": "integer", "minimum": 1 },
694
+ "issuedAt": { "type": "string", "format": "date-time" },
695
+ "expiresAt": { "type": "string", "format": "date-time" }
696
+ }
697
+ },
698
+ "EnrollmentRequest": {
699
+ "type": "object",
700
+ "additionalProperties": false,
701
+ "required": ["enrollmentId", "challengeId", "deviceId", "devicePublicKey", "platform", "clientVersion", "capabilities"],
702
+ "properties": {
703
+ "enrollmentId": { "$ref": "#/$defs/Identifier" },
704
+ "challengeId": { "$ref": "#/$defs/Identifier" },
705
+ "deviceId": { "$ref": "#/$defs/Identifier" },
706
+ "devicePublicKey": { "type": "string", "minLength": 32, "maxLength": 4096 },
707
+ "wireguardPublicKey": { "$ref": "#/$defs/WireGuardPublicKey" },
708
+ "platform": { "enum": ["windows", "linux", "macos"] },
709
+ "clientVersion": { "type": "string", "minLength": 1, "maxLength": 64 },
710
+ "capabilities": {
711
+ "type": "array",
712
+ "minItems": 1,
713
+ "maxItems": 32,
714
+ "uniqueItems": true,
715
+ "items": { "enum": ["wireguard", "mihomo", "route-coordinator", "dns-coordinator", "managed-vpn-v1", "vpn-probe-v1", "vpn-metrics-v1"] }
716
+ }
717
+ },
718
+ "allOf": [{
719
+ "if": {
720
+ "properties": {
721
+ "capabilities": { "contains": { "const": "wireguard" } }
722
+ },
723
+ "required": ["capabilities"]
724
+ },
725
+ "then": { "required": ["wireguardPublicKey"] }
726
+ }]
727
+ },
728
+ "EnrollmentResult": {
729
+ "type": "object",
730
+ "additionalProperties": false,
731
+ "required": ["accepted", "reasonCode"],
732
+ "properties": {
733
+ "accepted": { "type": "boolean" },
734
+ "reasonCode": { "type": "string", "minLength": 1, "maxLength": 128 },
735
+ "credentialReference": {
736
+ "type": "string",
737
+ "maxLength": 266,
738
+ "pattern": "^secretref:[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$",
739
+ "description": "Opaque reference to runtime-local protected storage, never raw credential material."
740
+ },
741
+ "credentialExpiresAt": { "type": "string", "format": "date-time" }
742
+ }
743
+ },
744
+ "RuntimeIntervals": {
745
+ "type": "object",
746
+ "additionalProperties": false,
747
+ "required": ["heartbeatIntervalSeconds", "configurationPollIntervalSeconds"],
748
+ "properties": {
749
+ "heartbeatIntervalSeconds": { "type": "integer", "minimum": 30, "maximum": 300 },
750
+ "configurationPollIntervalSeconds": { "type": "integer", "minimum": 30, "maximum": 300 }
751
+ }
752
+ },
753
+ "ConfigurationDesired": {
754
+ "type": "object",
755
+ "additionalProperties": false,
756
+ "required": [
757
+ "configurationVersion",
758
+ "policyVersion",
759
+ "validUntil",
760
+ "accessProfile",
761
+ "protectedResourceIds",
762
+ "networkLeases",
763
+ "resourceLeases"
764
+ ],
765
+ "properties": {
766
+ "vpnProbe": {
767
+ "$ref": "#/$defs/VPNProbeConfiguration"
768
+ },
769
+ "configurationVersion": { "type": "integer", "minimum": 1 },
770
+ "policyVersion": { "type": "integer", "minimum": 1 },
771
+ "validUntil": { "type": "string", "format": "date-time" },
772
+ "accessProfile": { "$ref": "#/$defs/AccessProfile" },
773
+ "protectedResourceIds": {
774
+ "type": "array",
775
+ "maxItems": 2048,
776
+ "uniqueItems": true,
777
+ "items": { "$ref": "#/$defs/Identifier" }
778
+ },
779
+ "networkLeases": {
780
+ "type": "array",
781
+ "maxItems": 256,
782
+ "items": { "$ref": "#/$defs/NetworkLease" }
783
+ },
784
+ "resourceLeases": {
785
+ "type": "array",
786
+ "maxItems": 512,
787
+ "items": { "$ref": "#/$defs/ResourceLease" }
788
+ },
789
+ "runtimeIntervals": { "$ref": "#/$defs/RuntimeIntervals" },
790
+ "wireguard": { "$ref": "#/$defs/WireGuardConfiguration" },
791
+ "mihomo": { "$ref": "#/$defs/MihomoConfiguration" }
792
+ }
793
+ },
794
+ "MihomoBypassHost": {
795
+ "type": "string",
796
+ "minLength": 1,
797
+ "maxLength": 253,
798
+ "pattern": "^(?:[A-Za-z0-9](?:[A-Za-z0-9.-]{0,251}[A-Za-z0-9])?|[A-Za-z0-9])$"
799
+ },
800
+ "MihomoConfiguration": {
801
+ "type": "object",
802
+ "additionalProperties": false,
803
+ "required": [
804
+ "mode",
805
+ "profileId",
806
+ "profileRevision",
807
+ "mixedPort",
808
+ "controllerPort",
809
+ "dnsMode",
810
+ "selectorGroup",
811
+ "bypassCidrs",
812
+ "bypassHosts",
813
+ "failClosed"
814
+ ],
815
+ "properties": {
816
+ "mode": { "enum": ["managed_follow", "app_subscription"] },
817
+ "sourceType": { "enum": ["managed_subscription", "manual_node"] },
818
+ "profileId": { "$ref": "#/$defs/Identifier" },
819
+ "profileRevision": { "type": "integer", "minimum": 1 },
820
+ "mixedPort": { "type": "integer", "minimum": 1, "maximum": 65535 },
821
+ "controllerPort": { "type": "integer", "minimum": 1, "maximum": 65535 },
822
+ "dnsMode": { "enum": ["disabled", "fake_ip"] },
823
+ "fakeIpRange": { "$ref": "#/$defs/SplitRoute" },
824
+ "selectorGroup": { "type": "string", "minLength": 1, "maxLength": 128 },
825
+ "selectedProxy": { "type": "string", "minLength": 1, "maxLength": 128 },
826
+ "bypassCidrs": {
827
+ "type": "array",
828
+ "maxItems": 256,
829
+ "uniqueItems": true,
830
+ "items": { "$ref": "#/$defs/SplitRoute" }
831
+ },
832
+ "bypassHosts": {
833
+ "type": "array",
834
+ "maxItems": 128,
835
+ "uniqueItems": true,
836
+ "items": { "$ref": "#/$defs/MihomoBypassHost" }
837
+ },
838
+ "failClosed": { "type": "boolean" }
839
+ },
840
+ "allOf": [
841
+ {
842
+ "if": { "properties": { "mode": { "const": "managed_follow" } }, "required": ["mode"] },
843
+ "then": { "properties": { "failClosed": { "const": true } } },
844
+ "else": { "not": { "anyOf": [{ "required": ["sourceType"] }, { "required": ["selectedProxy"] }] } }
845
+ },
846
+ {
847
+ "if": {
848
+ "allOf": [
849
+ { "properties": { "mode": { "const": "managed_follow" } }, "required": ["mode"] },
850
+ { "not": { "properties": { "sourceType": { "const": "manual_node" } }, "required": ["sourceType"] } }
851
+ ]
852
+ },
853
+ "then": { "required": ["selectedProxy"] }
854
+ },
855
+ {
856
+ "if": { "properties": { "sourceType": { "const": "manual_node" } }, "required": ["sourceType"] },
857
+ "then": { "not": { "required": ["selectedProxy"] } }
858
+ },
859
+ {
860
+ "if": { "properties": { "dnsMode": { "const": "fake_ip" } }, "required": ["dnsMode"] },
861
+ "then": { "required": ["fakeIpRange"] },
862
+ "else": { "not": { "required": ["fakeIpRange"] } }
863
+ }
864
+ ]
865
+ },
866
+ "WireGuardPeer": {
867
+ "type": "object",
868
+ "additionalProperties": false,
869
+ "required": ["runtimeId", "publicKey", "allowedIPs", "persistentKeepaliveSeconds"],
870
+ "properties": {
871
+ "sessionId": {
872
+ "$ref": "#/$defs/Identifier"
873
+ },
874
+ "vpnProfileId": {
875
+ "$ref": "#/$defs/Identifier"
876
+ },
877
+ "runtimeId": { "$ref": "#/$defs/Identifier" },
878
+ "deviceId": { "$ref": "#/$defs/Identifier" },
879
+ "publicKey": { "$ref": "#/$defs/WireGuardPublicKey" },
880
+ "endpointHost": {
881
+ "type": "string",
882
+ "minLength": 1,
883
+ "maxLength": 253,
884
+ "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9.-]{0,251}[A-Za-z0-9])?$"
885
+ },
886
+ "endpointPort": { "type": "integer", "minimum": 1, "maximum": 65535 },
887
+ "allowedIPs": {
888
+ "type": "array",
889
+ "minItems": 1,
890
+ "maxItems": 128,
891
+ "uniqueItems": true,
892
+ "items": { "$ref": "#/$defs/SplitRoute" }
893
+ },
894
+ "persistentKeepaliveSeconds": { "type": "integer", "minimum": 0, "maximum": 300 }
895
+ },
896
+ "dependentRequired": {
897
+ "endpointHost": ["endpointPort"],
898
+ "endpointPort": ["endpointHost"]
899
+ }
900
+ },
901
+ "WireGuardFirewallRule": {
902
+ "type": "object",
903
+ "additionalProperties": false,
904
+ "required": ["id", "effect", "sourceCidr", "destinationCidr", "protocol"],
905
+ "properties": {
906
+ "id": { "$ref": "#/$defs/Identifier" },
907
+ "effect": { "enum": ["allow", "deny"] },
908
+ "leaseId": { "$ref": "#/$defs/Identifier" },
909
+ "siteLinkRuntimeId": { "$ref": "#/$defs/Identifier" },
910
+ "direction": { "enum": ["from_wireguard", "to_wireguard"] },
911
+ "sourceCidr": { "$ref": "#/$defs/SplitRoute" },
912
+ "destinationCidr": { "$ref": "#/$defs/SplitRoute" },
913
+ "protocol": { "enum": ["any", "tcp", "udp", "icmp"] },
914
+ "ports": {
915
+ "type": "array",
916
+ "minItems": 1,
917
+ "maxItems": 64,
918
+ "uniqueItems": true,
919
+ "items": { "type": "integer", "minimum": 1, "maximum": 65535 }
920
+ },
921
+ "expiresAt": { "type": "string", "format": "date-time" }
922
+ },
923
+ "allOf": [
924
+ {
925
+ "if": { "properties": { "effect": { "const": "allow" } }, "required": ["effect"] },
926
+ "then": {
927
+ "required": ["expiresAt"],
928
+ "oneOf": [
929
+ { "required": ["leaseId"], "not": { "required": ["siteLinkRuntimeId"] } },
930
+ { "required": ["siteLinkRuntimeId", "direction"], "not": { "required": ["leaseId"] } }
931
+ ]
932
+ }
933
+ },
934
+ {
935
+ "if": { "properties": { "protocol": { "enum": ["any", "icmp"] } }, "required": ["protocol"] },
936
+ "then": { "not": { "required": ["ports"] } }
937
+ },
938
+ { "not": { "required": ["leaseId", "siteLinkRuntimeId"] } }
939
+ ],
940
+ "dependentRequired": {
941
+ "siteLinkRuntimeId": ["direction", "expiresAt"],
942
+ "direction": ["siteLinkRuntimeId"]
943
+ }
944
+ },
945
+ "WireGuardConfiguration": {
946
+ "type": "object",
947
+ "additionalProperties": false,
948
+ "required": ["role", "interfaceName", "publicKey", "addresses", "mtu", "routingMode", "firewallDefault", "peers", "routes", "firewallRules"],
949
+ "properties": {
950
+ "role": { "enum": ["endpoint", "gateway"] },
951
+ "interfaceName": { "type": "string", "minLength": 1, "maxLength": 15, "pattern": "^[A-Za-z][A-Za-z0-9_.-]*$" },
952
+ "publicKey": { "$ref": "#/$defs/WireGuardPublicKey" },
953
+ "addresses": {
954
+ "type": "array",
955
+ "minItems": 1,
956
+ "maxItems": 8,
957
+ "uniqueItems": true,
958
+ "items": { "$ref": "#/$defs/SplitRoute" }
959
+ },
960
+ "listenPort": { "type": "integer", "minimum": 1, "maximum": 65535 },
961
+ "mtu": { "type": "integer", "minimum": 1280, "maximum": 1500 },
962
+ "routingMode": { "enum": ["routed", "snat"] },
963
+ "firewallDefault": { "const": "deny" },
964
+ "peers": {
965
+ "type": "array",
966
+ "maxItems": 1024,
967
+ "items": { "$ref": "#/$defs/WireGuardPeer" }
968
+ },
969
+ "routes": {
970
+ "type": "array",
971
+ "maxItems": 256,
972
+ "uniqueItems": true,
973
+ "items": { "$ref": "#/$defs/SplitRoute" }
974
+ },
975
+ "dnsServers": {
976
+ "type": "array",
977
+ "maxItems": 8,
978
+ "uniqueItems": true,
979
+ "items": { "$ref": "#/$defs/IPv4Address" }
980
+ },
981
+ "firewallRules": {
982
+ "type": "array",
983
+ "maxItems": 4096,
984
+ "items": { "$ref": "#/$defs/WireGuardFirewallRule" }
985
+ }
986
+ },
987
+ "allOf": [{
988
+ "if": { "properties": { "role": { "const": "gateway" } }, "required": ["role"] },
989
+ "then": { "required": ["listenPort"] }
990
+ }]
991
+ },
992
+ "ConfigurationApplied": {
993
+ "type": "object",
994
+ "additionalProperties": false,
995
+ "required": ["configurationVersion", "policyVersion", "status", "readbackHash"],
996
+ "properties": {
997
+ "configurationVersion": { "type": "integer", "minimum": 1 },
998
+ "policyVersion": { "type": "integer", "minimum": 1 },
999
+ "status": { "enum": ["applied", "rejected", "rolled-back"] },
1000
+ "readbackHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
1001
+ "reasonCode": { "type": "string", "minLength": 1, "maxLength": 128 }
1002
+ }
1003
+ },
1004
+ "LeaseRenewRequest": {
1005
+ "type": "object",
1006
+ "additionalProperties": false,
1007
+ "required": ["sessionId", "leaseIds", "observedConfigurationVersion"],
1008
+ "properties": {
1009
+ "sessionId": { "$ref": "#/$defs/Identifier" },
1010
+ "leaseIds": {
1011
+ "type": "array",
1012
+ "minItems": 1,
1013
+ "maxItems": 512,
1014
+ "uniqueItems": true,
1015
+ "items": { "$ref": "#/$defs/Identifier" }
1016
+ },
1017
+ "observedConfigurationVersion": { "type": "integer", "minimum": 1 },
1018
+ "postureVersion": { "type": "integer", "minimum": 0 }
1019
+ }
1020
+ },
1021
+ "LeaseRenewResult": {
1022
+ "type": "object",
1023
+ "additionalProperties": false,
1024
+ "required": ["policyVersion", "validUntil", "networkLeases", "resourceLeases", "revokedLeaseIds"],
1025
+ "properties": {
1026
+ "policyVersion": { "type": "integer", "minimum": 1 },
1027
+ "validUntil": { "type": "string", "format": "date-time" },
1028
+ "networkLeases": { "type": "array", "maxItems": 256, "items": { "$ref": "#/$defs/NetworkLease" } },
1029
+ "resourceLeases": { "type": "array", "maxItems": 512, "items": { "$ref": "#/$defs/ResourceLease" } },
1030
+ "revokedLeaseIds": {
1031
+ "type": "array",
1032
+ "maxItems": 512,
1033
+ "uniqueItems": true,
1034
+ "items": { "$ref": "#/$defs/Identifier" }
1035
+ }
1036
+ }
1037
+ },
1038
+ "LeaseRevoke": {
1039
+ "type": "object",
1040
+ "additionalProperties": false,
1041
+ "required": ["sessionId", "leaseIds", "reasonCode", "effectiveAt"],
1042
+ "properties": {
1043
+ "sessionId": { "$ref": "#/$defs/Identifier" },
1044
+ "leaseIds": {
1045
+ "type": "array",
1046
+ "minItems": 1,
1047
+ "maxItems": 512,
1048
+ "uniqueItems": true,
1049
+ "items": { "$ref": "#/$defs/Identifier" }
1050
+ },
1051
+ "reasonCode": { "type": "string", "minLength": 1, "maxLength": 128 },
1052
+ "effectiveAt": { "type": "string", "format": "date-time" }
1053
+ }
1054
+ },
1055
+ "VPNConnectRequest": {
1056
+ "type": "object",
1057
+ "additionalProperties": false,
1058
+ "required": ["requestId", "siteId", "networkSpaceId", "mode"],
1059
+ "properties": {
1060
+ "requestId": { "$ref": "#/$defs/Identifier" },
1061
+ "siteId": { "$ref": "#/$defs/Identifier" },
1062
+ "networkSpaceId": { "$ref": "#/$defs/Identifier" },
1063
+ "gatewayId": { "$ref": "#/$defs/Identifier" },
1064
+ "mode": { "enum": ["internal_ztna", "external_vpn", "external_vpn_ztna", "external_direct_ztna"] },
1065
+ "resourceIds": {
1066
+ "type": "array",
1067
+ "maxItems": 256,
1068
+ "uniqueItems": true,
1069
+ "items": { "$ref": "#/$defs/Identifier" }
1070
+ },
1071
+ "accessGrantId": { "$ref": "#/$defs/Identifier" },
1072
+ "accessGrantToken": {
1073
+ "type": "string",
1074
+ "minLength": 32,
1075
+ "maxLength": 512
1076
+ }
1077
+ },
1078
+ "allOf": [{
1079
+ "if": { "properties": { "mode": { "const": "external_vpn" } }, "required": ["mode"] },
1080
+ "then": {
1081
+ "properties": { "resourceIds": { "maxItems": 0 } },
1082
+ "not": { "anyOf": [{ "required": ["accessGrantId"] }, { "required": ["accessGrantToken"] }] }
1083
+ },
1084
+ "else": {
1085
+ "required": ["resourceIds", "accessGrantId", "accessGrantToken"],
1086
+ "properties": { "resourceIds": { "minItems": 1 } }
1087
+ }
1088
+ }]
1089
+ },
1090
+ "VPNConnectResult": {
1091
+ "type": "object",
1092
+ "additionalProperties": false,
1093
+ "required": ["requestId", "decision", "reasonCode", "policyVersion", "validUntil", "networkLeases", "resourceLeases"],
1094
+ "properties": {
1095
+ "requestId": { "$ref": "#/$defs/Identifier" },
1096
+ "decision": { "enum": ["allow", "deny"] },
1097
+ "reasonCode": { "type": "string", "minLength": 1, "maxLength": 128 },
1098
+ "sessionId": { "$ref": "#/$defs/Identifier" },
1099
+ "gatewayId": { "$ref": "#/$defs/Identifier" },
1100
+ "configurationVersion": { "type": "integer", "minimum": 1 },
1101
+ "policyVersion": { "type": "integer", "minimum": 1 },
1102
+ "validUntil": { "type": "string", "format": "date-time" },
1103
+ "networkLeases": {
1104
+ "type": "array",
1105
+ "maxItems": 256,
1106
+ "items": { "$ref": "#/$defs/NetworkLease" }
1107
+ },
1108
+ "resourceLeases": {
1109
+ "type": "array",
1110
+ "maxItems": 512,
1111
+ "items": { "$ref": "#/$defs/ResourceLease" }
1112
+ }
1113
+ },
1114
+ "allOf": [{
1115
+ "if": { "properties": { "decision": { "const": "allow" } }, "required": ["decision"] },
1116
+ "then": {
1117
+ "required": ["sessionId", "gatewayId", "configurationVersion"],
1118
+ "anyOf": [
1119
+ { "properties": { "networkLeases": { "minItems": 1 } } },
1120
+ { "properties": { "resourceLeases": { "minItems": 1 } } }
1121
+ ]
1122
+ },
1123
+ "else": {
1124
+ "properties": {
1125
+ "networkLeases": { "maxItems": 0 },
1126
+ "resourceLeases": { "maxItems": 0 }
1127
+ }
1128
+ }
1129
+ }]
1130
+ },
1131
+ "NASAuthorizationRequest": {
1132
+ "type": "object",
1133
+ "additionalProperties": false,
1134
+ "required": ["requestId", "nasId", "subjectId", "authenticationMethod"],
1135
+ "properties": {
1136
+ "requestId": { "$ref": "#/$defs/Identifier" },
1137
+ "nasId": { "$ref": "#/$defs/Identifier" },
1138
+ "subjectId": { "$ref": "#/$defs/Identifier" },
1139
+ "deviceId": { "$ref": "#/$defs/Identifier" },
1140
+ "stationId": { "$ref": "#/$defs/Identifier" },
1141
+ "authenticationMethod": { "enum": ["eap-tls", "password-compatible"] },
1142
+ "clientCertificateSerial": { "type": "string", "pattern": "^[A-Fa-f0-9]{1,40}$" },
1143
+ "clientCertificateAuthorityKeyId": { "type": "string", "minLength": 16, "maxLength": 191, "pattern": "^[A-Fa-f0-9:]+$" }
1144
+ },
1145
+ "allOf": [{
1146
+ "if": { "properties": { "authenticationMethod": { "const": "eap-tls" } }, "required": ["authenticationMethod"] },
1147
+ "then": {
1148
+ "required": ["stationId", "clientCertificateSerial", "clientCertificateAuthorityKeyId"],
1149
+ "not": { "required": ["deviceId"] }
1150
+ },
1151
+ "else": {
1152
+ "required": ["deviceId"],
1153
+ "not": {
1154
+ "anyOf": [
1155
+ { "required": ["clientCertificateSerial"] },
1156
+ { "required": ["clientCertificateAuthorityKeyId"] }
1157
+ ]
1158
+ }
1159
+ }
1160
+ }]
1161
+ },
1162
+ "NASAuthorizationResult": {
1163
+ "type": "object",
1164
+ "additionalProperties": false,
1165
+ "required": ["requestId", "sessionId", "decision", "accessProfile", "policyVersion", "validUntil", "reasonCode"],
1166
+ "properties": {
1167
+ "requestId": { "$ref": "#/$defs/Identifier" },
1168
+ "sessionId": { "$ref": "#/$defs/Identifier" },
1169
+ "decision": { "enum": ["allow", "deny"] },
1170
+ "accessProfile": { "$ref": "#/$defs/AccessProfile" },
1171
+ "policyVersion": { "type": "integer", "minimum": 1 },
1172
+ "validUntil": { "type": "string", "format": "date-time" },
1173
+ "reasonCode": { "type": "string", "minLength": 1, "maxLength": 128 },
1174
+ "radiusAttributes": { "$ref": "#/$defs/RadiusAttributes" }
1175
+ }
1176
+ },
1177
+ "NASSessionCommand": {
1178
+ "type": "object",
1179
+ "additionalProperties": false,
1180
+ "required": ["commandId", "sessionId", "nasId", "subjectId", "deviceId", "action", "targetAccessProfile", "policyVersion", "effectiveAt", "reasonCode"],
1181
+ "properties": {
1182
+ "commandId": { "$ref": "#/$defs/Identifier" },
1183
+ "sessionId": { "$ref": "#/$defs/Identifier" },
1184
+ "nasId": { "$ref": "#/$defs/Identifier" },
1185
+ "subjectId": { "$ref": "#/$defs/Identifier" },
1186
+ "deviceId": { "$ref": "#/$defs/Identifier" },
1187
+ "action": { "enum": ["coa", "disconnect"] },
1188
+ "targetAccessProfile": { "$ref": "#/$defs/AccessProfile" },
1189
+ "policyVersion": { "type": "integer", "minimum": 1 },
1190
+ "effectiveAt": { "type": "string", "format": "date-time" },
1191
+ "reasonCode": { "type": "string", "minLength": 1, "maxLength": 128 },
1192
+ "radiusAttributes": { "$ref": "#/$defs/RadiusAttributes" }
1193
+ }
1194
+ },
1195
+ "NASSessionCommandResult": {
1196
+ "type": "object",
1197
+ "additionalProperties": false,
1198
+ "required": ["commandId", "sessionId", "status", "reasonCode", "completedAt"],
1199
+ "properties": {
1200
+ "commandId": { "$ref": "#/$defs/Identifier" },
1201
+ "sessionId": { "$ref": "#/$defs/Identifier" },
1202
+ "status": { "enum": ["applied", "rejected", "unsupported", "timed-out"] },
1203
+ "reasonCode": { "type": "string", "minLength": 1, "maxLength": 128 },
1204
+ "completedAt": { "type": "string", "format": "date-time" }
1205
+ }
1206
+ }
1207
+ }
1208
+ }