@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.
- package/COMPATIBILITY.md +91 -0
- package/README.md +49 -3
- package/auth/catalog_generated.go +2 -2
- package/auth/catalog_test.go +32 -0
- package/auth/outpost_headers.go +17 -0
- package/auth/outpost_headers_test.go +16 -0
- package/auth/permission-catalog.json +1097 -187
- package/compat/consumer-revisions.json +3 -0
- package/compat/json-schema-ecosystem-0.1.0.json +1 -1
- package/compat/openapi-loose-boundaries-0.1.0.json +78 -46
- package/delivery/canonical.go +136 -0
- package/delivery/document.go +203 -0
- package/delivery/document.schema.json +1527 -0
- package/delivery/document_test.go +191 -0
- package/delivery/parser.go +155 -0
- package/evaluation/evaluation-run.schema.json +64 -10
- package/fixtures/json-schema/gateway-manifest/invalid/bad-execution-mode.json +73 -0
- package/fixtures/json-schema/gateway-manifest/invalid/unversioned-check.json +85 -0
- package/fixtures/json-schema/gateway-manifest/valid/checks.json +86 -0
- package/fixtures/json-schema/gateway-manifest/valid/versioned-task.json +73 -0
- package/fixtures/json-schema/network-ingest-event/invalid/duplicate-event.json +33 -0
- package/fixtures/json-schema/network-ingest-event/invalid/message-payload-mismatch.json +23 -0
- package/fixtures/json-schema/network-ingest-event/invalid/password.json +22 -0
- package/fixtures/json-schema/network-ingest-event/invalid/proxy-flow-destination.json +28 -0
- package/fixtures/json-schema/network-ingest-event/invalid/vpn-probe-negative-rtt.json +34 -0
- package/fixtures/json-schema/network-ingest-event/invalid/vpn-stats-secret.json +27 -0
- package/fixtures/json-schema/network-ingest-event/valid/endpoint-proxy-flow.json +27 -0
- package/fixtures/json-schema/network-ingest-event/valid/freeradius-accounting.json +25 -0
- package/fixtures/json-schema/network-ingest-event/valid/gateway.json +53 -0
- package/fixtures/json-schema/network-ingest-event/valid/vpn-probe-batch.json +45 -0
- package/fixtures/json-schema/network-ingest-event/valid/vpn-tunnel-stats.json +26 -0
- package/fixtures/json-schema/network-radius-accounting/invalid/password.json +9 -0
- package/fixtures/json-schema/network-radius-accounting/valid/accounting.json +16 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/invalid-cidr.json +31 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/message-payload-mismatch.json +19 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/mihomo-raw-subscription.json +33 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/nas-authorization-password.json +18 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/nas-eap-without-certificate.json +17 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/private-key.json +20 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/raw-credential-reference.json +16 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/runtime-interval-too-short.json +23 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/vpn-managed-bad-token.json +15 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/vpn-managed-mode-override.json +16 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/wireguard-capability-without-key.json +19 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/wireguard-default-route.json +31 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/ztna-without-access-grant.json +17 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/configuration-desired.json +86 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/direct-ztna-connect.json +19 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/direct-ztna-result.json +33 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/internal-ztna-connect.json +19 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/managed-vpn-macos-enrollment.json +27 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/mihomo-app-subscription-configuration.json +32 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/mihomo-manual-node-configuration.json +32 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/mihomo-wireguard-configuration.json +70 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/nas-authorization-request.json +19 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/nas-authorization-result.json +24 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/nas-session-command-result.json +17 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/nas-session-command.json +27 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/vpn-connect-request.json +17 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/vpn-connect-result.json +34 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/vpn-managed-connect.json +15 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/wireguard-enrollment.json +20 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/wireguard-site-link.json +48 -0
- package/fixtures/openapi/AgentChatInput/invalid/empty-question.json +4 -0
- package/fixtures/openapi/AgentChatInput/invalid/system-role.json +9 -0
- package/fixtures/openapi/AgentChatInput/valid/authorized-background.json +5 -0
- package/fixtures/openapi/AgentChatInput/valid/conversation.json +15 -0
- package/fixtures/openapi/AgentRunnerToolCallRequest/invalid/model-identity.json +1 -0
- package/fixtures/openapi/AgentRunnerToolCallRequest/valid/search.json +1 -0
- package/fixtures/openapi/AnnouncementReceiptPageEnvelope/invalid/missing-read-count.json +9 -0
- package/fixtures/openapi/AnnouncementReceiptPageEnvelope/valid/read-and-unread.json +28 -0
- package/fixtures/openapi/ApplicationInput/invalid/negative-version.json +6 -0
- package/fixtures/openapi/ApplicationInput/invalid/zero-version.json +6 -0
- package/fixtures/openapi/ApplicationInput/valid/versioned.json +6 -0
- package/fixtures/openapi/ApprovalRequest/invalid/resolved-scopes.json +20 -0
- package/fixtures/openapi/ApprovalRequest/valid/resolved-scopes.json +21 -0
- package/fixtures/openapi/BuildTemplateInput/invalid/negative-revision.json +6 -0
- package/fixtures/openapi/BuildTemplateInput/valid/draft.json +11 -0
- package/fixtures/openapi/BuildTriggerRequest/invalid/no-ref.json +1 -0
- package/fixtures/openapi/BuildTriggerRequest/valid/no-environment.json +1 -0
- package/fixtures/openapi/BuildpacksConfiguration/invalid/mutable-builder.json +5 -0
- package/fixtures/openapi/BuildpacksConfiguration/invalid/privilege-override.json +6 -0
- package/fixtures/openapi/BuildpacksConfiguration/invalid/unsupported-platform.json +5 -0
- package/fixtures/openapi/BuildpacksConfiguration/valid/pinned.json +5 -0
- package/fixtures/openapi/CapabilityAssessment/invalid/contract.json +16 -0
- package/fixtures/openapi/CapabilityAssessment/valid/contract.json +16 -0
- package/fixtures/openapi/CapabilityPlan/invalid/contract.json +16 -0
- package/fixtures/openapi/CapabilityPlan/valid/contract.json +19 -0
- package/fixtures/openapi/CapabilityPlanValidation/invalid/contract.json +5 -0
- package/fixtures/openapi/CapabilityPlanValidation/valid/contract.json +11 -0
- package/fixtures/openapi/CapabilityTask/invalid/contract.json +33 -0
- package/fixtures/openapi/CapabilityTask/valid/contract.json +34 -0
- package/fixtures/openapi/CapabilityTaskInput/invalid/contract.json +22 -0
- package/fixtures/openapi/CapabilityTaskInput/valid/contract.json +22 -0
- package/fixtures/openapi/CapabilityValueSemantic/invalid/contract.json +4 -0
- package/fixtures/openapi/CapabilityValueSemantic/valid/contract.json +7 -0
- package/fixtures/openapi/DeliveryAccessResult/invalid/release-verification.json +8 -0
- package/fixtures/openapi/DeliveryAccessResult/valid/release-verification.json +8 -0
- package/fixtures/openapi/DeliveryBatchAssessment/invalid/release-verification.json +11 -0
- package/fixtures/openapi/DeliveryBatchAssessment/valid/release-verification.json +11 -0
- package/fixtures/openapi/DeliveryBatchAssessmentInput/invalid/release-verification.json +9 -0
- package/fixtures/openapi/DeliveryBatchAssessmentInput/valid/release-verification.json +8 -0
- package/fixtures/openapi/DeliveryBatchInput/invalid/ambiguous-source.json +19 -0
- package/fixtures/openapi/DeliveryBatchInput/invalid/missing-idempotency.json +16 -0
- package/fixtures/openapi/DeliveryBatchInput/valid/quick-deploy.json +17 -0
- package/fixtures/openapi/DeliveryBatchInput/valid/saved-workflow.json +5 -0
- package/fixtures/openapi/DeliveryBlueprintInput/invalid/unversioned-preset.json +31 -0
- package/fixtures/openapi/DeliveryBlueprintInput/valid/service-preset.json +32 -0
- package/fixtures/openapi/DeliveryDocument/invalid/unknown-field.json +24 -0
- package/fixtures/openapi/DeliveryDocument/invalid/unknown-kind.json +23 -0
- package/fixtures/openapi/DeliveryDocument/invalid/unknown-version.json +23 -0
- package/fixtures/openapi/DeliveryDocument/valid/build-template.json +26 -0
- package/fixtures/openapi/DeliveryDocument/valid/deployment-template.json +26 -0
- package/fixtures/openapi/DeliveryDocument/valid/legacy-dag.json +39 -0
- package/fixtures/openapi/DeliveryDocument/valid/workflow-template.json +23 -0
- package/fixtures/openapi/DeliveryDocument/valid/workflow.json +20 -0
- package/fixtures/openapi/DeliveryDraftInput/invalid/short-idempotency-key.json +30 -0
- package/fixtures/openapi/DeliveryDraftInput/valid/idempotent-create.json +30 -0
- package/fixtures/openapi/DeliveryDraftService/invalid/zero-version.json +7 -0
- package/fixtures/openapi/DeliveryDraftService/valid/versioned-template.json +9 -0
- package/fixtures/openapi/DeliveryExecutionHistoryPage/invalid-kind.json +9 -0
- package/fixtures/openapi/DeliveryExecutionHistoryPage/valid-build.json +16 -0
- package/fixtures/openapi/DeliveryExecutionHistoryPage/valid-empty.json +3 -0
- package/fixtures/openapi/DeliveryPlanApprovalInput/invalid/confirm.json +1 -0
- package/fixtures/openapi/DeliveryPlanApprovalInput/valid/approve.json +1 -0
- package/fixtures/openapi/DeliveryPlanInput/invalid/draft-manifest-revision.json +1 -0
- package/fixtures/openapi/DeliveryPlanInput/valid/manifest-revision.json +1 -0
- package/fixtures/openapi/DeliveryTargetInput/invalid/deploy-without-environment.json +7 -0
- package/fixtures/openapi/DeliveryTargetInput/valid/build-without-environment.json +6 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/duplicate-kind.json +13 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/embedded-credentials.json +16 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/empty-kinds.json +10 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/negative-generation.json +15 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/unknown-kind.json +12 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/valid/manual-source.json +15 -0
- package/fixtures/openapi/DeliveryWorkflowDefinition/invalid/unversioned-template.json +15 -0
- package/fixtures/openapi/DeliveryWorkflowDefinition/valid/cross-app.json +24 -0
- package/fixtures/openapi/DeliveryWorkflowInput/invalid/short-key.json +1 -0
- package/fixtures/openapi/DeliveryWorkflowInput/valid/idempotent-create.json +1 -0
- package/fixtures/openapi/DeploymentTemplatePreviewInput/invalid/invalid-target-override.json +7 -0
- package/fixtures/openapi/DeploymentTemplatePreviewInput/invalid/invalid-zero-version.json +6 -0
- package/fixtures/openapi/DeploymentTemplatePreviewInput/valid/valid.json +6 -0
- package/fixtures/openapi/DockerDeliveryConfiguration/invalid/empty-mappings.json +5 -0
- package/fixtures/openapi/DockerDeliveryConfiguration/valid/compose.json +7 -0
- package/fixtures/openapi/DockerDeliverySnapshot/invalid/missing-required-field.json +19 -0
- package/fixtures/openapi/DockerDeliverySnapshot/valid/frozen-project.json +20 -0
- package/fixtures/openapi/DockerOperationCallbackRequest/invalid/cancellation-acknowledged-not-boolean.json +13 -0
- package/fixtures/openapi/DockerOperationCallbackRequest/valid/cancellation-acknowledged.json +13 -0
- package/fixtures/openapi/DockerProjectInput/invalid/empty-host.json +4 -0
- package/fixtures/openapi/DockerProjectInput/valid/inline-idempotent.json +7 -0
- package/fixtures/openapi/DockerQuickCreateHostInput/invalid/capacity-type.json +1 -0
- package/fixtures/openapi/DockerQuickCreateHostInput/valid/capacity.json +1 -0
- package/fixtures/openapi/EndpointDevice/invalid/missing-owner.json +8 -0
- package/fixtures/openapi/EndpointDevice/valid/active.json +35 -0
- package/fixtures/openapi/EndpointDeviceRegistrationInput/invalid/client-owned-status.json +5 -0
- package/fixtures/openapi/EndpointDeviceRegistrationInput/invalid/oversized-network-inventory.json +18 -0
- package/fixtures/openapi/EndpointDeviceRegistrationInput/valid/macos.json +28 -0
- package/fixtures/openapi/HelmDeliveryConfiguration/invalid/plain-credential.json +21 -0
- package/fixtures/openapi/HelmDeliveryConfiguration/invalid/release-name.json +20 -0
- package/fixtures/openapi/HelmDeliveryConfiguration/valid/private-oci.json +20 -0
- package/fixtures/openapi/HelmDeliverySnapshot/invalid/secret-plan.json +31 -0
- package/fixtures/openapi/HelmDeliverySnapshot/invalid/unknown-operation.json +28 -0
- package/fixtures/openapi/HelmDeliverySnapshot/valid/first-install.json +28 -0
- package/fixtures/openapi/IdentityApplication/invalid/outpost-status.json +1 -0
- package/fixtures/openapi/IdentityApplicationOnboardingInput/invalid/missing-access.json +12 -0
- package/fixtures/openapi/IdentityApplicationOnboardingInput/valid/link.json +13 -0
- package/fixtures/openapi/IdentityOutpost/invalid/missing-runtime-status.json +9 -0
- package/fixtures/openapi/IdentityOutpost/valid/healthy.json +17 -0
- package/fixtures/openapi/IdentityOutpost/valid/unregistered.json +12 -0
- package/fixtures/openapi/IdentityOutpostDeployment/invalid/missing-protocol.json +3 -0
- package/fixtures/openapi/IdentityOutpostDeployment/valid/remote.json +6 -0
- package/fixtures/openapi/IdentityOutpostInput/invalid/forged-observation.json +7 -0
- package/fixtures/openapi/IdentityOutpostInput/valid/forward-auth.json +6 -0
- package/fixtures/openapi/IdentityOutpostInput/valid/legacy.json +8 -0
- package/fixtures/openapi/IdentityProviderSetup/invalid/fake-verification.json +1 -0
- package/fixtures/openapi/IdentityProviderSetup/valid/incomplete.json +1 -0
- package/fixtures/openapi/IdentityProviderSetup/valid/remote.json +1 -0
- package/fixtures/openapi/IdentityProviderUserMetadata/invalid/attributes.json +8 -0
- package/fixtures/openapi/IdentityProviderUserMetadata/valid/attributes.json +13 -0
- package/fixtures/openapi/KubernetesCustomResource/invalid/negative-generation.json +1 -0
- package/fixtures/openapi/KubernetesCustomResource/valid/deleting-operator.json +1 -0
- package/fixtures/openapi/KubernetesResourceCreationReceipt/invalid/manifest-content.json +20 -0
- package/fixtures/openapi/KubernetesResourceCreationReceipt/valid/confirmed.json +20 -0
- package/fixtures/openapi/KubernetesResourceCreationReceipt/valid/unknown.json +19 -0
- package/fixtures/openapi/LLMUpstreamTestResultEnvelope/invalid/models-not-array.json +9 -0
- package/fixtures/openapi/LLMUpstreamTestResultEnvelope/valid/discovered-models.json +11 -0
- package/fixtures/openapi/ManifestDeploymentEnvelope/invalid/negative-resource-observation.json +57 -0
- package/fixtures/openapi/ManifestDeploymentEnvelope/valid/operator-deleting.json +57 -0
- package/fixtures/openapi/ManifestExecutionTaskPayload/invalid/gitops-empty.json +7 -0
- package/fixtures/openapi/ManifestExecutionTaskPayload/valid/gitops-frozen-children.json +18 -0
- package/fixtures/openapi/ManifestKustomizeOptions/invalid/escaping-entry.json +1 -0
- package/fixtures/openapi/ManifestKustomizeOptions/invalid/mutable-image.json +1 -0
- package/fixtures/openapi/ManifestKustomizeOptions/valid/overlay-images.json +7 -0
- package/fixtures/openapi/ManifestRevisionInput/invalid/missing-version.json +1 -0
- package/fixtures/openapi/ManifestRevisionInput/valid/current-draft.json +1 -0
- package/fixtures/openapi/ManifestServiceTemplateInputs/invalid/mutable-image.json +8 -0
- package/fixtures/openapi/ManifestServiceTemplateInputs/valid/frozen-service-image.json +9 -0
- package/fixtures/openapi/NetworkAccessGrant/invalid/token-digest.json +15 -0
- package/fixtures/openapi/NetworkAccessGrant/valid/issued.json +14 -0
- package/fixtures/openapi/NetworkAccessGrantInput/invalid/no-resources.json +7 -0
- package/fixtures/openapi/NetworkAccessGrantInput/valid/direct-ztna.json +8 -0
- package/fixtures/openapi/NetworkAccessGrantSecret/invalid/short-token.json +17 -0
- package/fixtures/openapi/NetworkAccessGrantSecret/valid/issued.json +17 -0
- package/fixtures/openapi/NetworkAccessPolicy/invalid/missing-version.json +20 -0
- package/fixtures/openapi/NetworkAccessPolicy/valid/published-draft.json +21 -0
- package/fixtures/openapi/NetworkAccessPolicyInput/invalid/duplicate-team.json +17 -0
- package/fixtures/openapi/NetworkAccessPolicyInput/valid/team-and-tag-allow.json +17 -0
- package/fixtures/openapi/NetworkConflictAnalysisRequest/invalid/ipv6-range.json +9 -0
- package/fixtures/openapi/NetworkConflictAnalysisRequest/valid/runtime-ranges.json +15 -0
- package/fixtures/openapi/NetworkConnectionOption/invalid/secret.json +10 -0
- package/fixtures/openapi/NetworkConnectionOption/valid/wifi.json +9 -0
- package/fixtures/openapi/NetworkConnectionOption/valid/wired.json +8 -0
- package/fixtures/openapi/NetworkGateway/invalid/missing-site.json +7 -0
- package/fixtures/openapi/NetworkGateway/valid/online.json +23 -0
- package/fixtures/openapi/NetworkGatewayInput/invalid/default-route-overlay.json +13 -0
- package/fixtures/openapi/NetworkGatewayInput/valid/routed.json +14 -0
- package/fixtures/openapi/NetworkLease/invalid/empty-cidrs.json +12 -0
- package/fixtures/openapi/NetworkLease/valid/active.json +12 -0
- package/fixtures/openapi/NetworkMihomoProfile/invalid/subscription-leak.json +20 -0
- package/fixtures/openapi/NetworkMihomoProfile/valid/managed.json +21 -0
- package/fixtures/openapi/NetworkMihomoProfileInput/invalid/app-subscription-secret.json +14 -0
- package/fixtures/openapi/NetworkMihomoProfileInput/invalid/manual-node-with-subscription.json +20 -0
- package/fixtures/openapi/NetworkMihomoProfileInput/valid/app-subscription.json +14 -0
- package/fixtures/openapi/NetworkMihomoProfileInput/valid/managed.json +16 -0
- package/fixtures/openapi/NetworkMihomoProfileInput/valid/manual-node.json +21 -0
- package/fixtures/openapi/NetworkNASBinding/invalid/secret.json +13 -0
- package/fixtures/openapi/NetworkNASBinding/valid/default.json +16 -0
- package/fixtures/openapi/NetworkNASBindingInput/invalid/secret.json +10 -0
- package/fixtures/openapi/NetworkNASBindingInput/valid/default.json +13 -0
- package/fixtures/openapi/NetworkPolicyPreviewRequest/invalid/unknown-mode.json +6 -0
- package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-direct-ztna.json +6 -0
- package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-vpn-ztna.json +6 -0
- package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-vpn.json +6 -0
- package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/internal-direct.json +7 -0
- package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/internal-ztna.json +7 -0
- package/fixtures/openapi/NetworkPolicyPreviewResult/invalid/bypass-path.json +9 -0
- package/fixtures/openapi/NetworkPolicyPreviewResult/valid/onboarding.json +10 -0
- package/fixtures/openapi/NetworkPolicyPreviewResult/valid/protected-broad-path-denied.json +9 -0
- package/fixtures/openapi/NetworkPolicyPreviewResult/valid/protected-resource.json +9 -0
- package/fixtures/openapi/NetworkPolicyPreviewResult/valid/quarantine.json +10 -0
- package/fixtures/openapi/NetworkPolicyPreviewResult/valid/restricted.json +10 -0
- package/fixtures/openapi/NetworkPolicySnapshot/invalid/zero-version.json +7 -0
- package/fixtures/openapi/NetworkPolicySnapshot/valid/published.json +7 -0
- package/fixtures/openapi/NetworkResourceInput/invalid/invalid-port.json +10 -0
- package/fixtures/openapi/NetworkResourceInput/valid/protected-cidr.json +10 -0
- package/fixtures/openapi/NetworkRuntimeEnrollmentInput/invalid/excessive-ttl.json +7 -0
- package/fixtures/openapi/NetworkRuntimeEnrollmentInput/valid/endpoint.json +7 -0
- package/fixtures/openapi/NetworkRuntimeEnrollmentSecret/invalid/short-token.json +15 -0
- package/fixtures/openapi/NetworkRuntimeEnrollmentSecret/valid/pending.json +15 -0
- package/fixtures/openapi/NetworkSession/invalid/unknown-status.json +14 -0
- package/fixtures/openapi/NetworkSession/valid/restricted-vpn-ztna.json +16 -0
- package/fixtures/openapi/NetworkSessionActionExecuteInput/invalid/short-hash.json +6 -0
- package/fixtures/openapi/NetworkSessionActionExecuteInput/valid/restrict.json +6 -0
- package/fixtures/openapi/NetworkSessionActionInput/invalid/unknown-action.json +5 -0
- package/fixtures/openapi/NetworkSessionActionInput/valid/restrict.json +5 -0
- package/fixtures/openapi/NetworkSessionActionPlan/invalid/missing-hash.json +12 -0
- package/fixtures/openapi/NetworkSessionActionPlan/valid/fallback-disconnect.json +13 -0
- package/fixtures/openapi/NetworkSessionCommand/invalid/unknown-status.json +14 -0
- package/fixtures/openapi/NetworkSessionCommand/valid/pending.json +14 -0
- package/fixtures/openapi/NetworkSiteInput/invalid/unknown-status.json +4 -0
- package/fixtures/openapi/NetworkSiteInput/valid/shanghai.json +5 -0
- package/fixtures/openapi/NetworkSiteProfileBinding/invalid/vlan.json +9 -0
- package/fixtures/openapi/NetworkSiteProfileBinding/valid/default.json +10 -0
- package/fixtures/openapi/NetworkSiteProfileBindingInput/invalid/timeout.json +7 -0
- package/fixtures/openapi/NetworkSiteProfileBindingInput/valid/default.json +7 -0
- package/fixtures/openapi/NetworkSpaceInput/invalid/empty-cidrs.json +6 -0
- package/fixtures/openapi/NetworkSpaceInput/invalid/malformed-cidr.json +6 -0
- package/fixtures/openapi/NetworkSpaceInput/valid/corp.json +6 -0
- package/fixtures/openapi/NetworkTelemetrySummary/invalid/raw-destination.json +29 -0
- package/fixtures/openapi/NetworkTelemetrySummary/valid/proxy-flow.json +36 -0
- package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/auto-with-gateway.json +6 -0
- package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/missing-manual-gateway.json +5 -0
- package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/mode-override.json +7 -0
- package/fixtures/openapi/NetworkVPNConnectionIntentInput/valid/auto-intent.json +5 -0
- package/fixtures/openapi/NetworkVPNConnectionIntentInput/valid/manual-intent.json +6 -0
- package/fixtures/openapi/NetworkVPNProfileInput/invalid/unknown-private-key.json +25 -0
- package/fixtures/openapi/NetworkVPNProfileInput/valid/assigned-profile.json +24 -0
- package/fixtures/openapi/NetworkVPNSelectionPolicyInput/invalid/unbounded-attempts.json +21 -0
- package/fixtures/openapi/NetworkVPNSelectionPolicyInput/valid/provider-policy.json +21 -0
- package/fixtures/openapi/ObservabilityMetricAssessmentInput/invalid/arbitrary-expression.json +10 -0
- package/fixtures/openapi/ObservabilityMetricAssessmentInput/valid/metric-window.json +10 -0
- package/fixtures/openapi/PluginManifest/valid/hermes-api.json +53 -0
- package/fixtures/openapi/ProgressiveRolloutControlInput/invalid/missing-identity.json +5 -0
- package/fixtures/openapi/ProgressiveRolloutControlInput/invalid/skip-analysis.json +5 -0
- package/fixtures/openapi/ProgressiveRolloutControlInput/valid/pause.json +5 -0
- package/fixtures/openapi/ReleaseTargetInput/invalid/missing-required-field.json +15 -0
- package/fixtures/openapi/ReleaseTargetInput/valid/docker-compose.json +16 -0
- package/fixtures/openapi/RepositoryAnalysis/invalid/moving-ref.json +11 -0
- package/fixtures/openapi/RepositoryAnalysis/valid/go.json +29 -0
- package/fixtures/openapi/RepositoryAnalysisInput/invalid/arbitrary-source-url.json +6 -0
- package/fixtures/openapi/RepositoryAnalysisInput/invalid/missing-ref.json +4 -0
- package/fixtures/openapi/RepositoryAnalysisInput/valid/nested-project.json +6 -0
- package/fixtures/openapi/ResourceLease/invalid/missing-session.json +10 -0
- package/fixtures/openapi/ResourceLease/valid/active.json +11 -0
- package/fixtures/openapi/ServiceDeploymentTemplateBinding/invalid/invalid-unpinned.json +4 -0
- package/fixtures/openapi/ServiceDeploymentTemplateBinding/valid/valid.json +7 -0
- package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-executable-schema.json +25 -0
- package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-missing-schema.json +21 -0
- package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-mixed-renderers.json +40 -0
- package/fixtures/openapi/ServiceDeploymentTemplateInput/valid/valid-nested-parameters.json +41 -0
- package/fixtures/openapi/ServiceDeploymentTemplateInput/valid/valid-yaml.json +34 -0
- package/fixtures/openapi/TemplatePublishInput/invalid/missing-revision.json +1 -0
- package/fixtures/openapi/TemplatePublishInput/invalid/unknown-field.json +4 -0
- package/fixtures/openapi/TemplatePublishInput/invalid/zero-revision.json +3 -0
- package/fixtures/openapi/TemplatePublishInput/valid/revision.json +3 -0
- package/fixtures/openapi/ToolCapability/invalid/bad-idempotency.json +35 -0
- package/fixtures/openapi/ToolCapability/invalid/unversioned-check.json +47 -0
- package/fixtures/openapi/ToolCapability/valid/checks.json +48 -0
- package/fixtures/openapi/ToolCapability/valid/versioned-task.json +35 -0
- package/fixtures/openapi/ToolInvocationRequest/invalid/empty-version.json +8 -0
- package/fixtures/openapi/ToolInvocationRequest/valid/versioned.json +8 -0
- package/fixtures/openapi/ToolInvocationResult/invalid/missing-status-call.json +13 -0
- package/fixtures/openapi/ToolInvocationResult/valid/task.json +20 -0
- package/fixtures/openapi/VirtualMachineCreateInput/invalid/capacity-type.json +1 -0
- package/fixtures/openapi/VirtualMachineCreateInput/valid/capacity.json +1 -0
- package/fixtures/openapi/VirtualizationCapacityInput/invalid/missing-disk.json +1 -0
- package/fixtures/openapi/VirtualizationCapacityInput/valid/running-vm.json +1 -0
- package/fixtures/openapi/VirtualizationCapacityResult/invalid/invented-status.json +1 -0
- package/fixtures/openapi/VirtualizationCapacityResult/valid/available.json +1 -0
- package/fixtures/openapi/VirtualizationWorkerCreateInput/invalid/secret-input.json +5 -0
- package/fixtures/openapi/VirtualizationWorkerCreateInput/valid/one-worker.json +4 -0
- package/fixtures/openapi/VirtualizationWorkerPoolInput/invalid/external-owner.json +27 -0
- package/fixtures/openapi/VirtualizationWorkerPoolInput/invalid/zero-budget.json +27 -0
- package/fixtures/openapi/VirtualizationWorkerPoolInput/valid/registered.json +27 -0
- package/fixtures/openapi/VirtualizationWorkerPoolListEnvelope/invalid/nested-data.json +5 -0
- package/fixtures/openapi/VirtualizationWorkerPoolListEnvelope/valid/empty.json +3 -0
- package/fixtures/openapi/WorkbenchContextSelection/invalid/missing-file-content.json +8 -0
- package/fixtures/openapi/WorkbenchContextSelection/invalid/unknown-reference-kind.json +8 -0
- package/fixtures/openapi/WorkbenchContextSelection/valid/text-and-resource.json +17 -0
- package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/trigger-without-plan.json +10 -0
- package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/unknown-trigger.json +28 -0
- package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/zero-interval.json +28 -0
- package/fixtures/openapi/WorkbenchInspectionTaskInput/valid/alert-capability.json +30 -0
- package/fixtures/openapi/WorkbenchInspectionTaskInput/valid/scheduled-capability.json +28 -0
- package/fixtures/openapi/WorkbenchInspectionTrigger/invalid/missing-rule.json +3 -0
- package/fixtures/openapi/WorkbenchInspectionTrigger/invalid/schedule-alert-selector.json +4 -0
- package/fixtures/openapi/WorkbenchInspectionTrigger/valid/schedule.json +3 -0
- package/fixtures/openapi/WorkbenchModelPreferences/invalid/unknown-effort.json +1 -0
- package/fixtures/openapi/WorkbenchModelPreferences/valid/selected.json +1 -0
- package/fixtures/openapi/WorkflowCatalogPage/invalid/unsupported-kind.json +6 -0
- package/fixtures/openapi/WorkflowCatalogPage/valid/build-without-environment.json +6 -0
- package/fixtures/openapi/WorkflowTemplateInput/invalid/zero-revision.json +6 -0
- package/fixtures/openapi/WorkflowTemplateInput/valid/draft.json +10 -0
- package/gen/go/sohaapi/client.go +1 -1
- package/gen/go/sohaapi/types.go +15610 -6415
- package/gen/go/sohaapi/types_test.go +100 -1
- package/gen/go/sohaapi/vpn_models_test.go +21 -0
- package/gen/ts/sohaapi/index.ts +27859 -17518
- package/go.mod +107 -5
- package/go.sum +379 -16
- package/helmrelease/delivery.go +283 -0
- package/helmrelease/delivery_test.go +102 -0
- package/helmrelease/frozen_chart.go +91 -0
- package/helmrelease/result.go +27 -0
- package/helmrelease/runtime/delivery.go +508 -0
- package/helmrelease/runtime/delivery_test.go +236 -0
- package/helmrelease/runtime/resources_test.go +60 -0
- package/helmrelease/values.go +99 -0
- package/knowledge/context-envelope.schema.json +1 -0
- package/mcp/gateway-manifest.schema.json +387 -72
- package/network/README.md +156 -0
- package/network/network-ingest-event.schema.json +415 -0
- package/network/network-radius-accounting.schema.json +41 -0
- package/network/network-runtime-protocol.schema.json +1208 -0
- package/network/schema.go +26 -0
- package/network/schema_test.go +22 -0
- package/openapi/soha-api.json +59260 -35960
- package/openapi/soha-api.yaml +36064 -26232
- package/openapi/spec_generated.go +3 -3
- package/package.json +7 -1
- package/resource/manifest_health.go +155 -0
- package/resource/manifest_health_test.go +37 -0
- package/resource/models.go +14 -0
- package/resource/runtime/argocd.go +166 -0
- package/resource/runtime/argocd_integration_test.go +142 -0
- package/resource/runtime/argocd_observation.go +143 -0
- package/resource/runtime/argocd_operation.go +253 -0
- package/resource/runtime/argocd_resources.go +115 -0
- package/resource/runtime/argocd_resources_test.go +107 -0
- package/resource/runtime/argocd_test.go +386 -0
- package/resource/runtime/health.go +115 -0
- package/resource/runtime/health_test.go +78 -0
- package/resource/runtime/operator_integration_test.go +174 -0
- package/resource/runtime/ownership.go +178 -0
- package/resource/runtime/ownership_test.go +178 -0
- package/resource/runtime/rollout_integration_test.go +287 -0
- package/resource/runtime/rollout_observation.go +252 -0
- package/resource/runtime/rollout_operation.go +398 -0
- package/resource/runtime/rollout_resources.go +385 -0
- package/resource/runtime/rollout_task.go +165 -0
- package/resource/runtime/rollout_test.go +450 -0
package/COMPATIBILITY.md
CHANGED
|
@@ -100,6 +100,11 @@ requires dynamic JSON, add it to the baseline with an intentional review note.
|
|
|
100
100
|
If a loose boundary is tightened, remove it from the baseline in the same
|
|
101
101
|
change so the contract surface keeps moving toward named schemas.
|
|
102
102
|
|
|
103
|
+
`CapabilityCall.input` is intentionally dynamic: a continuation references a
|
|
104
|
+
registered capability whose version and input schema are checked by the Gateway.
|
|
105
|
+
The call envelope and task reference are closed schemas; this input map does not
|
|
106
|
+
permit arbitrary HTTP endpoints, scripts, or bypasses of current authorization.
|
|
107
|
+
|
|
103
108
|
## Public Cloud Extension Points
|
|
104
109
|
|
|
105
110
|
`CloudExtensionPoint` OpenAPI DTOs describe only public extension points that
|
|
@@ -116,6 +121,23 @@ the Cloud-only exclusion enum.
|
|
|
116
121
|
|
|
117
122
|
## Fixture Policy
|
|
118
123
|
|
|
124
|
+
### Outpost management compatibility
|
|
125
|
+
|
|
126
|
+
Outpost management retains the deployed `online/offline/degraded` status values,
|
|
127
|
+
node metadata, endpoint, version and last-contact fields. The shared
|
|
128
|
+
`IdentityResourceStatus` type is preserved for SDK source compatibility; these
|
|
129
|
+
legacy runtime values apply to Outposts, not to other resources' management
|
|
130
|
+
transitions. Management `status` and `version` inputs remain accepted for old
|
|
131
|
+
clients but cannot manufacture runtime observations. New clients use
|
|
132
|
+
`runtimeStatus`, `lastHeartbeatAt`, applied configuration information and the
|
|
133
|
+
explicit `forwardAuthUrl`. A desired configuration version of zero represents
|
|
134
|
+
an unregistered node and must not be displayed as a deployed version.
|
|
135
|
+
|
|
136
|
+
The two Outpost metadata references in the loose-boundary inventory document an
|
|
137
|
+
existing deployed JSON object surface. They preserve legacy clients and do not
|
|
138
|
+
authorize runtime health, configuration versions or lease expiry; those are
|
|
139
|
+
separately typed and recorded by authenticated runtime operations.
|
|
140
|
+
|
|
119
141
|
Every JSON Schema owned by this repository must have at least one valid and one
|
|
120
142
|
invalid fixture under `fixtures/json-schema/<contract>/`.
|
|
121
143
|
|
|
@@ -281,6 +303,52 @@ rename `operationId`, `operationKind`, `runnerId`, `state`, `occurredAt`,
|
|
|
281
303
|
`evidence`, `finalState`, or `callback`; must not add new required fields; and
|
|
282
304
|
must not narrow existing lifecycle state names or final status values.
|
|
283
305
|
|
|
306
|
+
## Network Runtime Protocol
|
|
307
|
+
|
|
308
|
+
`network/network-runtime-protocol.schema.json` owns messages exchanged by
|
|
309
|
+
network-control, endpoint services and network gateways. The contract carries
|
|
310
|
+
runtime identity, configuration and policy versions, bounded lease grants and
|
|
311
|
+
apply/revoke acknowledgements. It must never carry WireGuard private keys,
|
|
312
|
+
RADIUS shared secrets, passwords, EAP private material or mihomo subscription
|
|
313
|
+
credentials.
|
|
314
|
+
|
|
315
|
+
For `0.1.x`, patch releases may add optional fields and new message types with
|
|
316
|
+
strict payload definitions. They must not remove or rename `schemaVersion`,
|
|
317
|
+
`messageId`, `messageType`, `producerId`, `runtimeId`, `runtimeKind`,
|
|
318
|
+
`occurredAt`, `expiresAt` or `payload`; must not remove existing message,
|
|
319
|
+
runtime-kind, access-profile or status enum values; and must not loosen unknown
|
|
320
|
+
field rejection. Existing lease identity, subject/device binding, policy
|
|
321
|
+
version and expiry fields must remain required.
|
|
322
|
+
|
|
323
|
+
NAS authorization and session control use the same versioned envelope. Their
|
|
324
|
+
payloads contain only Soha identity references, bounded standard RADIUS
|
|
325
|
+
attributes and command acknowledgements. Public management bindings map a NAS
|
|
326
|
+
to one registered runtime/site and an access profile to site enforcement
|
|
327
|
+
attributes; neither contract may add RADIUS shared secrets or authentication
|
|
328
|
+
credential material.
|
|
329
|
+
|
|
330
|
+
WireGuard enrollment carries only a public key. VPN connection authorization
|
|
331
|
+
creates a session-scoped NetworkLease; desired configuration may add a strict
|
|
332
|
+
WireGuard block with overlay addresses, peers, split routes and default-deny
|
|
333
|
+
firewall rules. Private keys never cross this contract. Existing consumers
|
|
334
|
+
must ignore no fields because runtime messages remain closed; therefore a
|
|
335
|
+
consumer advertises `wireguard` only after it supports the full block and its
|
|
336
|
+
configuration version/readback semantics.
|
|
337
|
+
|
|
338
|
+
## Network Ingest Event
|
|
339
|
+
|
|
340
|
+
`network/network-ingest-event.schema.json` owns bounded, replayable telemetry
|
|
341
|
+
batches sent to `/api/ingest/v1/**`. Heartbeat, RADIUS Accounting, flow
|
|
342
|
+
aggregate and connection summary payloads remain typed and cannot be treated
|
|
343
|
+
as authorization state.
|
|
344
|
+
|
|
345
|
+
For `0.1.x`, patch releases may add optional fields, producer kinds and event
|
|
346
|
+
types with strict payload definitions. They must not remove or rename
|
|
347
|
+
`schemaVersion`, `batchId`, `producerId`, `producerKind`, `sentAt`, `events`,
|
|
348
|
+
event `id`, `type`, `sequence`, `occurredAt` or `payload`; must not remove
|
|
349
|
+
existing enum values; must not raise the 1,000-event batch maximum without a
|
|
350
|
+
resource-limit review; and must not introduce an open provider payload object.
|
|
351
|
+
|
|
284
352
|
## Permission Catalog
|
|
285
353
|
|
|
286
354
|
`auth/permission-catalog.json` owns grantable OpenSoha resource/action keys,
|
|
@@ -317,3 +385,26 @@ npm run check:consumers
|
|
|
317
385
|
Local runs skip missing sibling checkouts by default. CI and release candidate
|
|
318
386
|
validation should use `--require-all` or a specific `--consumer <name>` so a
|
|
319
387
|
missing checkout is a failure.
|
|
388
|
+
|
|
389
|
+
## Capability lifecycle metadata
|
|
390
|
+
|
|
391
|
+
`execution.checks` adds optional version-pinned references to read-only availability,
|
|
392
|
+
precondition, and assessment capabilities. Discovery filters references using the
|
|
393
|
+
caller-visible catalog before pagination. They are suggestions for explicit plan
|
|
394
|
+
steps, not automatic execution or a replacement for domain admission. No declared
|
|
395
|
+
check means unknown support, not a successful check.
|
|
396
|
+
|
|
397
|
+
`execution.recoveryMode=original_call` declares read-only receipt lookup by the
|
|
398
|
+
managed goal executor with the exact persisted invocation and current authorization.
|
|
399
|
+
It does not promise rollback or authorize a new write. Consumers without these
|
|
400
|
+
optional fields keep the existing version, idempotency, status, and cancellation
|
|
401
|
+
behavior.
|
|
402
|
+
|
|
403
|
+
## Contracts-first consumer revisions
|
|
404
|
+
|
|
405
|
+
`compat/consumer-revisions.json` pins a reviewed consumer commit when a contracts
|
|
406
|
+
release introduces APIs implemented by that consumer's pending change. Both CI
|
|
407
|
+
and release use the same commit and run the complete existing consumer checks.
|
|
408
|
+
Unlisted consumers use `main`. Replace the pin with `main` (or remove it) once the
|
|
409
|
+
matching consumer changes reach its default branch; do not skip failed checks to
|
|
410
|
+
resolve a release-order dependency.
|
package/README.md
CHANGED
|
@@ -32,6 +32,8 @@ auth/token-claims.schema.json Token/JWT claims contract
|
|
|
32
32
|
auth/permission-catalog.json Canonical resource/action permission catalog
|
|
33
33
|
auth/permission-catalog.schema.json Permission definition and migration metadata
|
|
34
34
|
connectors/connector-event-envelope.schema.json Connector runtime event batch envelope
|
|
35
|
+
network/network-runtime-protocol.schema.json Network control/runtime message contract
|
|
36
|
+
network/network-ingest-event.schema.json Bounded heartbeat, Accounting and flow event batches
|
|
35
37
|
gen/go/sohaapi Go SDK types for stable cross-repo contracts
|
|
36
38
|
gen/ts/sohaapi TypeScript SDK types for stable Web contracts
|
|
37
39
|
```
|
|
@@ -147,6 +149,12 @@ failure.
|
|
|
147
149
|
|
|
148
150
|
## Consumer Matrix
|
|
149
151
|
|
|
152
|
+
Network runtime schemas and network-access DTOs require `0.1.17` or later;
|
|
153
|
+
they are absent from npm `0.1.16` and Go `v0.1.15`. For unpublished changes,
|
|
154
|
+
use the local consumer matrix below: it packs this checkout for Web and
|
|
155
|
+
supplies an isolated Go workspace. After publishing, update consumer versions
|
|
156
|
+
and lockfiles and verify them without the local override.
|
|
157
|
+
|
|
150
158
|
The cross-repository consumer gate is:
|
|
151
159
|
|
|
152
160
|
```sh
|
|
@@ -163,9 +171,10 @@ npm run check:consumers -- --consumer soha-cli --require-all
|
|
|
163
171
|
npm run check:consumers -- --consumer soha-agent --require-all
|
|
164
172
|
```
|
|
165
173
|
|
|
166
|
-
Go consumers run in a temporary `go.work` that
|
|
167
|
-
|
|
168
|
-
|
|
174
|
+
Go consumers run in a temporary `go.work` that replaces the contracts module
|
|
175
|
+
with this checkout. `soha-web` runs `npm ci`, installs a packed copy of this
|
|
176
|
+
checkout without changing its dependency manifest or lockfile, and builds
|
|
177
|
+
against that package.
|
|
169
178
|
|
|
170
179
|
Use `--dry-run` to inspect the discovered commands without executing consumer
|
|
171
180
|
builds.
|
|
@@ -228,3 +237,40 @@ import paths.
|
|
|
228
237
|
|
|
229
238
|
This repository is licensed under the Apache License 2.0. See
|
|
230
239
|
[LICENSE](./LICENSE) for the full license text.
|
|
240
|
+
|
|
241
|
+
### Workbench model preferences
|
|
242
|
+
|
|
243
|
+
`WorkbenchSendMessageStreamRequest.modelPreferences` selects a public model and
|
|
244
|
+
an optional `auto`, `low`, `medium`, or `high` reasoning effort for internal general
|
|
245
|
+
chat. Preferences persist in session metadata when a message is sent; an empty
|
|
246
|
+
public model follows the global default. External agents and analysis modes manage
|
|
247
|
+
their own models. The workbench catalog exposes only permitted public model names.
|
|
248
|
+
|
|
249
|
+
Gateway routes may declare `metadata.reasoningEfforts: ["low", "medium", "high"]`
|
|
250
|
+
(or a supported subset). Only OpenAI-wire routes without protocol conversion expose
|
|
251
|
+
these levels; every eligible fallback must support a level for it to be offered.
|
|
252
|
+
Unknown capabilities offer automatic reasoning only. Explicit supported efforts map
|
|
253
|
+
to `reasoning_effort` for chat completions and `reasoning.effort` for Responses.
|
|
254
|
+
|
|
255
|
+
### Shared native Helm task adapter
|
|
256
|
+
|
|
257
|
+
`helmrelease/runtime` applies the versioned Helm execution contract through Helm 4.
|
|
258
|
+
Both core Direct and the standalone Agent supply their own authorized action configuration;
|
|
259
|
+
queueing, approvals, secret resolution and chart downloads remain outside this package.
|
|
260
|
+
SDK-only consumers need not import this optional package. Its native revision and recovery
|
|
261
|
+
checks are tested once for both execution modes.
|
|
262
|
+
|
|
263
|
+
Agent-local authenticated POST endpoints `/api/v1/platform/helm/delivery/prepare`,
|
|
264
|
+
`/api/v1/platform/helm/delivery/preflight` and `/api/v1/platform/helm/delivery/observe` accept `HelmExecutionTaskPayload` and return a
|
|
265
|
+
`data` envelope with the prepared payload or `HelmExecutionTaskResult`, respectively.
|
|
266
|
+
They enforce the configured cluster identity and are read-only; `apply` is accepted
|
|
267
|
+
only by the claimed-task runner. Confidential requests are bounded to 8 MiB,
|
|
268
|
+
rendered manifests plus hooks to 2 MiB and values to 1 MiB, and are never logged.
|
|
269
|
+
|
|
270
|
+
### Controller-aware Agent execution
|
|
271
|
+
|
|
272
|
+
Manifest tasks emitted by the controller-aware Core use `manifest_agent_v3.<clusterId>` and require the Agent summary capability `manifest.execution.v3`. New Agents also accept legacy `manifest_agent.<clusterId>` and `manifest_agent_v2.<clusterId>` tasks using the protected executor. Old Agents cannot claim the new provider kind; capability checks alone are not a substitute for this claim boundary during rolling upgrades.
|
|
273
|
+
|
|
274
|
+
Native YAML/CR writes and workload restart, scale, rollback and image changes use the existing request/response bodies under `/api/v1/platform/ownership-v2`, with the original route suffix. This endpoint family guarantees live external-owner checks for Operator, Argo CD, and Argo Rollouts resources and optimistic identity fencing; ownership conflicts return HTTP 409. Core must not fall back to older mutations after 404/405. Reads retain their existing routes.
|
|
275
|
+
|
|
276
|
+
`resource/runtime` implements bounded WorkloadCronJob, Argo CD, and Argo Rollouts adapters shared by Direct and Agent. The frozen inventory, operation identity, current generation, resource UID/version, and child-resource evidence determine completion. Blue-green and Traefik canary delivery observe native Service revisions, weights, and complete AnalysisRun metric windows. Promotion only releases manual pauses; analysis failure and cancellation require confirmed stable traffic. Restoring desired configuration uses a new governed operation. Other CRs and traffic plugins are not inferred as supported from a generic Ready condition.
|
|
@@ -6,8 +6,8 @@ import _ "embed"
|
|
|
6
6
|
|
|
7
7
|
const (
|
|
8
8
|
PermissionCatalogVersion = "2.0.0"
|
|
9
|
-
PermissionCatalogContentSHA256 = "
|
|
10
|
-
PermissionCatalogSHA256 = "
|
|
9
|
+
PermissionCatalogContentSHA256 = "5b4c9eed71c549d61a6fd538db542681cb2932619d66ab031c74fcbaaa0c9867"
|
|
10
|
+
PermissionCatalogSHA256 = "e1e4bab807f64894c9bbde245394902fb1e82253d5847585102560ea6f853894"
|
|
11
11
|
)
|
|
12
12
|
|
|
13
13
|
//go:embed permission-catalog.json
|
package/auth/catalog_test.go
CHANGED
|
@@ -52,6 +52,38 @@ func TestPermissionCatalogIncludesVirtualizationStorageView(t *testing.T) {
|
|
|
52
52
|
t.Fatal("virtualization.storage.view is missing")
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
func TestPermissionCatalogIncludesDeliveryEnvironmentApproval(t *testing.T) {
|
|
56
|
+
var catalog struct {
|
|
57
|
+
Permissions []struct {
|
|
58
|
+
Key string `json:"key"`
|
|
59
|
+
Domain string `json:"domain"`
|
|
60
|
+
Resource string `json:"resource"`
|
|
61
|
+
Action string `json:"action"`
|
|
62
|
+
RiskLevel string `json:"riskLevel"`
|
|
63
|
+
ScopeKinds []string `json:"scopeKinds"`
|
|
64
|
+
ApprovalPolicy string `json:"approvalPolicy"`
|
|
65
|
+
Status string `json:"status"`
|
|
66
|
+
Assignable bool `json:"assignable"`
|
|
67
|
+
} `json:"permissions"`
|
|
68
|
+
}
|
|
69
|
+
if err := json.Unmarshal(PermissionCatalogJSON(), &catalog); err != nil {
|
|
70
|
+
t.Fatalf("decode permission catalog: %v", err)
|
|
71
|
+
}
|
|
72
|
+
for _, permission := range catalog.Permissions {
|
|
73
|
+
if permission.Key != "delivery.application-environments.approve" {
|
|
74
|
+
continue
|
|
75
|
+
}
|
|
76
|
+
if permission.Domain != "delivery" || permission.Resource != "application-environments" || permission.Action != "approve" ||
|
|
77
|
+
permission.RiskLevel != "high" || permission.ApprovalPolicy != "eligible" || permission.Status != "active" ||
|
|
78
|
+
!permission.Assignable || len(permission.ScopeKinds) != 3 || permission.ScopeKinds[0] != "workspace" ||
|
|
79
|
+
permission.ScopeKinds[1] != "project" || permission.ScopeKinds[2] != "resource" {
|
|
80
|
+
t.Fatalf("unexpected delivery environment approval permission: %#v", permission)
|
|
81
|
+
}
|
|
82
|
+
return
|
|
83
|
+
}
|
|
84
|
+
t.Fatal("delivery.application-environments.approve is missing")
|
|
85
|
+
}
|
|
86
|
+
|
|
55
87
|
func TestPermissionCatalogIncludesIndependentResourceCreationEntry(t *testing.T) {
|
|
56
88
|
var catalog struct {
|
|
57
89
|
Permissions []struct {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
package auth
|
|
2
|
+
|
|
3
|
+
import "strings"
|
|
4
|
+
|
|
5
|
+
// IsOutpostIdentityHeader identifies the response headers supported by the v1
|
|
6
|
+
// Outpost protocol. Transport, cookie and internal authentication headers are
|
|
7
|
+
// deliberately excluded, including when returned by a configured claim mapping.
|
|
8
|
+
func IsOutpostIdentityHeader(name string) bool {
|
|
9
|
+
switch strings.ToLower(strings.TrimSpace(name)) {
|
|
10
|
+
case "x-auth-request-user", "x-auth-request-email", "x-auth-request-groups",
|
|
11
|
+
"x-soha-user", "x-soha-user-id", "x-soha-email", "x-soha-roles",
|
|
12
|
+
"x-soha-teams", "x-soha-groups", "x-soha-projects", "x-soha-tags":
|
|
13
|
+
return true
|
|
14
|
+
default:
|
|
15
|
+
return false
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
package auth
|
|
2
|
+
|
|
3
|
+
import "testing"
|
|
4
|
+
|
|
5
|
+
func TestOutpostIdentityHeaders(t *testing.T) {
|
|
6
|
+
for _, name := range []string{"X-Soha-User-ID", "X-Soha-Projects", "X-Soha-Tags", " x-auth-request-email "} {
|
|
7
|
+
if !IsOutpostIdentityHeader(name) {
|
|
8
|
+
t.Errorf("supported identity header %q rejected", name)
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
for _, name := range []string{"Set-Cookie", "Authorization", "Location", "X-Forwarded-Host", "X-Soha-Outpost-Token", "X-Soha-Session-Token", "X-Auth-Email", "X-Soha-Email\r\nInjected"} {
|
|
12
|
+
if IsOutpostIdentityHeader(name) {
|
|
13
|
+
t.Errorf("unsupported header %q accepted", name)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|