@mhome/app-facade-protocol 1.49.1 → 1.57.0
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/README.md +62 -3
- package/contract/pod-commissioning-v1.md +15 -16
- package/fixtures/presentation/cases.json +508 -0
- package/fixtures/routing/cases.json +192 -0
- package/manifest/app-facade.v1.json +25 -5
- package/manifest/host-provision-targets.v1.json +1 -1
- package/manifest/hub-targets.v1.json +1 -1
- package/manifest/pod-targets.v1.json +1 -1
- package/manifest/routing.v1.json +20 -6
- package/manifest/targets.v1.json +1 -1
- package/package.json +1 -1
- package/protocol.json +2 -1
- package/schema/facade-call.v1.schema.json +1 -1
- package/schema/facade-response.v1.schema.json +139 -0
- package/schema/pod-commission.v1.schema.json +18 -2
- package/schema/system-hosts.v1.schema.json +8 -0
package/README.md
CHANGED
|
@@ -17,6 +17,57 @@ owns public targets, request/response/event schemas, and stable operation
|
|
|
17
17
|
identity. Core-to-Node routes and provider runtime models belong to
|
|
18
18
|
`mhome-core-api` instead.
|
|
19
19
|
|
|
20
|
+
## App result contract
|
|
21
|
+
|
|
22
|
+
`control.responseDetail` selects information depth: `full` (default) returns
|
|
23
|
+
`data`, while `essential` returns YAML in `text`. It is independent of action
|
|
24
|
+
`mode` and is never copied into business input, prepared snapshots or execution
|
|
25
|
+
fingerprints. `responseFormat` and business `outputFormat` are rejected.
|
|
26
|
+
|
|
27
|
+
Final responses use exactly one of these shapes:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{"status":"success","data":{"items":[]}}
|
|
31
|
+
{"status":"success","text":"items: []\n"}
|
|
32
|
+
{"status":"partial","data":{"moved":["a"],"notMoved":[{"deviceId":"b","reason":"offline"}]}}
|
|
33
|
+
{"status":"error","error":{"code":"PRECONDITION_FAIL","message":"The object changed"}}
|
|
34
|
+
{"status":"cancelled"}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Success and partial carry exactly one of `data` or `text`. Error carries a
|
|
38
|
+
`code`, `message`, and optional `details`; success, partial and cancellation may
|
|
39
|
+
carry structured `warnings`. Resource state belongs inside data: successfully
|
|
40
|
+
reading a failed job is still a successful invocation. Partial is not complete
|
|
41
|
+
success and must remain visible to the caller. Transport admission failures keep
|
|
42
|
+
their transport status and retry metadata.
|
|
43
|
+
|
|
44
|
+
Prepare returns its fixed structured control DTO (`preparedActionId`,
|
|
45
|
+
`approvalToken`, `target`, `status`, `preview`, `expiresAt`). Commit executes the
|
|
46
|
+
stored snapshot and caches the full business result; presentation happens after
|
|
47
|
+
execution or replay. Reject returns cancellation. Response detail never changes
|
|
48
|
+
approval meaning or permission checks. Operation and HITL continuation protocols
|
|
49
|
+
are separate from this result envelope.
|
|
50
|
+
|
|
51
|
+
App UI requests full and unwraps the envelope at its transport boundary. Agent
|
|
52
|
+
and MCP public results use essential; internal workflow reads use full. The CLI
|
|
53
|
+
uses `--response-detail full|essential`, and the bundled external Skill requests
|
|
54
|
+
essential. Dashboard essential projection keeps card identity, title, type,
|
|
55
|
+
layouts and view choices, excluding renderer configuration and resource payloads.
|
|
56
|
+
Other targets currently retain their business fields in YAML; essential does not
|
|
57
|
+
promise a smaller field set for every domain. Targets own that selection.
|
|
58
|
+
|
|
59
|
+
The [response schema](schema/facade-response.v1.schema.json) and shared
|
|
60
|
+
[presentation fixtures](fixtures/presentation/cases.json) define the wire
|
|
61
|
+
invariants and cross-runtime projection checks. Domain schemas describe the
|
|
62
|
+
inner `data` DTO. `/pod/deck/*`, `/pod/talk/*` and legacy Controllers retain their
|
|
63
|
+
separate wire contracts.
|
|
64
|
+
|
|
65
|
+
The npm protocol descriptor exports this response schema as `schemas.response`.
|
|
66
|
+
Protocol verification compiles it and the Conversation execution envelope with
|
|
67
|
+
strict AJV settings, checks their shared response definition, and validates the
|
|
68
|
+
same positive/negative response fixtures used by Rust. Package staging tests
|
|
69
|
+
verify that the schema is available through the published descriptor.
|
|
70
|
+
|
|
20
71
|
`interaction_flow` exposes only the materialized current-step view and session
|
|
21
72
|
commands. Handler operations, the complete step graph, and Node routing
|
|
22
73
|
identity remain internal to MeowCore.
|
|
@@ -49,9 +100,11 @@ timings and request reasons are in `manifest/pod-targets.v1.json`; snapshots use
|
|
|
49
100
|
`schema/pod-discovery.v1.schema.json` and `schema/pod-commission.v1.schema.json`;
|
|
50
101
|
User Pod enrollment uses a one-time login approval; activation is confirmed on the paired device.
|
|
51
102
|
|
|
52
|
-
`/app/pod/list`
|
|
53
|
-
|
|
54
|
-
registrations
|
|
103
|
+
`/app/pod/list` combines the current User's personal registrations with the current
|
|
104
|
+
Space's Space-owned Pods, including offline entries. `/app/pod/rename` updates a
|
|
105
|
+
personal registration name. See [Pod directory](contract/pod-directory-v1.md). `/app/host/list` combines Host registrations with current observations and details.
|
|
106
|
+
`/app/host/directory/list` is the historical registration input used by native
|
|
107
|
+
list composition; it does not grant management access. See the
|
|
55
108
|
[Host directory contract](contract/host-directory-v1.md). Native commissioning
|
|
56
109
|
uses the existing device protocols; the Agent resumes only after verifying the
|
|
57
110
|
resulting registration. Host completion identifies both `hostId` and `env`.
|
|
@@ -109,3 +162,9 @@ Client sessions. Host inventory and operations use `/app/system/hosts/get` and
|
|
|
109
162
|
current Core. First claim is direct LAN only. See [SYSTEM.md](SYSTEM.md).
|
|
110
163
|
|
|
111
164
|
Business operation permissions are declared once in [the authorization manifest](manifest/authorization.v1.json), consumed by Core and Lion. See [business authorization](contract/authorization-v1.md).
|
|
165
|
+
|
|
166
|
+
## Matter management reads
|
|
167
|
+
|
|
168
|
+
`/app/matter/device/list` is the management inventory, grouped by Fabric node. It is distinct from the Plugin's Integration enumeration `/matter/device/list`. Its `sourceDeviceId` values identify Plugin projections, not Twin entities. Nodes without projected devices remain visible; `membershipComplete`, `inventoryComplete`, per-node completeness and `errors` describe partial observations. Lists omit endpoints and attribute payloads.
|
|
169
|
+
|
|
170
|
+
`/app/matter/fabric/node/detail` accepts 1–20 unique `matterNodeIds`, returning an ordered item result or error for each ID. The request uses string IDs without numeric coercion. See `schema/matter-management.v1.schema.json`. All `/app/matter/` operations execute through the Space's Hub irrespective of scope execution mode. Node removal is a manual UI/CLI capability, not a delegated Agent/MCP tool.
|
|
@@ -120,8 +120,13 @@ and responses are bounded to 64 KiB including encryption overhead.
|
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
`env` must match the native Client runtime (`prod`, `dev`, `e2e`).
|
|
123
|
-
`podId`
|
|
124
|
-
new session
|
|
123
|
+
`podId` and `clientMode` (`user` or `space`) are included together when activation
|
|
124
|
+
is in flight or durably completed. A new session reads both from the secure
|
|
125
|
+
device response before resuming; a missing or unknown mode fails the attempt.
|
|
126
|
+
This observes completion without issuing another credential. Native completed
|
|
127
|
+
enrollment sessions return both fields. HITL passes this receipt to its handler,
|
|
128
|
+
which verifies exactly the corresponding personal or Space enrollment source;
|
|
129
|
+
it never probes the other source or treats the mode itself as proof of success.
|
|
125
130
|
`platform` is diagnostic only. `wifiConfigured` is true when the pod kept a
|
|
126
131
|
working network across logout; the commissioner then skips the Wi-Fi steps after
|
|
127
132
|
confirming connectivity with `prov-config` status. Inside a Wi-Fi change window
|
|
@@ -249,8 +254,8 @@ accepted.
|
|
|
249
254
|
|
|
250
255
|
`podId` identifies a single approval attempt, not the durable device or authenticated
|
|
251
256
|
User. The durable `registrationId` derives from the business User and the validated
|
|
252
|
-
persistent device-key fingerprint.
|
|
253
|
-
`/
|
|
257
|
+
persistent device-key fingerprint. `/app/pod/list` returns that ID;
|
|
258
|
+
`/app/pod/rename` accepts `{registrationId, name}` with authenticated User authority.
|
|
254
259
|
Successful authentication atomically creates the registration if absent and records
|
|
255
260
|
completion on the consumed approval. Retries preserve the initial registration and
|
|
256
261
|
current display name. Unauthenticated attempts create no device-list entry.
|
|
@@ -472,19 +477,13 @@ independent and are never issued by this flow.
|
|
|
472
477
|
|
|
473
478
|
## Registered Pod list
|
|
474
479
|
|
|
475
|
-
`/app/pod/list`
|
|
476
|
-
Space
|
|
477
|
-
|
|
478
|
-
`
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
Native clients combine this result with their own discovery observations.
|
|
482
|
-
Never merge a Bluetooth short ID with a registered identity without proof.
|
|
483
|
-
This read does not issue credentials or change Pod identity.
|
|
480
|
+
The public `/app/pod/list` Facade combines all current-User personal registrations
|
|
481
|
+
and current-Space Space-owned Pod registrations. UI and tools share this result.
|
|
482
|
+
`registrationId` identifies the durable registration; it is not the enrollment
|
|
483
|
+
`podId` used by native commissioning. Connection observations are separately
|
|
484
|
+
scoped and may be unknown. See [Pod directory](pod-directory-v1.md) for fields,
|
|
485
|
+
aggregation, failure handling and personal display-name updates.
|
|
484
486
|
|
|
485
|
-
|
|
486
|
-
`appClientId` identifies a registered application client; it is not the enrollment
|
|
487
|
-
`podId` used by native commissioning. The list does not invent that association.
|
|
488
487
|
`/app/pod/enrollment/get` takes `{podId}` and returns `{podId, clientMode: "user",
|
|
489
488
|
registered}` from the authenticated user's successful receipt for that exact attempt.
|
|
490
489
|
An older registration for the same device cannot complete a different attempt.
|
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "dashboard-detail",
|
|
4
|
+
"target": "/app/dashboard/card/detail/get",
|
|
5
|
+
"data": {
|
|
6
|
+
"scopeId": "space-1",
|
|
7
|
+
"items": [
|
|
8
|
+
{
|
|
9
|
+
"cardId": "card-1",
|
|
10
|
+
"status": "found",
|
|
11
|
+
"card": {
|
|
12
|
+
"cardId": "card-1",
|
|
13
|
+
"type": "widget",
|
|
14
|
+
"title": "Power",
|
|
15
|
+
"layouts": {
|
|
16
|
+
"sm": {
|
|
17
|
+
"x": 0,
|
|
18
|
+
"y": 0,
|
|
19
|
+
"width": 2,
|
|
20
|
+
"height": 2
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"views": [
|
|
24
|
+
{
|
|
25
|
+
"id": "power",
|
|
26
|
+
"name": "Power",
|
|
27
|
+
"source": {
|
|
28
|
+
"type": "widget",
|
|
29
|
+
"baseId": "automation-1",
|
|
30
|
+
"widgetId": "widget-1"
|
|
31
|
+
},
|
|
32
|
+
"pattern": "default"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"primaryViewId": "power",
|
|
36
|
+
"widgets": [
|
|
37
|
+
{
|
|
38
|
+
"widgetId": "widget-1",
|
|
39
|
+
"name": "Power",
|
|
40
|
+
"widgetType": "DATA",
|
|
41
|
+
"dataType": "NUMBER"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"canvasId": "canvas-1"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"cardId": "gone",
|
|
49
|
+
"status": "not_found"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"status": "success",
|
|
54
|
+
"essential": {
|
|
55
|
+
"scopeId": "space-1",
|
|
56
|
+
"items": [
|
|
57
|
+
{
|
|
58
|
+
"cardId": "card-1",
|
|
59
|
+
"status": "found",
|
|
60
|
+
"card": {
|
|
61
|
+
"cardId": "card-1",
|
|
62
|
+
"type": "widget",
|
|
63
|
+
"title": "Power",
|
|
64
|
+
"layouts": {
|
|
65
|
+
"sm": {
|
|
66
|
+
"x": 0,
|
|
67
|
+
"y": 0,
|
|
68
|
+
"width": 2,
|
|
69
|
+
"height": 2
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"primaryViewId": "power",
|
|
73
|
+
"views": [
|
|
74
|
+
{
|
|
75
|
+
"id": "power",
|
|
76
|
+
"name": "Power"
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"viewCount": 1
|
|
80
|
+
},
|
|
81
|
+
"canvasId": "canvas-1"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"cardId": "gone",
|
|
85
|
+
"status": "not_found"
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"name": "brief-does-not-invent-view-count",
|
|
92
|
+
"target": "/app/dashboard/card/list",
|
|
93
|
+
"data": {
|
|
94
|
+
"cards": [
|
|
95
|
+
{
|
|
96
|
+
"cardId": "card-1",
|
|
97
|
+
"type": "entity",
|
|
98
|
+
"title": "Lamp"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"status": "success",
|
|
103
|
+
"essential": {
|
|
104
|
+
"cards": [
|
|
105
|
+
{
|
|
106
|
+
"cardId": "card-1",
|
|
107
|
+
"type": "entity",
|
|
108
|
+
"title": "Lamp"
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"name": "room-partial",
|
|
115
|
+
"target": "/app/room/devices/move",
|
|
116
|
+
"data": {
|
|
117
|
+
"moved": [
|
|
118
|
+
"a"
|
|
119
|
+
],
|
|
120
|
+
"notMoved": [
|
|
121
|
+
{
|
|
122
|
+
"deviceId": "b",
|
|
123
|
+
"reason": "offline"
|
|
124
|
+
}
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
"status": "partial",
|
|
128
|
+
"essential": {
|
|
129
|
+
"moved": [
|
|
130
|
+
"a"
|
|
131
|
+
],
|
|
132
|
+
"notMoved": [
|
|
133
|
+
{
|
|
134
|
+
"deviceId": "b",
|
|
135
|
+
"reason": "offline"
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"name": "query-resource-failed",
|
|
142
|
+
"target": "/app/plugin/enable/status",
|
|
143
|
+
"data": {
|
|
144
|
+
"status": "failed",
|
|
145
|
+
"success": false,
|
|
146
|
+
"reason": "download failed"
|
|
147
|
+
},
|
|
148
|
+
"status": "success",
|
|
149
|
+
"essential": {
|
|
150
|
+
"status": "failed",
|
|
151
|
+
"success": false,
|
|
152
|
+
"reason": "download failed"
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"name": "explicit-mutation-failed",
|
|
157
|
+
"target": "/app/room/delete",
|
|
158
|
+
"data": {
|
|
159
|
+
"success": false,
|
|
160
|
+
"message": "Room changed"
|
|
161
|
+
},
|
|
162
|
+
"status": "error",
|
|
163
|
+
"code": "OPERATION_FAILED"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"name": "camera-plugin-failed",
|
|
167
|
+
"target": "/app/plugin/camera/connection/disconnect",
|
|
168
|
+
"data": {
|
|
169
|
+
"data": {
|
|
170
|
+
"ok": false,
|
|
171
|
+
"reason": "CONNECTION_CHANGED"
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"status": "error",
|
|
175
|
+
"code": "PLUGIN_OPERATION_FAILED"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"name": "null-is-a-valid-full-value",
|
|
179
|
+
"target": "/app/test/read",
|
|
180
|
+
"data": null,
|
|
181
|
+
"status": "success",
|
|
182
|
+
"essential": null
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"name": "automation-list",
|
|
186
|
+
"target": "/app/automation/list",
|
|
187
|
+
"status": "success",
|
|
188
|
+
"data": {
|
|
189
|
+
"automations": [
|
|
190
|
+
{
|
|
191
|
+
"id": "a1",
|
|
192
|
+
"name": "Morning",
|
|
193
|
+
"description": "Turn on light",
|
|
194
|
+
"type": "TASK_FLOW",
|
|
195
|
+
"enabled": true,
|
|
196
|
+
"singleUse": false,
|
|
197
|
+
"createdAt": 1,
|
|
198
|
+
"tags": [
|
|
199
|
+
"internal"
|
|
200
|
+
]
|
|
201
|
+
}
|
|
202
|
+
]
|
|
203
|
+
},
|
|
204
|
+
"essential": {
|
|
205
|
+
"automations": [
|
|
206
|
+
{
|
|
207
|
+
"id": "a1",
|
|
208
|
+
"name": "Morning",
|
|
209
|
+
"description": "Turn on light",
|
|
210
|
+
"type": "TASK_FLOW",
|
|
211
|
+
"enabled": true,
|
|
212
|
+
"singleUse": false
|
|
213
|
+
}
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"name": "automation-detail",
|
|
219
|
+
"target": "/app/automation/detail/get",
|
|
220
|
+
"status": "success",
|
|
221
|
+
"data": {
|
|
222
|
+
"automations": [
|
|
223
|
+
{
|
|
224
|
+
"id": "a1",
|
|
225
|
+
"name": "Morning",
|
|
226
|
+
"description": "Turn on light",
|
|
227
|
+
"type": "TASK_FLOW",
|
|
228
|
+
"enabled": true,
|
|
229
|
+
"singleUse": false,
|
|
230
|
+
"hasExpire": false,
|
|
231
|
+
"usedCapabilities": [
|
|
232
|
+
"light.command.on"
|
|
233
|
+
],
|
|
234
|
+
"memberIds": [],
|
|
235
|
+
"inputVars": [
|
|
236
|
+
{
|
|
237
|
+
"name": "$room",
|
|
238
|
+
"type": "String",
|
|
239
|
+
"description": "Room"
|
|
240
|
+
}
|
|
241
|
+
],
|
|
242
|
+
"scriptHash": "source-hash",
|
|
243
|
+
"script": {
|
|
244
|
+
"script": "private source",
|
|
245
|
+
"scripts": {
|
|
246
|
+
"function": "private"
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
"updatedAt": 2,
|
|
250
|
+
"descriptionTemplate": "Turn on {! $room !}"
|
|
251
|
+
}
|
|
252
|
+
]
|
|
253
|
+
},
|
|
254
|
+
"essential": {
|
|
255
|
+
"automations": [
|
|
256
|
+
{
|
|
257
|
+
"id": "a1",
|
|
258
|
+
"name": "Morning",
|
|
259
|
+
"description": "Turn on light",
|
|
260
|
+
"type": "TASK_FLOW",
|
|
261
|
+
"enabled": true,
|
|
262
|
+
"singleUse": false,
|
|
263
|
+
"hasExpire": false,
|
|
264
|
+
"usedCapabilities": [
|
|
265
|
+
"light.command.on"
|
|
266
|
+
],
|
|
267
|
+
"memberIds": [],
|
|
268
|
+
"inputVars": [
|
|
269
|
+
{
|
|
270
|
+
"name": "$room",
|
|
271
|
+
"type": "String",
|
|
272
|
+
"description": "Room"
|
|
273
|
+
}
|
|
274
|
+
],
|
|
275
|
+
"scriptHash": "source-hash",
|
|
276
|
+
"descriptionTemplate": "Turn on {! $room !}"
|
|
277
|
+
}
|
|
278
|
+
]
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"name": "automation-now",
|
|
283
|
+
"target": "/app/automation/activity/now/list",
|
|
284
|
+
"status": "success",
|
|
285
|
+
"data": {
|
|
286
|
+
"automations": [
|
|
287
|
+
{
|
|
288
|
+
"automationId": "a1",
|
|
289
|
+
"automationName": "Morning",
|
|
290
|
+
"automationType": "TASK_FLOW",
|
|
291
|
+
"origin": "RECURRING",
|
|
292
|
+
"description": "duplicate"
|
|
293
|
+
}
|
|
294
|
+
]
|
|
295
|
+
},
|
|
296
|
+
"essential": {
|
|
297
|
+
"automations": [
|
|
298
|
+
{
|
|
299
|
+
"automationId": "a1",
|
|
300
|
+
"automationName": "Morning",
|
|
301
|
+
"automationType": "TASK_FLOW",
|
|
302
|
+
"origin": "RECURRING"
|
|
303
|
+
}
|
|
304
|
+
]
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"name": "automation-recent",
|
|
309
|
+
"target": "/app/automation/activity/recent/list",
|
|
310
|
+
"status": "success",
|
|
311
|
+
"data": {
|
|
312
|
+
"since": "10min",
|
|
313
|
+
"from": 0,
|
|
314
|
+
"until": 100,
|
|
315
|
+
"activities": [
|
|
316
|
+
{
|
|
317
|
+
"automationId": "a1",
|
|
318
|
+
"automationName": "Morning",
|
|
319
|
+
"automationType": "TASK_FLOW",
|
|
320
|
+
"origin": "RECURRING",
|
|
321
|
+
"activityType": "RUN_FAILED",
|
|
322
|
+
"timestamp": 100,
|
|
323
|
+
"instanceId": "run",
|
|
324
|
+
"threadId": 0,
|
|
325
|
+
"error": true,
|
|
326
|
+
"panic": false,
|
|
327
|
+
"actorUserId": "user",
|
|
328
|
+
"clientId": "client",
|
|
329
|
+
"description": "duplicate"
|
|
330
|
+
}
|
|
331
|
+
]
|
|
332
|
+
},
|
|
333
|
+
"essential": {
|
|
334
|
+
"since": "10min",
|
|
335
|
+
"from": 0,
|
|
336
|
+
"until": 100,
|
|
337
|
+
"activities": [
|
|
338
|
+
{
|
|
339
|
+
"automationId": "a1",
|
|
340
|
+
"automationName": "Morning",
|
|
341
|
+
"automationType": "TASK_FLOW",
|
|
342
|
+
"origin": "RECURRING",
|
|
343
|
+
"activityType": "RUN_FAILED",
|
|
344
|
+
"timestamp": 100,
|
|
345
|
+
"instanceId": "run",
|
|
346
|
+
"threadId": 0,
|
|
347
|
+
"error": true,
|
|
348
|
+
"panic": false
|
|
349
|
+
}
|
|
350
|
+
]
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"name": "automation-diagnostic-list",
|
|
355
|
+
"target": "/app/automation/diagnostic/list",
|
|
356
|
+
"status": "success",
|
|
357
|
+
"data": {
|
|
358
|
+
"diagnostics": [
|
|
359
|
+
{
|
|
360
|
+
"automationId": "a1",
|
|
361
|
+
"name": "Morning",
|
|
362
|
+
"threadId": 0,
|
|
363
|
+
"instanceId": "run",
|
|
364
|
+
"timestamp": 100,
|
|
365
|
+
"status": "failed",
|
|
366
|
+
"reportMode": "STD",
|
|
367
|
+
"logCount": 2,
|
|
368
|
+
"omittedLogs": 1,
|
|
369
|
+
"truncated": true,
|
|
370
|
+
"logsMissing": false,
|
|
371
|
+
"failure": {
|
|
372
|
+
"message": "device unavailable",
|
|
373
|
+
"code": "TIMEOUT"
|
|
374
|
+
},
|
|
375
|
+
"revision": 3,
|
|
376
|
+
"startedAt": 90,
|
|
377
|
+
"finishedAt": 100
|
|
378
|
+
}
|
|
379
|
+
]
|
|
380
|
+
},
|
|
381
|
+
"essential": {
|
|
382
|
+
"diagnostics": [
|
|
383
|
+
{
|
|
384
|
+
"automationId": "a1",
|
|
385
|
+
"name": "Morning",
|
|
386
|
+
"threadId": 0,
|
|
387
|
+
"instanceId": "run",
|
|
388
|
+
"timestamp": 100,
|
|
389
|
+
"status": "failed",
|
|
390
|
+
"reportMode": "STD",
|
|
391
|
+
"logCount": 2,
|
|
392
|
+
"omittedLogs": 1,
|
|
393
|
+
"truncated": true,
|
|
394
|
+
"logsMissing": false,
|
|
395
|
+
"failure": {
|
|
396
|
+
"message": "device unavailable",
|
|
397
|
+
"code": "TIMEOUT"
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
]
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"name": "automation-diagnostic-detail",
|
|
405
|
+
"target": "/app/automation/diagnostic/detail",
|
|
406
|
+
"status": "success",
|
|
407
|
+
"data": {
|
|
408
|
+
"diagnostic": {
|
|
409
|
+
"automationId": "a1",
|
|
410
|
+
"name": "Morning",
|
|
411
|
+
"threadId": 0,
|
|
412
|
+
"instanceId": "run",
|
|
413
|
+
"timestamp": 100,
|
|
414
|
+
"status": "failed",
|
|
415
|
+
"reportMode": "STD",
|
|
416
|
+
"logCount": 2,
|
|
417
|
+
"omittedLogs": 1,
|
|
418
|
+
"truncated": true,
|
|
419
|
+
"logsMissing": false,
|
|
420
|
+
"failure": {
|
|
421
|
+
"message": "device unavailable",
|
|
422
|
+
"code": "TIMEOUT"
|
|
423
|
+
},
|
|
424
|
+
"revision": 3,
|
|
425
|
+
"startedAt": 90,
|
|
426
|
+
"finishedAt": 100
|
|
427
|
+
},
|
|
428
|
+
"logs": [
|
|
429
|
+
{
|
|
430
|
+
"level": "INFO",
|
|
431
|
+
"message": "Invoked device",
|
|
432
|
+
"context": {
|
|
433
|
+
"id": "light"
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
"level": "ERROR",
|
|
438
|
+
"message": "Timed out"
|
|
439
|
+
}
|
|
440
|
+
]
|
|
441
|
+
},
|
|
442
|
+
"essential": {
|
|
443
|
+
"diagnostic": {
|
|
444
|
+
"automationId": "a1",
|
|
445
|
+
"name": "Morning",
|
|
446
|
+
"threadId": 0,
|
|
447
|
+
"instanceId": "run",
|
|
448
|
+
"timestamp": 100,
|
|
449
|
+
"status": "failed",
|
|
450
|
+
"reportMode": "STD",
|
|
451
|
+
"logCount": 2,
|
|
452
|
+
"omittedLogs": 1,
|
|
453
|
+
"truncated": true,
|
|
454
|
+
"logsMissing": false,
|
|
455
|
+
"failure": {
|
|
456
|
+
"message": "device unavailable",
|
|
457
|
+
"code": "TIMEOUT"
|
|
458
|
+
},
|
|
459
|
+
"revision": 3,
|
|
460
|
+
"startedAt": 90,
|
|
461
|
+
"finishedAt": 100
|
|
462
|
+
},
|
|
463
|
+
"logs": [
|
|
464
|
+
{
|
|
465
|
+
"level": "INFO",
|
|
466
|
+
"message": "Invoked device",
|
|
467
|
+
"context": {
|
|
468
|
+
"id": "light"
|
|
469
|
+
}
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
"level": "ERROR",
|
|
473
|
+
"message": "Timed out"
|
|
474
|
+
}
|
|
475
|
+
]
|
|
476
|
+
}
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
"name": "automation-snapshot-list",
|
|
480
|
+
"target": "/app/automation/snapshot/list",
|
|
481
|
+
"status": "success",
|
|
482
|
+
"data": {
|
|
483
|
+
"automationId": "a1",
|
|
484
|
+
"snapshots": [
|
|
485
|
+
{
|
|
486
|
+
"snapshotId": "v1",
|
|
487
|
+
"createdAt": 90,
|
|
488
|
+
"description": "Prior behavior",
|
|
489
|
+
"type": "TASK_FLOW",
|
|
490
|
+
"script": {
|
|
491
|
+
"script": "private"
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
]
|
|
495
|
+
},
|
|
496
|
+
"essential": {
|
|
497
|
+
"automationId": "a1",
|
|
498
|
+
"snapshots": [
|
|
499
|
+
{
|
|
500
|
+
"snapshotId": "v1",
|
|
501
|
+
"createdAt": 90,
|
|
502
|
+
"description": "Prior behavior",
|
|
503
|
+
"type": "TASK_FLOW"
|
|
504
|
+
}
|
|
505
|
+
]
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
]
|
|
@@ -446,5 +446,197 @@
|
|
|
446
446
|
"hubReady": false,
|
|
447
447
|
"cloudReady": false,
|
|
448
448
|
"entry": "unavailable"
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"target": "/app/pod/rename",
|
|
452
|
+
"execution": "cloud",
|
|
453
|
+
"placement": null,
|
|
454
|
+
"hubReady": true,
|
|
455
|
+
"cloudReady": true,
|
|
456
|
+
"entry": "cloud"
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
"target": "/app/pod/rename",
|
|
460
|
+
"execution": "cloud",
|
|
461
|
+
"placement": null,
|
|
462
|
+
"hubReady": true,
|
|
463
|
+
"cloudReady": false,
|
|
464
|
+
"entry": "unavailable"
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
"target": "/app/pod/rename",
|
|
468
|
+
"execution": "cloud",
|
|
469
|
+
"placement": null,
|
|
470
|
+
"hubReady": false,
|
|
471
|
+
"cloudReady": true,
|
|
472
|
+
"entry": "cloud"
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
"target": "/app/pod/rename",
|
|
476
|
+
"execution": "cloud",
|
|
477
|
+
"placement": null,
|
|
478
|
+
"hubReady": false,
|
|
479
|
+
"cloudReady": false,
|
|
480
|
+
"entry": "unavailable"
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
"target": "/app/pod/space/list",
|
|
484
|
+
"execution": "scopeMode",
|
|
485
|
+
"placement": null,
|
|
486
|
+
"hubReady": true,
|
|
487
|
+
"cloudReady": true,
|
|
488
|
+
"entry": "hub"
|
|
489
|
+
},
|
|
490
|
+
{
|
|
491
|
+
"target": "/app/pod/space/list",
|
|
492
|
+
"execution": "scopeMode",
|
|
493
|
+
"placement": null,
|
|
494
|
+
"hubReady": true,
|
|
495
|
+
"cloudReady": false,
|
|
496
|
+
"entry": "hub"
|
|
497
|
+
},
|
|
498
|
+
{
|
|
499
|
+
"target": "/app/pod/space/list",
|
|
500
|
+
"execution": "scopeMode",
|
|
501
|
+
"placement": null,
|
|
502
|
+
"hubReady": false,
|
|
503
|
+
"cloudReady": true,
|
|
504
|
+
"entry": "cloud"
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"target": "/app/pod/space/list",
|
|
508
|
+
"execution": "scopeMode",
|
|
509
|
+
"placement": null,
|
|
510
|
+
"hubReady": false,
|
|
511
|
+
"cloudReady": false,
|
|
512
|
+
"entry": "unavailable"
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
"target": "/app/pod/list",
|
|
516
|
+
"execution": "scopeMode",
|
|
517
|
+
"placement": null,
|
|
518
|
+
"hubReady": true,
|
|
519
|
+
"cloudReady": true,
|
|
520
|
+
"entry": "hub"
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"target": "/app/pod/list",
|
|
524
|
+
"execution": "scopeMode",
|
|
525
|
+
"placement": null,
|
|
526
|
+
"hubReady": true,
|
|
527
|
+
"cloudReady": false,
|
|
528
|
+
"entry": "hub"
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"target": "/app/pod/list",
|
|
532
|
+
"execution": "scopeMode",
|
|
533
|
+
"placement": null,
|
|
534
|
+
"hubReady": false,
|
|
535
|
+
"cloudReady": true,
|
|
536
|
+
"entry": "cloud"
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
"target": "/app/pod/list",
|
|
540
|
+
"execution": "scopeMode",
|
|
541
|
+
"placement": null,
|
|
542
|
+
"hubReady": false,
|
|
543
|
+
"cloudReady": false,
|
|
544
|
+
"entry": "unavailable"
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"target": "/app/host/list",
|
|
548
|
+
"execution": "scopeMode",
|
|
549
|
+
"placement": null,
|
|
550
|
+
"hubReady": true,
|
|
551
|
+
"cloudReady": true,
|
|
552
|
+
"entry": "hub"
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
"target": "/app/host/list",
|
|
556
|
+
"execution": "scopeMode",
|
|
557
|
+
"placement": null,
|
|
558
|
+
"hubReady": true,
|
|
559
|
+
"cloudReady": false,
|
|
560
|
+
"entry": "hub"
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
"target": "/app/host/list",
|
|
564
|
+
"execution": "scopeMode",
|
|
565
|
+
"placement": null,
|
|
566
|
+
"hubReady": false,
|
|
567
|
+
"cloudReady": true,
|
|
568
|
+
"entry": "cloud"
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
"target": "/app/host/list",
|
|
572
|
+
"execution": "scopeMode",
|
|
573
|
+
"placement": null,
|
|
574
|
+
"hubReady": false,
|
|
575
|
+
"cloudReady": false,
|
|
576
|
+
"entry": "unavailable"
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
"target": "/app/host/metrics",
|
|
580
|
+
"execution": "scopeMode",
|
|
581
|
+
"placement": null,
|
|
582
|
+
"hubReady": true,
|
|
583
|
+
"cloudReady": true,
|
|
584
|
+
"entry": "hub"
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
"target": "/app/host/metrics",
|
|
588
|
+
"execution": "scopeMode",
|
|
589
|
+
"placement": null,
|
|
590
|
+
"hubReady": true,
|
|
591
|
+
"cloudReady": false,
|
|
592
|
+
"entry": "hub"
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
"target": "/app/host/metrics",
|
|
596
|
+
"execution": "scopeMode",
|
|
597
|
+
"placement": null,
|
|
598
|
+
"hubReady": false,
|
|
599
|
+
"cloudReady": true,
|
|
600
|
+
"entry": "cloud"
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
"target": "/app/host/metrics",
|
|
604
|
+
"execution": "scopeMode",
|
|
605
|
+
"placement": null,
|
|
606
|
+
"hubReady": false,
|
|
607
|
+
"cloudReady": false,
|
|
608
|
+
"entry": "unavailable"
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
"target": "/app/host/service/restart",
|
|
612
|
+
"execution": "scopeMode",
|
|
613
|
+
"placement": null,
|
|
614
|
+
"hubReady": true,
|
|
615
|
+
"cloudReady": true,
|
|
616
|
+
"entry": "hub"
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
"target": "/app/host/service/restart",
|
|
620
|
+
"execution": "scopeMode",
|
|
621
|
+
"placement": null,
|
|
622
|
+
"hubReady": true,
|
|
623
|
+
"cloudReady": false,
|
|
624
|
+
"entry": "hub"
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
"target": "/app/host/service/restart",
|
|
628
|
+
"execution": "scopeMode",
|
|
629
|
+
"placement": null,
|
|
630
|
+
"hubReady": false,
|
|
631
|
+
"cloudReady": true,
|
|
632
|
+
"entry": "cloud"
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
"target": "/app/host/service/restart",
|
|
636
|
+
"execution": "scopeMode",
|
|
637
|
+
"placement": null,
|
|
638
|
+
"hubReady": false,
|
|
639
|
+
"cloudReady": false,
|
|
640
|
+
"entry": "unavailable"
|
|
449
641
|
}
|
|
450
642
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest": "mhome.app-facade.v1",
|
|
3
|
-
"contractVersion": "1.
|
|
3
|
+
"contractVersion": "1.57.0",
|
|
4
4
|
"callSchema": "schema/facade-call.v1.schema.json",
|
|
5
5
|
"routing": "manifest/routing.v1.json",
|
|
6
6
|
"routingSchema": "schema/routing.v1.schema.json",
|
|
@@ -32,7 +32,10 @@
|
|
|
32
32
|
"enrollmentTargets": [
|
|
33
33
|
"/app/pod/enrollment/get",
|
|
34
34
|
"/app/pod/space/enrollment/get"
|
|
35
|
-
]
|
|
35
|
+
],
|
|
36
|
+
"renameTarget": "/app/pod/rename",
|
|
37
|
+
"spaceInventoryTarget": "/app/pod/space/list",
|
|
38
|
+
"directoryContract": "contract/pod-directory-v1.md"
|
|
36
39
|
},
|
|
37
40
|
"hostProvision": {
|
|
38
41
|
"targets": "manifest/host-provision-targets.v1.json",
|
|
@@ -94,7 +97,8 @@
|
|
|
94
97
|
"/app/system/instances/get",
|
|
95
98
|
"/app/system/clients/get",
|
|
96
99
|
"/app/system/hosts/get",
|
|
97
|
-
"/app/system/hosts/runtime"
|
|
100
|
+
"/app/system/hosts/runtime",
|
|
101
|
+
"/app/system/hosts/permissions"
|
|
98
102
|
]
|
|
99
103
|
},
|
|
100
104
|
"integration": {
|
|
@@ -156,7 +160,22 @@
|
|
|
156
160
|
"firstClaimTransport": "directLanOnly",
|
|
157
161
|
"authorizationTarget": "/app/host/authorization",
|
|
158
162
|
"authorizationSchema": "schema/host-authorization.v1.schema.json",
|
|
159
|
-
"listTarget": "/app/host/list"
|
|
163
|
+
"listTarget": "/app/host/list",
|
|
164
|
+
"requestTargets": [
|
|
165
|
+
"/app/host/list",
|
|
166
|
+
"/app/host/metrics",
|
|
167
|
+
"/app/host/administrators/list",
|
|
168
|
+
"/app/host/administrator/request",
|
|
169
|
+
"/app/host/administrator/status",
|
|
170
|
+
"/app/host/administrator/cancel",
|
|
171
|
+
"/app/host/administrator/approve",
|
|
172
|
+
"/app/host/administrator/reject",
|
|
173
|
+
"/app/host/permissions/get",
|
|
174
|
+
"/app/host/service/install",
|
|
175
|
+
"/app/host/service/restart"
|
|
176
|
+
],
|
|
177
|
+
"requestSchema": "schema/host-management.v1.schema.json",
|
|
178
|
+
"directoryTarget": "/app/host/directory/list"
|
|
160
179
|
},
|
|
161
180
|
"clientAppearance": {
|
|
162
181
|
"schema": "schema/client-appearance.v1.schema.json",
|
|
@@ -214,5 +233,6 @@
|
|
|
214
233
|
}
|
|
215
234
|
},
|
|
216
235
|
"authorization": "manifest/authorization.v1.json",
|
|
217
|
-
"delegatedCallSchema": "schema/delegated-call.v1.schema.json"
|
|
236
|
+
"delegatedCallSchema": "schema/delegated-call.v1.schema.json",
|
|
237
|
+
"responseSchema": "schema/facade-response.v1.schema.json"
|
|
218
238
|
}
|
package/manifest/routing.v1.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest": "mhome.app-facade.routing.v1",
|
|
3
|
-
"contractVersion": "1.
|
|
3
|
+
"contractVersion": "1.57.0",
|
|
4
4
|
"targetPrefix": "/app/",
|
|
5
5
|
"default": {
|
|
6
6
|
"execution": "scopeMode"
|
|
@@ -32,8 +32,9 @@
|
|
|
32
32
|
"/app/messaging/binding/list",
|
|
33
33
|
"/app/messaging/bind/code/create",
|
|
34
34
|
"/app/messaging/unbind",
|
|
35
|
-
"/app/
|
|
36
|
-
"/app/
|
|
35
|
+
"/app/pod/enrollment/get",
|
|
36
|
+
"/app/host/directory/list",
|
|
37
|
+
"/app/pod/rename"
|
|
37
38
|
],
|
|
38
39
|
"scopeModeTargets": [
|
|
39
40
|
"/app/artifact/resolve",
|
|
@@ -46,8 +47,20 @@
|
|
|
46
47
|
"/app/artifact/upload/cancel",
|
|
47
48
|
"/app/system/instances/get",
|
|
48
49
|
"/app/system/clients/get",
|
|
49
|
-
"/app/pod/
|
|
50
|
-
"/app/pod/space/
|
|
50
|
+
"/app/pod/space/enrollment/get",
|
|
51
|
+
"/app/pod/space/list",
|
|
52
|
+
"/app/host/list",
|
|
53
|
+
"/app/host/metrics",
|
|
54
|
+
"/app/host/administrators/list",
|
|
55
|
+
"/app/host/administrator/request",
|
|
56
|
+
"/app/host/administrator/status",
|
|
57
|
+
"/app/host/administrator/cancel",
|
|
58
|
+
"/app/host/administrator/approve",
|
|
59
|
+
"/app/host/administrator/reject",
|
|
60
|
+
"/app/host/permissions/get",
|
|
61
|
+
"/app/host/service/install",
|
|
62
|
+
"/app/host/service/restart",
|
|
63
|
+
"/app/pod/list"
|
|
51
64
|
],
|
|
52
65
|
"hubPrefixes": [
|
|
53
66
|
"/app/plugin/",
|
|
@@ -55,7 +68,8 @@
|
|
|
55
68
|
"/app/object-storage/",
|
|
56
69
|
"/app/runtime/",
|
|
57
70
|
"/app/system/hosts/",
|
|
58
|
-
"/app/person/"
|
|
71
|
+
"/app/person/",
|
|
72
|
+
"/app/matter/"
|
|
59
73
|
],
|
|
60
74
|
"requestPlacementPrefixes": [
|
|
61
75
|
"/app/messaging/"
|
package/manifest/targets.v1.json
CHANGED
package/package.json
CHANGED
package/protocol.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"protocol": "mhome.app-facade",
|
|
3
|
-
"contractVersion": "1.
|
|
3
|
+
"contractVersion": "1.57.0",
|
|
4
4
|
"manifest": "manifest/app-facade.v1.json",
|
|
5
5
|
"schemas": {
|
|
6
6
|
"hostAuthorization": "schema/host-authorization.v1.schema.json",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"cardSkinPackage": "schema/card-skin-package.v1.schema.json",
|
|
10
10
|
"cardSkins": "schema/card-skins.v1.schema.json",
|
|
11
11
|
"call": "schema/facade-call.v1.schema.json",
|
|
12
|
+
"response": "schema/facade-response.v1.schema.json",
|
|
12
13
|
"frame": "schema/messaging-frame.v3.schema.json",
|
|
13
14
|
"interactionFlow": "schema/interaction-flow-app.v1.schema.json",
|
|
14
15
|
"routing": "schema/routing.v1.schema.json",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"mode": { "enum": ["direct", "prepare", "commit", "reject"] },
|
|
15
15
|
"preparedActionId": { "type": "string", "minLength": 1, "pattern": ".*\\S.*" },
|
|
16
16
|
"approvalToken": { "type": "string", "minLength": 1, "pattern": ".*\\S.*" },
|
|
17
|
-
"
|
|
17
|
+
"responseDetail": { "enum": ["full", "essential"] }
|
|
18
18
|
},
|
|
19
19
|
"allOf": [
|
|
20
20
|
{
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"title": "App Facade final response",
|
|
4
|
+
"oneOf": [
|
|
5
|
+
{
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"status"
|
|
10
|
+
],
|
|
11
|
+
"properties": {
|
|
12
|
+
"status": {
|
|
13
|
+
"const": "success"
|
|
14
|
+
},
|
|
15
|
+
"data": true,
|
|
16
|
+
"text": {
|
|
17
|
+
"type": "string"
|
|
18
|
+
},
|
|
19
|
+
"warnings": {
|
|
20
|
+
"type": "array",
|
|
21
|
+
"items": {
|
|
22
|
+
"$ref": "#/$defs/problem"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"oneOf": [
|
|
27
|
+
{
|
|
28
|
+
"required": [
|
|
29
|
+
"data"
|
|
30
|
+
],
|
|
31
|
+
"properties": {
|
|
32
|
+
"data": true
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"required": [
|
|
37
|
+
"text"
|
|
38
|
+
],
|
|
39
|
+
"properties": {
|
|
40
|
+
"text": true
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"type": "object",
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"required": [
|
|
49
|
+
"status"
|
|
50
|
+
],
|
|
51
|
+
"properties": {
|
|
52
|
+
"status": {
|
|
53
|
+
"const": "partial"
|
|
54
|
+
},
|
|
55
|
+
"data": true,
|
|
56
|
+
"text": {
|
|
57
|
+
"type": "string"
|
|
58
|
+
},
|
|
59
|
+
"warnings": {
|
|
60
|
+
"type": "array",
|
|
61
|
+
"items": {
|
|
62
|
+
"$ref": "#/$defs/problem"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"oneOf": [
|
|
67
|
+
{
|
|
68
|
+
"required": [
|
|
69
|
+
"data"
|
|
70
|
+
],
|
|
71
|
+
"properties": {
|
|
72
|
+
"data": true
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"required": [
|
|
77
|
+
"text"
|
|
78
|
+
],
|
|
79
|
+
"properties": {
|
|
80
|
+
"text": true
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"type": "object",
|
|
87
|
+
"additionalProperties": false,
|
|
88
|
+
"required": [
|
|
89
|
+
"status",
|
|
90
|
+
"error"
|
|
91
|
+
],
|
|
92
|
+
"properties": {
|
|
93
|
+
"status": {
|
|
94
|
+
"const": "error"
|
|
95
|
+
},
|
|
96
|
+
"error": {
|
|
97
|
+
"$ref": "#/$defs/problem"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"type": "object",
|
|
103
|
+
"additionalProperties": false,
|
|
104
|
+
"required": [
|
|
105
|
+
"status"
|
|
106
|
+
],
|
|
107
|
+
"properties": {
|
|
108
|
+
"status": {
|
|
109
|
+
"const": "cancelled"
|
|
110
|
+
},
|
|
111
|
+
"warnings": {
|
|
112
|
+
"type": "array",
|
|
113
|
+
"items": {
|
|
114
|
+
"$ref": "#/$defs/problem"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
"$defs": {
|
|
121
|
+
"problem": {
|
|
122
|
+
"type": "object",
|
|
123
|
+
"additionalProperties": false,
|
|
124
|
+
"required": [
|
|
125
|
+
"code",
|
|
126
|
+
"message"
|
|
127
|
+
],
|
|
128
|
+
"properties": {
|
|
129
|
+
"code": {
|
|
130
|
+
"type": "string"
|
|
131
|
+
},
|
|
132
|
+
"message": {
|
|
133
|
+
"type": "string"
|
|
134
|
+
},
|
|
135
|
+
"details": true
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -195,6 +195,12 @@
|
|
|
195
195
|
"type": "string"
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
|
+
},
|
|
199
|
+
"clientMode": {
|
|
200
|
+
"enum": [
|
|
201
|
+
"user",
|
|
202
|
+
"space"
|
|
203
|
+
]
|
|
198
204
|
}
|
|
199
205
|
},
|
|
200
206
|
"allOf": [
|
|
@@ -331,10 +337,12 @@
|
|
|
331
337
|
},
|
|
332
338
|
"then": {
|
|
333
339
|
"properties": {
|
|
334
|
-
"podId": {}
|
|
340
|
+
"podId": {},
|
|
341
|
+
"clientMode": {}
|
|
335
342
|
},
|
|
336
343
|
"required": [
|
|
337
|
-
"podId"
|
|
344
|
+
"podId",
|
|
345
|
+
"clientMode"
|
|
338
346
|
]
|
|
339
347
|
}
|
|
340
348
|
},
|
|
@@ -365,6 +373,14 @@
|
|
|
365
373
|
"required": [
|
|
366
374
|
"authorization"
|
|
367
375
|
]
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"properties": {
|
|
379
|
+
"clientMode": {}
|
|
380
|
+
},
|
|
381
|
+
"required": [
|
|
382
|
+
"clientMode"
|
|
383
|
+
]
|
|
368
384
|
}
|
|
369
385
|
]
|
|
370
386
|
}
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"additionalProperties": false,
|
|
26
26
|
"required": [
|
|
27
27
|
"hostId",
|
|
28
|
+
"env",
|
|
28
29
|
"hostName",
|
|
29
30
|
"hostType",
|
|
30
31
|
"source",
|
|
@@ -362,6 +363,13 @@
|
|
|
362
363
|
"string",
|
|
363
364
|
"null"
|
|
364
365
|
]
|
|
366
|
+
},
|
|
367
|
+
"env": {
|
|
368
|
+
"enum": [
|
|
369
|
+
"prod",
|
|
370
|
+
"dev",
|
|
371
|
+
"e2e"
|
|
372
|
+
]
|
|
365
373
|
}
|
|
366
374
|
}
|
|
367
375
|
}
|