@opensoha/contracts 0.1.16 → 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 (139) 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 +529 -1
  6. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  7. package/compat/openapi-loose-boundaries-0.1.0.json +1 -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/AnnouncementReceiptPageEnvelope/invalid/missing-read-count.json +9 -0
  44. package/fixtures/openapi/AnnouncementReceiptPageEnvelope/valid/read-and-unread.json +28 -0
  45. package/fixtures/openapi/EndpointDevice/invalid/missing-owner.json +8 -0
  46. package/fixtures/openapi/EndpointDevice/valid/active.json +35 -0
  47. package/fixtures/openapi/EndpointDeviceRegistrationInput/invalid/client-owned-status.json +5 -0
  48. package/fixtures/openapi/EndpointDeviceRegistrationInput/invalid/oversized-network-inventory.json +18 -0
  49. package/fixtures/openapi/EndpointDeviceRegistrationInput/valid/macos.json +28 -0
  50. package/fixtures/openapi/LLMUpstreamTestResultEnvelope/invalid/models-not-array.json +9 -0
  51. package/fixtures/openapi/LLMUpstreamTestResultEnvelope/valid/discovered-models.json +11 -0
  52. package/fixtures/openapi/NetworkAccessGrant/invalid/token-digest.json +15 -0
  53. package/fixtures/openapi/NetworkAccessGrant/valid/issued.json +14 -0
  54. package/fixtures/openapi/NetworkAccessGrantInput/invalid/no-resources.json +7 -0
  55. package/fixtures/openapi/NetworkAccessGrantInput/valid/direct-ztna.json +8 -0
  56. package/fixtures/openapi/NetworkAccessGrantSecret/invalid/short-token.json +17 -0
  57. package/fixtures/openapi/NetworkAccessGrantSecret/valid/issued.json +17 -0
  58. package/fixtures/openapi/NetworkAccessPolicy/invalid/missing-version.json +20 -0
  59. package/fixtures/openapi/NetworkAccessPolicy/valid/published-draft.json +21 -0
  60. package/fixtures/openapi/NetworkAccessPolicyInput/invalid/duplicate-team.json +17 -0
  61. package/fixtures/openapi/NetworkAccessPolicyInput/valid/team-and-tag-allow.json +17 -0
  62. package/fixtures/openapi/NetworkConflictAnalysisRequest/invalid/ipv6-range.json +9 -0
  63. package/fixtures/openapi/NetworkConflictAnalysisRequest/valid/runtime-ranges.json +15 -0
  64. package/fixtures/openapi/NetworkConnectionOption/invalid/secret.json +10 -0
  65. package/fixtures/openapi/NetworkConnectionOption/valid/wifi.json +9 -0
  66. package/fixtures/openapi/NetworkConnectionOption/valid/wired.json +8 -0
  67. package/fixtures/openapi/NetworkGateway/invalid/missing-site.json +7 -0
  68. package/fixtures/openapi/NetworkGateway/valid/online.json +23 -0
  69. package/fixtures/openapi/NetworkGatewayInput/invalid/default-route-overlay.json +13 -0
  70. package/fixtures/openapi/NetworkGatewayInput/valid/routed.json +14 -0
  71. package/fixtures/openapi/NetworkLease/invalid/empty-cidrs.json +12 -0
  72. package/fixtures/openapi/NetworkLease/valid/active.json +12 -0
  73. package/fixtures/openapi/NetworkMihomoProfile/invalid/subscription-leak.json +20 -0
  74. package/fixtures/openapi/NetworkMihomoProfile/valid/managed.json +21 -0
  75. package/fixtures/openapi/NetworkMihomoProfileInput/invalid/app-subscription-secret.json +14 -0
  76. package/fixtures/openapi/NetworkMihomoProfileInput/invalid/manual-node-with-subscription.json +20 -0
  77. package/fixtures/openapi/NetworkMihomoProfileInput/valid/app-subscription.json +14 -0
  78. package/fixtures/openapi/NetworkMihomoProfileInput/valid/managed.json +16 -0
  79. package/fixtures/openapi/NetworkMihomoProfileInput/valid/manual-node.json +21 -0
  80. package/fixtures/openapi/NetworkNASBinding/invalid/secret.json +13 -0
  81. package/fixtures/openapi/NetworkNASBinding/valid/default.json +16 -0
  82. package/fixtures/openapi/NetworkNASBindingInput/invalid/secret.json +10 -0
  83. package/fixtures/openapi/NetworkNASBindingInput/valid/default.json +13 -0
  84. package/fixtures/openapi/NetworkPolicyPreviewRequest/invalid/unknown-mode.json +6 -0
  85. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-direct-ztna.json +6 -0
  86. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-vpn-ztna.json +6 -0
  87. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/external-vpn.json +6 -0
  88. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/internal-direct.json +7 -0
  89. package/fixtures/openapi/NetworkPolicyPreviewRequest/valid/internal-ztna.json +7 -0
  90. package/fixtures/openapi/NetworkPolicyPreviewResult/invalid/bypass-path.json +9 -0
  91. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/onboarding.json +10 -0
  92. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/protected-broad-path-denied.json +9 -0
  93. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/protected-resource.json +9 -0
  94. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/quarantine.json +10 -0
  95. package/fixtures/openapi/NetworkPolicyPreviewResult/valid/restricted.json +10 -0
  96. package/fixtures/openapi/NetworkPolicySnapshot/invalid/zero-version.json +7 -0
  97. package/fixtures/openapi/NetworkPolicySnapshot/valid/published.json +7 -0
  98. package/fixtures/openapi/NetworkResourceInput/invalid/invalid-port.json +10 -0
  99. package/fixtures/openapi/NetworkResourceInput/valid/protected-cidr.json +10 -0
  100. package/fixtures/openapi/NetworkRuntimeEnrollmentInput/invalid/excessive-ttl.json +7 -0
  101. package/fixtures/openapi/NetworkRuntimeEnrollmentInput/valid/endpoint.json +7 -0
  102. package/fixtures/openapi/NetworkRuntimeEnrollmentSecret/invalid/short-token.json +15 -0
  103. package/fixtures/openapi/NetworkRuntimeEnrollmentSecret/valid/pending.json +15 -0
  104. package/fixtures/openapi/NetworkSession/invalid/unknown-status.json +14 -0
  105. package/fixtures/openapi/NetworkSession/valid/restricted-vpn-ztna.json +16 -0
  106. package/fixtures/openapi/NetworkSessionActionExecuteInput/invalid/short-hash.json +6 -0
  107. package/fixtures/openapi/NetworkSessionActionExecuteInput/valid/restrict.json +6 -0
  108. package/fixtures/openapi/NetworkSessionActionInput/invalid/unknown-action.json +5 -0
  109. package/fixtures/openapi/NetworkSessionActionInput/valid/restrict.json +5 -0
  110. package/fixtures/openapi/NetworkSessionActionPlan/invalid/missing-hash.json +12 -0
  111. package/fixtures/openapi/NetworkSessionActionPlan/valid/fallback-disconnect.json +13 -0
  112. package/fixtures/openapi/NetworkSessionCommand/invalid/unknown-status.json +14 -0
  113. package/fixtures/openapi/NetworkSessionCommand/valid/pending.json +14 -0
  114. package/fixtures/openapi/NetworkSiteInput/invalid/unknown-status.json +4 -0
  115. package/fixtures/openapi/NetworkSiteInput/valid/shanghai.json +5 -0
  116. package/fixtures/openapi/NetworkSiteProfileBinding/invalid/vlan.json +9 -0
  117. package/fixtures/openapi/NetworkSiteProfileBinding/valid/default.json +10 -0
  118. package/fixtures/openapi/NetworkSiteProfileBindingInput/invalid/timeout.json +7 -0
  119. package/fixtures/openapi/NetworkSiteProfileBindingInput/valid/default.json +7 -0
  120. package/fixtures/openapi/NetworkSpaceInput/invalid/empty-cidrs.json +6 -0
  121. package/fixtures/openapi/NetworkSpaceInput/invalid/malformed-cidr.json +6 -0
  122. package/fixtures/openapi/NetworkSpaceInput/valid/corp.json +6 -0
  123. package/fixtures/openapi/NetworkTelemetrySummary/invalid/raw-destination.json +29 -0
  124. package/fixtures/openapi/NetworkTelemetrySummary/valid/proxy-flow.json +36 -0
  125. package/fixtures/openapi/ResourceLease/invalid/missing-session.json +10 -0
  126. package/fixtures/openapi/ResourceLease/valid/active.json +11 -0
  127. package/gen/go/sohaapi/client.go +1 -1
  128. package/gen/go/sohaapi/types.go +2042 -58
  129. package/gen/ts/sohaapi/index.ts +3160 -0
  130. package/network/README.md +116 -0
  131. package/network/network-ingest-event.schema.json +187 -0
  132. package/network/network-radius-accounting.schema.json +41 -0
  133. package/network/network-runtime-protocol.schema.json +752 -0
  134. package/network/schema.go +26 -0
  135. package/network/schema_test.go +22 -0
  136. package/openapi/soha-api.json +27021 -19780
  137. package/openapi/soha-api.yaml +11422 -8749
  138. package/openapi/spec_generated.go +3 -3
  139. package/package.json +5 -1
@@ -0,0 +1,33 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-direct-ztna-result-0001",
4
+ "messageType": "vpn.connect.result",
5
+ "producerId": "network-control",
6
+ "runtimeId": "endpoint-alice",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-09-02T08:00:00Z",
9
+ "expiresAt": "2026-09-02T08:05:00Z",
10
+ "payload": {
11
+ "requestId": "direct-ztna-request-0001",
12
+ "decision": "allow",
13
+ "reasonCode": "policy_allowed",
14
+ "sessionId": "session-direct-ztna-0001",
15
+ "gatewayId": "gateway-site-a",
16
+ "configurationVersion": 14,
17
+ "policyVersion": 7,
18
+ "validUntil": "2026-09-02T08:05:00Z",
19
+ "networkLeases": [],
20
+ "resourceLeases": [
21
+ {
22
+ "id": "resource-lease-0001",
23
+ "sessionId": "session-direct-ztna-0001",
24
+ "subjectId": "user-alice",
25
+ "deviceId": "device-alice-laptop",
26
+ "resourceIds": ["resource-payroll"],
27
+ "policyVersion": 7,
28
+ "issuedAt": "2026-09-02T08:00:00Z",
29
+ "expiresAt": "2026-09-02T08:05:00Z"
30
+ }
31
+ ]
32
+ }
33
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-internal-ztna-connect",
4
+ "messageType": "vpn.connect.request",
5
+ "producerId": "endpoint-1",
6
+ "runtimeId": "endpoint-1",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-09-03T08:00:00Z",
9
+ "expiresAt": "2026-09-03T08:01:00Z",
10
+ "payload": {
11
+ "requestId": "request-internal-ztna",
12
+ "siteId": "site-hq",
13
+ "networkSpaceId": "space-corp",
14
+ "mode": "internal_ztna",
15
+ "resourceIds": ["resource-payroll"],
16
+ "accessGrantId": "grant-payroll",
17
+ "accessGrantToken": "YIaq5kG3s-x3KpzJc7E3u2lDscGxdxyup08ngBRWm2Y"
18
+ }
19
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-config-mihomo-app-0001",
4
+ "messageType": "configuration.desired",
5
+ "producerId": "network-control",
6
+ "runtimeId": "endpoint-bob",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-09-03T08:00:00Z",
9
+ "expiresAt": "2026-09-03T08:05:00Z",
10
+ "payload": {
11
+ "configurationVersion": 3,
12
+ "policyVersion": 7,
13
+ "validUntil": "2026-09-03T08:05:00Z",
14
+ "accessProfile": "full",
15
+ "protectedResourceIds": [],
16
+ "networkLeases": [],
17
+ "resourceLeases": [],
18
+ "mihomo": {
19
+ "mode": "app_subscription",
20
+ "profileId": "profile-personal",
21
+ "profileRevision": 1,
22
+ "mixedPort": 7890,
23
+ "controllerPort": 9090,
24
+ "dnsMode": "fake_ip",
25
+ "fakeIpRange": "198.18.0.0/15",
26
+ "selectorGroup": "SOHA",
27
+ "bypassCidrs": [],
28
+ "bypassHosts": ["network-control.example.com"],
29
+ "failClosed": false
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-config-mihomo-manual-0001",
4
+ "messageType": "configuration.desired",
5
+ "producerId": "network-control",
6
+ "runtimeId": "endpoint-alice",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-09-03T08:00:00Z",
9
+ "expiresAt": "2026-09-03T08:05:00Z",
10
+ "payload": {
11
+ "configurationVersion": 14,
12
+ "policyVersion": 7,
13
+ "validUntil": "2026-09-03T08:05:00Z",
14
+ "accessProfile": "full",
15
+ "protectedResourceIds": [],
16
+ "networkLeases": [],
17
+ "resourceLeases": [],
18
+ "mihomo": {
19
+ "mode": "managed_follow",
20
+ "sourceType": "manual_node",
21
+ "profileId": "profile-branch-egress",
22
+ "profileRevision": 1,
23
+ "mixedPort": 7890,
24
+ "controllerPort": 9090,
25
+ "dnsMode": "disabled",
26
+ "selectorGroup": "SOHA",
27
+ "bypassCidrs": [],
28
+ "bypassHosts": ["network-control.example.com"],
29
+ "failClosed": true
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-config-mihomo-0001",
4
+ "messageType": "configuration.desired",
5
+ "producerId": "network-control",
6
+ "runtimeId": "endpoint-alice",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-09-03T08:00:00Z",
9
+ "expiresAt": "2026-09-03T08:05:00Z",
10
+ "payload": {
11
+ "configurationVersion": 13,
12
+ "policyVersion": 7,
13
+ "validUntil": "2026-09-03T08:05:00Z",
14
+ "accessProfile": "full",
15
+ "protectedResourceIds": ["resource-payroll"],
16
+ "networkLeases": [{
17
+ "id": "network-lease-0001",
18
+ "sessionId": "session-0001",
19
+ "subjectId": "user-alice",
20
+ "deviceId": "device-alice-laptop",
21
+ "networkSpaceId": "space-site-a",
22
+ "cidrs": ["10.20.0.0/16"],
23
+ "policyVersion": 7,
24
+ "issuedAt": "2026-09-03T08:00:00Z",
25
+ "expiresAt": "2026-09-03T08:05:00Z"
26
+ }],
27
+ "resourceLeases": [],
28
+ "wireguard": {
29
+ "role": "endpoint",
30
+ "interfaceName": "soha0",
31
+ "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
32
+ "addresses": ["100.96.10.2/32"],
33
+ "mtu": 1380,
34
+ "routingMode": "routed",
35
+ "firewallDefault": "deny",
36
+ "peers": [{
37
+ "runtimeId": "gateway-site-a",
38
+ "publicKey": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=",
39
+ "endpointHost": "vpn.example.com",
40
+ "endpointPort": 51820,
41
+ "allowedIPs": ["10.20.0.0/16"],
42
+ "persistentKeepaliveSeconds": 25
43
+ }],
44
+ "routes": ["10.20.0.0/16"],
45
+ "dnsServers": ["10.20.0.53"],
46
+ "firewallRules": [{
47
+ "id": "allow-network-lease-0001",
48
+ "effect": "allow",
49
+ "leaseId": "network-lease-0001",
50
+ "sourceCidr": "100.96.10.2/32",
51
+ "destinationCidr": "10.20.0.0/16",
52
+ "protocol": "any",
53
+ "expiresAt": "2026-09-03T08:05:00Z"
54
+ }]
55
+ },
56
+ "mihomo": {
57
+ "mode": "managed_follow",
58
+ "profileId": "profile-corporate-egress",
59
+ "profileRevision": 4,
60
+ "mixedPort": 7890,
61
+ "controllerPort": 9090,
62
+ "dnsMode": "disabled",
63
+ "selectorGroup": "SOHA",
64
+ "selectedProxy": "corporate-hk",
65
+ "bypassCidrs": ["10.20.0.0/16"],
66
+ "bypassHosts": ["network-control.example.com", "vpn.example.com"],
67
+ "failClosed": true
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-nas-authorize-0001",
4
+ "messageType": "nas.authorization.request",
5
+ "producerId": "freeradius-site-a",
6
+ "runtimeId": "freeradius-site-a",
7
+ "runtimeKind": "nas",
8
+ "occurredAt": "2026-09-02T08:00:00Z",
9
+ "expiresAt": "2026-09-02T08:00:05Z",
10
+ "payload": {
11
+ "requestId": "radius-request-0001",
12
+ "nasId": "nas-site-a-wifi",
13
+ "subjectId": "user-alice",
14
+ "stationId": "AA-BB-CC-DD-EE-FF",
15
+ "authenticationMethod": "eap-tls",
16
+ "clientCertificateSerial": "753484ff6e444ae9d86814989e85cb2fdd462193",
17
+ "clientCertificateAuthorityKeyId": "E9:00:0C:AE:78:0F:99:45:07:FF:4D:B0:49:E4:20:84:C7:5A:7A:BA"
18
+ }
19
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-nas-authorize-result-0001",
4
+ "messageType": "nas.authorization.result",
5
+ "producerId": "network-control",
6
+ "runtimeId": "freeradius-site-a",
7
+ "runtimeKind": "nas",
8
+ "occurredAt": "2026-09-02T08:00:01Z",
9
+ "expiresAt": "2026-09-02T08:00:06Z",
10
+ "payload": {
11
+ "requestId": "radius-request-0001",
12
+ "sessionId": "session-0001",
13
+ "decision": "allow",
14
+ "accessProfile": "full",
15
+ "policyVersion": 7,
16
+ "validUntil": "2026-09-02T09:00:00Z",
17
+ "reasonCode": "policy_allowed",
18
+ "radiusAttributes": {
19
+ "vlanId": 20,
20
+ "filterId": "soha-full",
21
+ "sessionTimeoutSeconds": 3600
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-nas-command-result-0001",
4
+ "messageType": "nas.session.command.result",
5
+ "producerId": "freeradius-site-a",
6
+ "runtimeId": "freeradius-site-a",
7
+ "runtimeKind": "nas",
8
+ "occurredAt": "2026-09-02T08:10:02Z",
9
+ "expiresAt": "2026-09-02T08:10:07Z",
10
+ "payload": {
11
+ "commandId": "coa-command-0001",
12
+ "sessionId": "session-0001",
13
+ "status": "applied",
14
+ "reasonCode": "coa_ack",
15
+ "completedAt": "2026-09-02T08:10:02Z"
16
+ }
17
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-nas-command-0001",
4
+ "messageType": "nas.session.command",
5
+ "producerId": "network-control",
6
+ "runtimeId": "freeradius-site-a",
7
+ "runtimeKind": "nas",
8
+ "occurredAt": "2026-09-02T08:10:00Z",
9
+ "expiresAt": "2026-09-02T08:10:30Z",
10
+ "payload": {
11
+ "commandId": "coa-command-0001",
12
+ "sessionId": "session-0001",
13
+ "nasId": "nas-site-a-wifi",
14
+ "subjectId": "user-0001",
15
+ "deviceId": "device-0001",
16
+ "action": "coa",
17
+ "targetAccessProfile": "quarantine",
18
+ "policyVersion": 8,
19
+ "effectiveAt": "2026-09-02T08:10:00Z",
20
+ "reasonCode": "device_non_compliant",
21
+ "radiusAttributes": {
22
+ "vlanId": 90,
23
+ "filterId": "soha-quarantine",
24
+ "sessionTimeoutSeconds": 300
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-vpn-connect-0001",
4
+ "messageType": "vpn.connect.request",
5
+ "producerId": "endpoint-alice",
6
+ "runtimeId": "endpoint-alice",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-09-02T08:00:00Z",
9
+ "expiresAt": "2026-09-02T08:05:00Z",
10
+ "payload": {
11
+ "requestId": "vpn-request-0001",
12
+ "siteId": "site-shanghai",
13
+ "networkSpaceId": "space-site-a",
14
+ "gatewayId": "gateway-site-b",
15
+ "mode": "external_vpn"
16
+ }
17
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-vpn-connect-result-0001",
4
+ "messageType": "vpn.connect.result",
5
+ "producerId": "network-control",
6
+ "runtimeId": "endpoint-alice",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-09-02T08:00:00Z",
9
+ "expiresAt": "2026-09-02T08:05:00Z",
10
+ "payload": {
11
+ "requestId": "vpn-request-0001",
12
+ "decision": "allow",
13
+ "reasonCode": "policy_allowed",
14
+ "sessionId": "session-vpn-0001",
15
+ "gatewayId": "gateway-site-a",
16
+ "configurationVersion": 13,
17
+ "policyVersion": 7,
18
+ "validUntil": "2026-09-02T08:05:00Z",
19
+ "networkLeases": [
20
+ {
21
+ "id": "network-lease-0001",
22
+ "sessionId": "session-vpn-0001",
23
+ "subjectId": "user-alice",
24
+ "deviceId": "device-alice-laptop",
25
+ "networkSpaceId": "space-site-a",
26
+ "cidrs": ["10.20.0.0/16"],
27
+ "policyVersion": 7,
28
+ "issuedAt": "2026-09-02T08:00:00Z",
29
+ "expiresAt": "2026-09-02T08:05:00Z"
30
+ }
31
+ ],
32
+ "resourceLeases": []
33
+ }
34
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-enroll-wireguard-0001",
4
+ "messageType": "runtime.enroll.request",
5
+ "producerId": "endpoint-alice",
6
+ "runtimeId": "endpoint-alice",
7
+ "runtimeKind": "endpoint",
8
+ "occurredAt": "2026-09-02T08:00:00Z",
9
+ "expiresAt": "2026-09-02T08:05:00Z",
10
+ "payload": {
11
+ "enrollmentId": "enrollment-alice",
12
+ "challengeId": "challenge-alice",
13
+ "deviceId": "device-alice-laptop",
14
+ "devicePublicKey": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA7qY8R9gAwRQmJau0p7uB8mVJwA6m3i3zYvRrV7lIl1E=\n-----END PUBLIC KEY-----",
15
+ "wireguardPublicKey": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=",
16
+ "platform": "windows",
17
+ "clientVersion": "0.2.0",
18
+ "capabilities": ["wireguard", "route-coordinator", "dns-coordinator"]
19
+ }
20
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "schemaVersion": "network-runtime/v1alpha1",
3
+ "messageId": "msg-config-site-link-0001",
4
+ "messageType": "configuration.desired",
5
+ "producerId": "network-control-default",
6
+ "runtimeId": "gateway-site-b",
7
+ "runtimeKind": "gateway",
8
+ "occurredAt": "2026-09-03T08:00:00Z",
9
+ "expiresAt": "2026-09-03T08:05:00Z",
10
+ "payload": {
11
+ "configurationVersion": 13,
12
+ "policyVersion": 7,
13
+ "validUntil": "2026-09-03T08:05:00Z",
14
+ "accessProfile": "full",
15
+ "protectedResourceIds": [],
16
+ "networkLeases": [],
17
+ "resourceLeases": [],
18
+ "wireguard": {
19
+ "role": "gateway",
20
+ "interfaceName": "soha0",
21
+ "publicKey": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=",
22
+ "addresses": ["100.97.0.1/32"],
23
+ "listenPort": 51821,
24
+ "mtu": 1380,
25
+ "routingMode": "routed",
26
+ "firewallDefault": "deny",
27
+ "peers": [{
28
+ "runtimeId": "gateway-site-a",
29
+ "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
30
+ "endpointHost": "vpn-a.example.com",
31
+ "endpointPort": 51820,
32
+ "allowedIPs": ["100.96.0.0/24", "10.20.0.0/16", "10.30.0.0/16"],
33
+ "persistentKeepaliveSeconds": 25
34
+ }],
35
+ "routes": ["100.96.0.0/24", "10.20.0.0/16", "10.30.0.0/16"],
36
+ "firewallRules": [{
37
+ "id": "site-a-to-b",
38
+ "effect": "allow",
39
+ "siteLinkRuntimeId": "gateway-site-a",
40
+ "direction": "from_wireguard",
41
+ "sourceCidr": "10.20.0.0/16",
42
+ "destinationCidr": "10.40.0.0/16",
43
+ "protocol": "any",
44
+ "expiresAt": "2026-09-03T08:05:00Z"
45
+ }]
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "data": {
3
+ "items": [],
4
+ "total": 0,
5
+ "page": 1,
6
+ "pageSize": 15,
7
+ "unreadCount": 0
8
+ }
9
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "data": {
3
+ "items": [
4
+ {
5
+ "userId": "3f4b8782-566f-4b55-9b86-791bf24ca5e8",
6
+ "username": "ada",
7
+ "displayName": "Ada",
8
+ "email": "ada@example.test",
9
+ "teamNames": ["研发中心"],
10
+ "isRead": true,
11
+ "readAt": "2026-09-04T08:00:00Z"
12
+ },
13
+ {
14
+ "userId": "5b550b5a-f8c8-47a7-ab42-57c030d30c3e",
15
+ "username": "lin",
16
+ "displayName": "Lin",
17
+ "email": "lin@example.test",
18
+ "teamNames": [],
19
+ "isRead": false
20
+ }
21
+ ],
22
+ "total": 2,
23
+ "page": 1,
24
+ "pageSize": 15,
25
+ "readCount": 1,
26
+ "unreadCount": 1
27
+ }
28
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "device-01",
3
+ "name": "Alice Windows",
4
+ "status": "active",
5
+ "platform": "windows",
6
+ "createdAt": "2026-09-02T08:00:00Z",
7
+ "updatedAt": "2026-09-02T08:00:00Z"
8
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "id": "device-01",
3
+ "name": "Alice Windows",
4
+ "ownerUserId": "user-01",
5
+ "status": "active",
6
+ "platform": "windows",
7
+ "deviceType": "laptop",
8
+ "ownershipType": "company",
9
+ "postureStatus": "compliant",
10
+ "postureVersion": 3,
11
+ "credentialGeneration": 1,
12
+ "reportedFacts": {
13
+ "osName": "Windows",
14
+ "osVersion": "11 Pro",
15
+ "osBuild": "26100",
16
+ "architecture": "amd64",
17
+ "manufacturer": "Lenovo",
18
+ "model": "ThinkPad T14",
19
+ "serialNumber": "PF000001",
20
+ "agentVersion": "0.2.0",
21
+ "collectedAt": "2026-09-02T07:59:00Z",
22
+ "networkInterfaces": [
23
+ {
24
+ "name": "Ethernet",
25
+ "kind": "physical",
26
+ "status": "up",
27
+ "macAddress": "00:11:22:33:44:55",
28
+ "ipv4Addresses": ["10.0.12.44"],
29
+ "ipv6Addresses": ["fe80::1"]
30
+ }
31
+ ]
32
+ },
33
+ "createdAt": "2026-09-02T08:00:00Z",
34
+ "updatedAt": "2026-09-02T08:00:00Z"
35
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "Shanchui's Mac",
3
+ "platform": "darwin",
4
+ "status": "active"
5
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "Mac",
3
+ "platform": "darwin",
4
+ "reportedFacts": {
5
+ "architecture": "arm64",
6
+ "agentVersion": "0.2.0",
7
+ "collectedAt": "2026-09-03T09:00:00Z",
8
+ "networkInterfaces": [
9
+ {
10
+ "name": "en0",
11
+ "kind": "physical",
12
+ "status": "up",
13
+ "ipv4Addresses": ["not-an-ip"],
14
+ "ipv6Addresses": []
15
+ }
16
+ ]
17
+ }
18
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "Shanchui's Mac",
3
+ "hostname": "shanchui-mac.local",
4
+ "platform": "darwin",
5
+ "deviceType": "laptop",
6
+ "reportedFacts": {
7
+ "osName": "macOS",
8
+ "osVersion": "15.6.1",
9
+ "osBuild": "24G90",
10
+ "architecture": "arm64",
11
+ "manufacturer": "Apple",
12
+ "model": "MacBookAir15,2",
13
+ "serialNumber": "C02TEST00001",
14
+ "agentVersion": "0.2.0",
15
+ "collectedAt": "2026-09-03T09:00:00Z",
16
+ "networkInterfaces": [
17
+ {
18
+ "name": "en0",
19
+ "displayName": "Wi-Fi",
20
+ "kind": "physical",
21
+ "status": "up",
22
+ "macAddress": "00:11:22:33:44:55",
23
+ "ipv4Addresses": ["192.168.1.10"],
24
+ "ipv6Addresses": ["fe80::1"]
25
+ }
26
+ ]
27
+ }
28
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "data": {
3
+ "status": "success",
4
+ "providerKind": "openai",
5
+ "durationMs": 42,
6
+ "modelCount": 1,
7
+ "models": "gpt-5.6-luna"
8
+ }
9
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "data": {
3
+ "status": "success",
4
+ "providerKind": "openai",
5
+ "httpStatus": 200,
6
+ "durationMs": 42,
7
+ "modelCount": 2,
8
+ "models": ["gpt-5.6-luna", "gpt-5.6-sol"],
9
+ "checkedAt": "2026-09-02T03:04:05Z"
10
+ }
11
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "id": "grant-payroll-01",
3
+ "subjectId": "f7f87a34-077d-4601-af8d-c142a34755f2",
4
+ "deviceId": "device-shanghai-001",
5
+ "siteId": "site-shanghai",
6
+ "networkSpaceId": "space-corp",
7
+ "mode": "external_direct_ztna",
8
+ "resourceIds": ["resource-payroll"],
9
+ "policyVersion": 12,
10
+ "status": "issued",
11
+ "createdBy": "f7f87a34-077d-4601-af8d-c142a34755f2",
12
+ "createdAt": "2026-09-03T08:00:00Z",
13
+ "expiresAt": "2026-09-03T08:05:00Z",
14
+ "tokenHash": "sha256:secret"
15
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "id": "grant-payroll-01",
3
+ "subjectId": "f7f87a34-077d-4601-af8d-c142a34755f2",
4
+ "deviceId": "device-shanghai-001",
5
+ "siteId": "site-shanghai",
6
+ "networkSpaceId": "space-corp",
7
+ "mode": "external_direct_ztna",
8
+ "resourceIds": ["resource-payroll"],
9
+ "policyVersion": 12,
10
+ "status": "issued",
11
+ "createdBy": "f7f87a34-077d-4601-af8d-c142a34755f2",
12
+ "createdAt": "2026-09-03T08:00:00Z",
13
+ "expiresAt": "2026-09-03T08:05:00Z"
14
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "deviceId": "device-shanghai-001",
3
+ "siteId": "site-shanghai",
4
+ "networkSpaceId": "space-corp",
5
+ "mode": "external_direct_ztna",
6
+ "resourceIds": []
7
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "deviceId": "device-shanghai-001",
3
+ "siteId": "site-shanghai",
4
+ "networkSpaceId": "space-corp",
5
+ "mode": "external_direct_ztna",
6
+ "resourceIds": ["resource-payroll"],
7
+ "ttlSeconds": 300
8
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "grant": {
3
+ "id": "grant-payroll-01",
4
+ "subjectId": "f7f87a34-077d-4601-af8d-c142a34755f2",
5
+ "deviceId": "device-shanghai-001",
6
+ "siteId": "site-shanghai",
7
+ "networkSpaceId": "space-corp",
8
+ "mode": "external_direct_ztna",
9
+ "resourceIds": ["resource-payroll"],
10
+ "policyVersion": 12,
11
+ "status": "issued",
12
+ "createdBy": "f7f87a34-077d-4601-af8d-c142a34755f2",
13
+ "createdAt": "2026-09-03T08:00:00Z",
14
+ "expiresAt": "2026-09-03T08:05:00Z"
15
+ },
16
+ "token": "too-short"
17
+ }