@opensoha/contracts 0.1.15 → 0.1.17

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 (211) hide show
  1. package/COMPATIBILITY.md +46 -0
  2. package/README.md +12 -3
  3. package/auth/catalog_generated.go +2 -2
  4. package/auth/catalog_test.go +32 -0
  5. package/auth/permission-catalog.json +537 -8
  6. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  7. package/compat/openapi-loose-boundaries-0.1.0.json +58 -1
  8. package/fixtures/json-schema/network-ingest-event/invalid/duplicate-event.json +33 -0
  9. package/fixtures/json-schema/network-ingest-event/invalid/message-payload-mismatch.json +23 -0
  10. package/fixtures/json-schema/network-ingest-event/invalid/password.json +22 -0
  11. package/fixtures/json-schema/network-ingest-event/invalid/proxy-flow-destination.json +28 -0
  12. package/fixtures/json-schema/network-ingest-event/valid/endpoint-proxy-flow.json +27 -0
  13. package/fixtures/json-schema/network-ingest-event/valid/freeradius-accounting.json +25 -0
  14. package/fixtures/json-schema/network-ingest-event/valid/gateway.json +53 -0
  15. package/fixtures/json-schema/network-radius-accounting/invalid/password.json +9 -0
  16. package/fixtures/json-schema/network-radius-accounting/valid/accounting.json +16 -0
  17. package/fixtures/json-schema/network-runtime-protocol/invalid/invalid-cidr.json +31 -0
  18. package/fixtures/json-schema/network-runtime-protocol/invalid/message-payload-mismatch.json +19 -0
  19. package/fixtures/json-schema/network-runtime-protocol/invalid/mihomo-raw-subscription.json +33 -0
  20. package/fixtures/json-schema/network-runtime-protocol/invalid/nas-authorization-password.json +18 -0
  21. package/fixtures/json-schema/network-runtime-protocol/invalid/nas-eap-without-certificate.json +17 -0
  22. package/fixtures/json-schema/network-runtime-protocol/invalid/private-key.json +20 -0
  23. package/fixtures/json-schema/network-runtime-protocol/invalid/raw-credential-reference.json +16 -0
  24. package/fixtures/json-schema/network-runtime-protocol/invalid/runtime-interval-too-short.json +23 -0
  25. package/fixtures/json-schema/network-runtime-protocol/invalid/wireguard-capability-without-key.json +19 -0
  26. package/fixtures/json-schema/network-runtime-protocol/invalid/wireguard-default-route.json +31 -0
  27. package/fixtures/json-schema/network-runtime-protocol/invalid/ztna-without-access-grant.json +17 -0
  28. package/fixtures/json-schema/network-runtime-protocol/valid/configuration-desired.json +86 -0
  29. package/fixtures/json-schema/network-runtime-protocol/valid/direct-ztna-connect.json +19 -0
  30. package/fixtures/json-schema/network-runtime-protocol/valid/direct-ztna-result.json +33 -0
  31. package/fixtures/json-schema/network-runtime-protocol/valid/internal-ztna-connect.json +19 -0
  32. package/fixtures/json-schema/network-runtime-protocol/valid/mihomo-app-subscription-configuration.json +32 -0
  33. package/fixtures/json-schema/network-runtime-protocol/valid/mihomo-manual-node-configuration.json +32 -0
  34. package/fixtures/json-schema/network-runtime-protocol/valid/mihomo-wireguard-configuration.json +70 -0
  35. package/fixtures/json-schema/network-runtime-protocol/valid/nas-authorization-request.json +19 -0
  36. package/fixtures/json-schema/network-runtime-protocol/valid/nas-authorization-result.json +24 -0
  37. package/fixtures/json-schema/network-runtime-protocol/valid/nas-session-command-result.json +17 -0
  38. package/fixtures/json-schema/network-runtime-protocol/valid/nas-session-command.json +27 -0
  39. package/fixtures/json-schema/network-runtime-protocol/valid/vpn-connect-request.json +17 -0
  40. package/fixtures/json-schema/network-runtime-protocol/valid/vpn-connect-result.json +34 -0
  41. package/fixtures/json-schema/network-runtime-protocol/valid/wireguard-enrollment.json +20 -0
  42. package/fixtures/json-schema/network-runtime-protocol/valid/wireguard-site-link.json +48 -0
  43. package/fixtures/openapi/AlertRuleEnvelope/invalid/missing-data.json +1 -0
  44. package/fixtures/openapi/AlertRuleEnvelope/valid/metrics.json +11 -0
  45. package/fixtures/openapi/AlertRuleInput/invalid/missing-name.json +3 -0
  46. package/fixtures/openapi/AlertRuleInput/valid/metrics.json +25 -0
  47. package/fixtures/openapi/AlertRuleRunListEnvelope/invalid/missing-rule-id.json +12 -0
  48. package/fixtures/openapi/AlertRuleRunListEnvelope/valid/items.json +13 -0
  49. package/fixtures/openapi/AlertRuleTestResultEnvelope/invalid/missing-executed-at.json +5 -0
  50. package/fixtures/openapi/AlertRuleTestResultEnvelope/valid/clear.json +10 -0
  51. package/fixtures/openapi/AnnouncementReceiptPageEnvelope/invalid/missing-read-count.json +9 -0
  52. package/fixtures/openapi/AnnouncementReceiptPageEnvelope/valid/read-and-unread.json +28 -0
  53. package/fixtures/openapi/ApplicationRuntimeEnvironment/invalid/unknown-status.json +7 -0
  54. package/fixtures/openapi/ApplicationRuntimeEnvironment/valid/unavailable.json +7 -0
  55. package/fixtures/openapi/ApplicationWorkflowInput/invalid/owner-fields.json +7 -0
  56. package/fixtures/openapi/ApplicationWorkflowInput/valid/minimal.json +9 -0
  57. package/fixtures/openapi/BrandingAssetUploadEnvelope/valid/svg-data-url.json +5 -0
  58. package/fixtures/openapi/BrowserHandoffCompletionEnvelope/invalid/token-leak.json +7 -0
  59. package/fixtures/openapi/BrowserHandoffCompletionEnvelope/valid/completed.json +6 -0
  60. package/fixtures/openapi/BrowserHandoffEnvelope/invalid/missing-principal.json +12 -0
  61. package/fixtures/openapi/BrowserHandoffEnvelope/valid/pending.json +11 -0
  62. package/fixtures/openapi/ChangePasswordRequest/invalid/missing-current-password.json +3 -0
  63. package/fixtures/openapi/ChangePasswordRequest/invalid/short-new-password.json +4 -0
  64. package/fixtures/openapi/ChangePasswordRequest/valid/password.json +4 -0
  65. package/fixtures/openapi/DesktopAuthAttemptCreateRequest/invalid/https-redirect.json +6 -0
  66. package/fixtures/openapi/DesktopAuthAttemptCreateRequest/invalid/localhost-redirect.json +6 -0
  67. package/fixtures/openapi/DesktopAuthAttemptCreateRequest/invalid/plain-challenge.json +6 -0
  68. package/fixtures/openapi/DesktopAuthAttemptCreateRequest/invalid/privileged-port.json +6 -0
  69. package/fixtures/openapi/DesktopAuthAttemptCreateRequest/invalid/short-callback.json +6 -0
  70. package/fixtures/openapi/DesktopAuthAttemptCreateRequest/valid/loopback.json +6 -0
  71. package/fixtures/openapi/DesktopAuthAttemptEnvelope/invalid/missing-expiry.json +6 -0
  72. package/fixtures/openapi/DesktopAuthAttemptEnvelope/valid/attempt.json +7 -0
  73. package/fixtures/openapi/DesktopAuthAttemptExchangeRequest/invalid/short-verifier.json +4 -0
  74. package/fixtures/openapi/DesktopAuthAttemptExchangeRequest/valid/exchange.json +4 -0
  75. package/fixtures/openapi/EndpointDevice/invalid/missing-owner.json +8 -0
  76. package/fixtures/openapi/EndpointDevice/valid/active.json +35 -0
  77. package/fixtures/openapi/EndpointDeviceRegistrationInput/invalid/client-owned-status.json +5 -0
  78. package/fixtures/openapi/EndpointDeviceRegistrationInput/invalid/oversized-network-inventory.json +18 -0
  79. package/fixtures/openapi/EndpointDeviceRegistrationInput/valid/macos.json +28 -0
  80. package/fixtures/openapi/IdentityApplication/invalid/missing-id.json +7 -0
  81. package/fixtures/openapi/IdentityApplication/valid/full.json +30 -0
  82. package/fixtures/openapi/IdentityApplicationEnvelope/invalid/missing-data.json +1 -0
  83. package/fixtures/openapi/IdentityApplicationEnvelope/valid/minimal.json +10 -0
  84. package/fixtures/openapi/IdentityApplicationLaunchListEnvelope/invalid/missing-user.json +11 -0
  85. package/fixtures/openapi/IdentityApplicationLaunchListEnvelope/valid/minimal.json +12 -0
  86. package/fixtures/openapi/LLMUpstreamTestResultEnvelope/invalid/models-not-array.json +9 -0
  87. package/fixtures/openapi/LLMUpstreamTestResultEnvelope/valid/discovered-models.json +11 -0
  88. package/fixtures/openapi/LogQuery/invalid/empty-data-source-id.json +7 -0
  89. package/fixtures/openapi/LogQuery/valid/durable-data-source.json +14 -0
  90. package/fixtures/openapi/ManifestPackage/invalid/missing-application.json +12 -0
  91. package/fixtures/openapi/ManifestPackage/valid/service-scoped.json +29 -0
  92. package/fixtures/openapi/NetworkAccessGrant/invalid/token-digest.json +15 -0
  93. package/fixtures/openapi/NetworkAccessGrant/valid/issued.json +14 -0
  94. package/fixtures/openapi/NetworkAccessGrantInput/invalid/no-resources.json +7 -0
  95. package/fixtures/openapi/NetworkAccessGrantInput/valid/direct-ztna.json +8 -0
  96. package/fixtures/openapi/NetworkAccessGrantSecret/invalid/short-token.json +17 -0
  97. package/fixtures/openapi/NetworkAccessGrantSecret/valid/issued.json +17 -0
  98. package/fixtures/openapi/NetworkAccessPolicy/invalid/missing-version.json +20 -0
  99. package/fixtures/openapi/NetworkAccessPolicy/valid/published-draft.json +21 -0
  100. package/fixtures/openapi/NetworkAccessPolicyInput/invalid/duplicate-team.json +17 -0
  101. package/fixtures/openapi/NetworkAccessPolicyInput/valid/team-and-tag-allow.json +17 -0
  102. package/fixtures/openapi/NetworkConflictAnalysisRequest/invalid/ipv6-range.json +9 -0
  103. package/fixtures/openapi/NetworkConflictAnalysisRequest/valid/runtime-ranges.json +15 -0
  104. package/fixtures/openapi/NetworkConnectionOption/invalid/secret.json +10 -0
  105. package/fixtures/openapi/NetworkConnectionOption/valid/wifi.json +9 -0
  106. package/fixtures/openapi/NetworkConnectionOption/valid/wired.json +8 -0
  107. package/fixtures/openapi/NetworkGateway/invalid/missing-site.json +7 -0
  108. package/fixtures/openapi/NetworkGateway/valid/online.json +23 -0
  109. package/fixtures/openapi/NetworkGatewayInput/invalid/default-route-overlay.json +13 -0
  110. package/fixtures/openapi/NetworkGatewayInput/valid/routed.json +14 -0
  111. package/fixtures/openapi/NetworkLease/invalid/empty-cidrs.json +12 -0
  112. package/fixtures/openapi/NetworkLease/valid/active.json +12 -0
  113. package/fixtures/openapi/NetworkMihomoProfile/invalid/subscription-leak.json +20 -0
  114. package/fixtures/openapi/NetworkMihomoProfile/valid/managed.json +21 -0
  115. package/fixtures/openapi/NetworkMihomoProfileInput/invalid/app-subscription-secret.json +14 -0
  116. package/fixtures/openapi/NetworkMihomoProfileInput/invalid/manual-node-with-subscription.json +20 -0
  117. package/fixtures/openapi/NetworkMihomoProfileInput/valid/app-subscription.json +14 -0
  118. package/fixtures/openapi/NetworkMihomoProfileInput/valid/managed.json +16 -0
  119. package/fixtures/openapi/NetworkMihomoProfileInput/valid/manual-node.json +21 -0
  120. package/fixtures/openapi/NetworkNASBinding/invalid/secret.json +13 -0
  121. package/fixtures/openapi/NetworkNASBinding/valid/default.json +16 -0
  122. package/fixtures/openapi/NetworkNASBindingInput/invalid/secret.json +10 -0
  123. package/fixtures/openapi/NetworkNASBindingInput/valid/default.json +13 -0
  124. package/fixtures/openapi/NetworkPolicyPreviewRequest/invalid/unknown-mode.json +6 -0
  125. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-direct-ztna.json +6 -0
  126. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-vpn-ztna.json +6 -0
  127. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-vpn.json +6 -0
  128. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/internal-direct.json +7 -0
  129. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/internal-ztna.json +7 -0
  130. package/fixtures/openapi/NetworkPolicyPreviewResult/invalid/bypass-path.json +9 -0
  131. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/onboarding.json +10 -0
  132. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/protected-broad-path-denied.json +9 -0
  133. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/protected-resource.json +9 -0
  134. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/quarantine.json +10 -0
  135. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/restricted.json +10 -0
  136. package/fixtures/openapi/NetworkPolicySnapshot/invalid/zero-version.json +7 -0
  137. package/fixtures/openapi/NetworkPolicySnapshot/valid/published.json +7 -0
  138. package/fixtures/openapi/NetworkResourceInput/invalid/invalid-port.json +10 -0
  139. package/fixtures/openapi/NetworkResourceInput/valid/protected-cidr.json +10 -0
  140. package/fixtures/openapi/NetworkRuntimeEnrollmentInput/invalid/excessive-ttl.json +7 -0
  141. package/fixtures/openapi/NetworkRuntimeEnrollmentInput/valid/endpoint.json +7 -0
  142. package/fixtures/openapi/NetworkRuntimeEnrollmentSecret/invalid/short-token.json +15 -0
  143. package/fixtures/openapi/NetworkRuntimeEnrollmentSecret/valid/pending.json +15 -0
  144. package/fixtures/openapi/NetworkSession/invalid/unknown-status.json +14 -0
  145. package/fixtures/openapi/NetworkSession/valid/restricted-vpn-ztna.json +16 -0
  146. package/fixtures/openapi/NetworkSessionActionExecuteInput/invalid/short-hash.json +6 -0
  147. package/fixtures/openapi/NetworkSessionActionExecuteInput/valid/restrict.json +6 -0
  148. package/fixtures/openapi/NetworkSessionActionInput/invalid/unknown-action.json +5 -0
  149. package/fixtures/openapi/NetworkSessionActionInput/valid/restrict.json +5 -0
  150. package/fixtures/openapi/NetworkSessionActionPlan/invalid/missing-hash.json +12 -0
  151. package/fixtures/openapi/NetworkSessionActionPlan/valid/fallback-disconnect.json +13 -0
  152. package/fixtures/openapi/NetworkSessionCommand/invalid/unknown-status.json +14 -0
  153. package/fixtures/openapi/NetworkSessionCommand/valid/pending.json +14 -0
  154. package/fixtures/openapi/NetworkSiteInput/invalid/unknown-status.json +4 -0
  155. package/fixtures/openapi/NetworkSiteInput/valid/shanghai.json +5 -0
  156. package/fixtures/openapi/NetworkSiteProfileBinding/invalid/vlan.json +9 -0
  157. package/fixtures/openapi/NetworkSiteProfileBinding/valid/default.json +10 -0
  158. package/fixtures/openapi/NetworkSiteProfileBindingInput/invalid/timeout.json +7 -0
  159. package/fixtures/openapi/NetworkSiteProfileBindingInput/valid/default.json +7 -0
  160. package/fixtures/openapi/NetworkSpaceInput/invalid/empty-cidrs.json +6 -0
  161. package/fixtures/openapi/NetworkSpaceInput/invalid/malformed-cidr.json +6 -0
  162. package/fixtures/openapi/NetworkSpaceInput/valid/corp.json +6 -0
  163. package/fixtures/openapi/NetworkTelemetrySummary/invalid/raw-destination.json +29 -0
  164. package/fixtures/openapi/NetworkTelemetrySummary/valid/proxy-flow.json +36 -0
  165. package/fixtures/openapi/OIDCClientInput/valid/generated-client-id.json +8 -0
  166. package/fixtures/openapi/OIDCClientSecretRevealEnvelope/invalid/missing-secret.json +6 -0
  167. package/fixtures/openapi/OIDCClientSecretRevealEnvelope/valid/reveal.json +7 -0
  168. package/fixtures/openapi/PasswordChangeResult/invalid/unexpected-status.json +3 -0
  169. package/fixtures/openapi/PasswordChangeResult/valid/ok.json +3 -0
  170. package/fixtures/openapi/PortalApplicationListEnvelope/invalid/missing-items.json +1 -0
  171. package/fixtures/openapi/PortalApplicationListEnvelope/valid/minimal.json +12 -0
  172. package/fixtures/openapi/PortalBootstrapEnvelope/invalid/missing-security.json +17 -0
  173. package/fixtures/openapi/PortalBootstrapEnvelope/valid/minimal.json +31 -0
  174. package/fixtures/openapi/PortalLaunchDecisionEnvelope/invalid/missing-launch-url.json +14 -0
  175. package/fixtures/openapi/PortalLaunchDecisionEnvelope/valid/desktop-handoff.json +16 -0
  176. package/fixtures/openapi/PortalLaunchRequest/invalid/unknown-surface.json +3 -0
  177. package/fixtures/openapi/PortalLaunchRequest/valid/default-web.json +1 -0
  178. package/fixtures/openapi/PortalLaunchRequest/valid/desktop.json +3 -0
  179. package/fixtures/openapi/PortalSecuritySummaryEnvelope/invalid/missing-session-count.json +15 -0
  180. package/fixtures/openapi/PortalSecuritySummaryEnvelope/valid/minimal.json +16 -0
  181. package/fixtures/openapi/ResourceLease/invalid/missing-session.json +10 -0
  182. package/fixtures/openapi/ResourceLease/valid/active.json +11 -0
  183. package/fixtures/openapi/ScopeGrantInput/invalid/delivery-missing-business-line.json +7 -0
  184. package/fixtures/openapi/ScopeGrantInput/invalid/platform-missing-clusters.json +7 -0
  185. package/fixtures/openapi/ScopeGrantInput/valid/platform.json +8 -0
  186. package/fixtures/openapi/SoftwarePackage/valid/software-package.json +6 -0
  187. package/fixtures/openapi/SoftwarePackageDownloadRecord/invalid/negative-duration.json +6 -0
  188. package/fixtures/openapi/SoftwarePackageDownloadRecord/valid/software-package-download-record.json +8 -0
  189. package/fixtures/openapi/SoftwarePackageURLImportRequest/valid/software-package-url-import-request.json +4 -0
  190. package/fixtures/openapi/SoftwareStorage/invalid/software-storage.json +1 -1
  191. package/fixtures/openapi/SoftwareStorage/valid/software-storage.json +13 -1
  192. package/fixtures/openapi/SystemIntegrationCreateRequest/invalid/s3-storage-missing-name.json +5 -0
  193. package/fixtures/openapi/SystemIntegrationCreateRequest/valid/s3-software-storage.json +18 -0
  194. package/fixtures/openapi/UpdateProfileRequest/invalid/invalid-avatar-fit.json +5 -0
  195. package/fixtures/openapi/UpdateProfileRequest/invalid/missing-email.json +3 -0
  196. package/fixtures/openapi/UpdateProfileRequest/valid/profile.json +7 -0
  197. package/gen/go/sohaapi/client.go +210 -5
  198. package/gen/go/sohaapi/client_test.go +128 -5
  199. package/gen/go/sohaapi/types.go +3326 -369
  200. package/gen/go/sohaapi/types_test.go +22 -0
  201. package/gen/ts/sohaapi/index.ts +11612 -6479
  202. package/network/README.md +116 -0
  203. package/network/network-ingest-event.schema.json +187 -0
  204. package/network/network-radius-accounting.schema.json +41 -0
  205. package/network/network-runtime-protocol.schema.json +752 -0
  206. package/network/schema.go +26 -0
  207. package/network/schema_test.go +22 -0
  208. package/openapi/soha-api.json +29591 -18317
  209. package/openapi/soha-api.yaml +11603 -6720
  210. package/openapi/spec_generated.go +3 -3
  211. package/package.json +5 -1
@@ -0,0 +1,36 @@
1
+ {
2
+ "from": "2026-09-03T00:00:00Z",
3
+ "to": "2026-09-03T01:00:00Z",
4
+ "eventCount": 8,
5
+ "heartbeatCount": 4,
6
+ "radiusAccountingCount": 1,
7
+ "networkFlowCount": 0,
8
+ "connectionSummaryCount": 1,
9
+ "proxyFlowCount": 2,
10
+ "uploadBytes": 1024,
11
+ "downloadBytes": 4096,
12
+ "activeConnections": 3,
13
+ "producers": [
14
+ {
15
+ "producerId": "endpoint-shanghai-01",
16
+ "producerKind": "endpoint",
17
+ "lastSeenAt": "2026-09-03T00:59:00Z",
18
+ "gapCount": 0,
19
+ "regressionCount": 0
20
+ }
21
+ ],
22
+ "proxyFlows": [
23
+ {
24
+ "producerId": "endpoint-shanghai-01",
25
+ "engine": "mihomo",
26
+ "profileId": "profile-01",
27
+ "profileRevision": 2,
28
+ "mode": "app_subscription",
29
+ "selectedProxy": "edge-a",
30
+ "uploadBytes": 1024,
31
+ "downloadBytes": 4096,
32
+ "activeConnections": 3,
33
+ "lastOccurredAt": "2026-09-03T00:59:00Z"
34
+ }
35
+ ]
36
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "clientType": "confidential",
3
+ "redirectUris": ["https://app.example.com/oauth/callback"],
4
+ "allowedScopes": ["openid", "profile", "email"],
5
+ "allowedGrantTypes": ["authorization_code"],
6
+ "requirePkce": true,
7
+ "status": "enabled"
8
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "data": {
3
+ "clientId": "generated-client-id",
4
+ "revealedAt": "2026-08-24T08:00:00Z"
5
+ }
6
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "data": {
3
+ "clientId": "generated-client-id",
4
+ "clientSecret": "revealable-client-secret",
5
+ "revealedAt": "2026-08-24T08:00:00Z"
6
+ }
7
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "status": "changed"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "status": "ok"
3
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "id": "app-1",
5
+ "name": "Soha Console",
6
+ "slug": "soha-console",
7
+ "status": "enabled",
8
+ "createdAt": "2026-08-31T00:00:00Z",
9
+ "updatedAt": "2026-08-31T00:00:00Z"
10
+ }
11
+ ]
12
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "data": {
3
+ "principal": {
4
+ "userId": "user-1",
5
+ "userName": "OpenSoha",
6
+ "email": "opensoha@example.com",
7
+ "roles": [],
8
+ "teams": [],
9
+ "projects": [],
10
+ "tags": []
11
+ },
12
+ "applications": [],
13
+ "favorites": [],
14
+ "recent": [],
15
+ "categories": []
16
+ }
17
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "data": {
3
+ "principal": {
4
+ "userId": "user-1",
5
+ "userName": "OpenSoha",
6
+ "email": "opensoha@example.com",
7
+ "roles": [],
8
+ "teams": [],
9
+ "projects": [],
10
+ "tags": []
11
+ },
12
+ "applications": [],
13
+ "favorites": [],
14
+ "recent": [],
15
+ "categories": [],
16
+ "security": {
17
+ "principal": {
18
+ "userId": "user-1",
19
+ "userName": "OpenSoha",
20
+ "email": "opensoha@example.com",
21
+ "roles": [],
22
+ "teams": [],
23
+ "projects": [],
24
+ "tags": []
25
+ },
26
+ "mfaEnabled": false,
27
+ "linkedSources": [],
28
+ "activeSession": 1
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "data": {
3
+ "application": {
4
+ "id": "app-1",
5
+ "name": "Soha Console",
6
+ "slug": "soha-console",
7
+ "status": "enabled",
8
+ "createdAt": "2026-08-31T00:00:00Z",
9
+ "updatedAt": "2026-08-31T00:00:00Z"
10
+ },
11
+ "providerType": "oidc",
12
+ "decision": "allow"
13
+ }
14
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "data": {
3
+ "application": {
4
+ "id": "app-1",
5
+ "name": "Soha Console",
6
+ "slug": "soha-console",
7
+ "status": "enabled",
8
+ "createdAt": "2026-08-31T00:00:00Z",
9
+ "updatedAt": "2026-08-31T00:00:00Z"
10
+ },
11
+ "launchUrl": "/auth/browser-handoff/handoff-1",
12
+ "providerType": "oidc",
13
+ "decision": "allow",
14
+ "handoffExpiresAt": "2026-08-31T00:01:00Z"
15
+ }
16
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "surface": "mobile"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "surface": "desktop"
3
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "data": {
3
+ "principal": {
4
+ "userId": "user-1",
5
+ "userName": "OpenSoha",
6
+ "email": "opensoha@example.com",
7
+ "roles": [],
8
+ "teams": [],
9
+ "projects": [],
10
+ "tags": []
11
+ },
12
+ "mfaEnabled": false,
13
+ "linkedSources": []
14
+ }
15
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "data": {
3
+ "principal": {
4
+ "userId": "user-1",
5
+ "userName": "OpenSoha",
6
+ "email": "opensoha@example.com",
7
+ "roles": [],
8
+ "teams": [],
9
+ "projects": [],
10
+ "tags": []
11
+ },
12
+ "mfaEnabled": false,
13
+ "linkedSources": [],
14
+ "activeSession": 1
15
+ }
16
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "resource-lease-01",
3
+ "subjectId": "user-01",
4
+ "deviceId": "device-01",
5
+ "resourceIds": ["resource-git"],
6
+ "policyVersion": 9,
7
+ "status": "active",
8
+ "issuedAt": "2026-09-02T08:00:00Z",
9
+ "expiresAt": "2026-09-02T08:15:00Z"
10
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "resource-lease-01",
3
+ "sessionId": "session-01",
4
+ "subjectId": "user-01",
5
+ "deviceId": "device-01",
6
+ "resourceIds": ["resource-git"],
7
+ "policyVersion": 9,
8
+ "status": "active",
9
+ "issuedAt": "2026-09-02T08:00:00Z",
10
+ "expiresAt": "2026-09-02T08:15:00Z"
11
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "subjectType": "user",
3
+ "subjectId": "user-123",
4
+ "scopeType": "delivery",
5
+ "role": "developer",
6
+ "enabled": true
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "subjectType": "team",
3
+ "subjectId": "team-123",
4
+ "scopeType": "platform",
5
+ "role": "operator",
6
+ "enabled": true
7
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "subjectType": "team",
3
+ "subjectId": "team-123",
4
+ "scopeType": "platform",
5
+ "clusterIds": ["cluster-123"],
6
+ "role": "operator",
7
+ "enabled": true
8
+ }
@@ -5,6 +5,10 @@
5
5
  "description": "Command-line client for Soha.",
6
6
  "publisher": "OpenSoha",
7
7
  "category": "Developer Tools",
8
+ "tenantId": "default",
9
+ "workspaceId": "default",
10
+ "visibility": "workspace",
11
+ "status": "ready",
8
12
  "version": "0.1.0",
9
13
  "platform": "darwin",
10
14
  "arch": "arm64",
@@ -12,6 +16,8 @@
12
16
  "sizeBytes": 1048576,
13
17
  "sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
14
18
  "downloadPath": "/api/v1/software/packages/pkg-01j9z3m4w8n2/download",
19
+ "downloadCount": 12,
20
+ "storageIntegrationId": "software-object-storage",
15
21
  "createdAt": "2026-08-08T00:00:00Z",
16
22
  "updatedAt": "2026-08-08T00:00:00Z"
17
23
  }
@@ -0,0 +1,6 @@
1
+ {
2
+ "id": "audit-01j9z3m4w8n2",
3
+ "actorId": "user-01j9z3m4w8n2",
4
+ "downloadedAt": "2026-08-27T08:00:00Z",
5
+ "durationMs": -1
6
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "audit-01j9z3m4w8n2",
3
+ "actorId": "user-01j9z3m4w8n2",
4
+ "actorName": "OpenSoha",
5
+ "downloadedAt": "2026-08-27T08:00:00Z",
6
+ "durationMs": 245,
7
+ "sourceIp": "127.0.0.1"
8
+ }
@@ -4,9 +4,13 @@
4
4
  "description": "Desktop client for Soha.",
5
5
  "publisher": "OpenSoha",
6
6
  "category": "Developer Tools",
7
+ "tenantId": "default",
8
+ "workspaceId": "default",
9
+ "visibility": "workspace",
7
10
  "version": "0.2.0",
8
11
  "platform": "darwin",
9
12
  "arch": "arm64",
13
+ "storageIntegrationId": "software-object-storage",
10
14
  "url": "https://downloads.opensoha.dev/soha-desktop-0.2.0-arm64.dmg",
11
15
  "fileName": "soha-desktop-0.2.0-arm64.dmg"
12
16
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "backend": "filesystem",
2
+ "backend": "s3",
3
3
  "objectCount": -1,
4
4
  "totalBytes": -1,
5
5
  "items": []
@@ -1,5 +1,12 @@
1
1
  {
2
- "backend": "filesystem",
2
+ "backend": "s3",
3
+ "integrationId": "software-object-storage",
4
+ "providerType": "s3",
5
+ "endpoint": "https://minio.example.com",
6
+ "bucket": "soha-software",
7
+ "region": "us-east-1",
8
+ "healthStatus": "healthy",
9
+ "lastCheckedAt": "2026-08-25T00:00:00Z",
3
10
  "objectCount": 1,
4
11
  "totalBytes": 1048576,
5
12
  "items": [
@@ -8,6 +15,10 @@
8
15
  "softwareId": "soha-cli",
9
16
  "name": "Soha CLI",
10
17
  "publisher": "OpenSoha",
18
+ "tenantId": "default",
19
+ "workspaceId": "default",
20
+ "visibility": "workspace",
21
+ "status": "ready",
11
22
  "version": "0.1.0",
12
23
  "platform": "darwin",
13
24
  "arch": "arm64",
@@ -15,6 +26,7 @@
15
26
  "sizeBytes": 1048576,
16
27
  "sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
17
28
  "downloadPath": "/api/v1/software/packages/pkg-01j9z3m4w8n2/download",
29
+ "storageIntegrationId": "software-object-storage",
18
30
  "createdAt": "2026-08-08T00:00:00Z",
19
31
  "updatedAt": "2026-08-08T00:00:00Z"
20
32
  }
@@ -0,0 +1,5 @@
1
+ {
2
+ "category": "storage",
3
+ "providerType": "s3",
4
+ "enabled": true
5
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "category": "storage",
3
+ "providerType": "s3",
4
+ "name": "Software object storage",
5
+ "description": "S3-compatible storage for managed software packages.",
6
+ "enabled": true,
7
+ "configuration": [
8
+ { "key": "endpoint", "value": "https://minio.example.com" },
9
+ { "key": "bucket", "value": "soha-software" },
10
+ { "key": "region", "value": "us-east-1" },
11
+ { "key": "path_style", "value": "true" },
12
+ { "key": "allow_private", "value": "false" }
13
+ ],
14
+ "credentials": [
15
+ { "key": "access_key_id", "value": "fixture-access-key" },
16
+ { "key": "secret_access_key", "value": "fixture-secret-key" }
17
+ ]
18
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "displayName": "Ada Lovelace",
3
+ "email": "ada@example.com",
4
+ "avatarFit": "stretch"
5
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "displayName": "Ada Lovelace"
3
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "displayName": "Ada Lovelace",
3
+ "email": "ada@example.com",
4
+ "phone": "+86 138 0013 8000",
5
+ "avatarUrl": "https://example.com/avatar.png",
6
+ "avatarFit": "contain"
7
+ }