@autoweb/domain-models 1.0.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.
Files changed (68) hide show
  1. package/README.md +100 -0
  2. package/index.d.ts +594 -0
  3. package/index.js +3 -0
  4. package/package.json +55 -0
  5. package/python-models/__init__.py +68 -0
  6. package/python-models/action-configs.py +1112 -0
  7. package/python-models/build/lib/floweb_models/__init__.py +194 -0
  8. package/python-models/build/lib/floweb_models/action_configs.py +783 -0
  9. package/python-models/build/lib/floweb_models/debug.py +209 -0
  10. package/python-models/build/lib/floweb_models/debug_models.py +141 -0
  11. package/python-models/build/lib/floweb_models/environment.py +158 -0
  12. package/python-models/build/lib/floweb_models/execution_results.py +208 -0
  13. package/python-models/build/lib/floweb_models/flow.py +345 -0
  14. package/python-models/build/lib/floweb_models/flow_validation.py +316 -0
  15. package/python-models/build/lib/floweb_models/parallel_execution.py +258 -0
  16. package/python-models/build/lib/floweb_models/performance_test.py +605 -0
  17. package/python-models/build/lib/floweb_models/websocket_communication.py +697 -0
  18. package/python-models/debug.py +209 -0
  19. package/python-models/dist/floweb_domain_models-1.0.0-py3-none-any.whl +0 -0
  20. package/python-models/environment.py +158 -0
  21. package/python-models/execution-results.py +208 -0
  22. package/python-models/flow-validation.py +316 -0
  23. package/python-models/flow.py +369 -0
  24. package/python-models/floweb_domain_models.egg-info/PKG-INFO +9 -0
  25. package/python-models/floweb_domain_models.egg-info/SOURCES.txt +16 -0
  26. package/python-models/floweb_domain_models.egg-info/dependency_links.txt +1 -0
  27. package/python-models/floweb_domain_models.egg-info/requires.txt +1 -0
  28. package/python-models/floweb_domain_models.egg-info/top_level.txt +1 -0
  29. package/python-models/floweb_models/__init__.py +194 -0
  30. package/python-models/floweb_models/__pycache__/__init__.cpython-312.pyc +0 -0
  31. package/python-models/floweb_models/__pycache__/action_configs.cpython-312.pyc +0 -0
  32. package/python-models/floweb_models/__pycache__/debug.cpython-312.pyc +0 -0
  33. package/python-models/floweb_models/__pycache__/debug_models.cpython-312.pyc +0 -0
  34. package/python-models/floweb_models/__pycache__/environment.cpython-312.pyc +0 -0
  35. package/python-models/floweb_models/__pycache__/execution_results.cpython-312.pyc +0 -0
  36. package/python-models/floweb_models/__pycache__/flow.cpython-312.pyc +0 -0
  37. package/python-models/floweb_models/__pycache__/flow_validation.cpython-312.pyc +0 -0
  38. package/python-models/floweb_models/__pycache__/parallel_execution.cpython-312.pyc +0 -0
  39. package/python-models/floweb_models/__pycache__/performance_test.cpython-312.pyc +0 -0
  40. package/python-models/floweb_models/__pycache__/websocket_communication.cpython-312.pyc +0 -0
  41. package/python-models/floweb_models/action_configs.py +1062 -0
  42. package/python-models/floweb_models/debug.py +209 -0
  43. package/python-models/floweb_models/debug_models.py +141 -0
  44. package/python-models/floweb_models/environment.py +158 -0
  45. package/python-models/floweb_models/execution_results.py +208 -0
  46. package/python-models/floweb_models/flow.py +345 -0
  47. package/python-models/floweb_models/flow_validation.py +316 -0
  48. package/python-models/floweb_models/parallel_execution.py +229 -0
  49. package/python-models/floweb_models/performance_test.py +605 -0
  50. package/python-models/floweb_models/websocket_communication.py +697 -0
  51. package/python-models/floweb_models.egg-info/PKG-INFO +9 -0
  52. package/python-models/floweb_models.egg-info/SOURCES.txt +16 -0
  53. package/python-models/floweb_models.egg-info/dependency_links.txt +1 -0
  54. package/python-models/floweb_models.egg-info/requires.txt +1 -0
  55. package/python-models/floweb_models.egg-info/top_level.txt +1 -0
  56. package/python-models/parallel-execution.py +475 -0
  57. package/python-models/performance-test.py +605 -0
  58. package/python-models/setup.py +13 -0
  59. package/python-models/websocket-communication.py +697 -0
  60. package/schemas/action-configs.json +1501 -0
  61. package/schemas/debug.json +203 -0
  62. package/schemas/environment.json +165 -0
  63. package/schemas/execution-results.json +209 -0
  64. package/schemas/flow-validation.json +311 -0
  65. package/schemas/flow.json +381 -0
  66. package/schemas/parallel-execution.json +219 -0
  67. package/schemas/performance-test.json +600 -0
  68. package/schemas/websocket-communication.json +1118 -0
@@ -0,0 +1,311 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://floweb.com/schemas/flow-validation.json",
4
+ "title": "Flow Validation Models",
5
+ "description": "Schema for flow validation warnings and errors",
6
+ "type": "object",
7
+ "properties": {
8
+ "flowValidation": {
9
+ "type": "object",
10
+ "properties": {
11
+ "warnings": {
12
+ "type": "array",
13
+ "items": {
14
+ "$ref": "#/$defs/FlowWarning"
15
+ }
16
+ },
17
+ "loopDetections": {
18
+ "type": "array",
19
+ "items": {
20
+ "$ref": "#/$defs/LoopDetectionResult"
21
+ }
22
+ },
23
+ "validationResults": {
24
+ "type": "array",
25
+ "items": {
26
+ "$ref": "#/$defs/FlowValidationResult"
27
+ }
28
+ }
29
+ }
30
+ }
31
+ },
32
+ "$defs": {
33
+ "FlowWarning": {
34
+ "type": "object",
35
+ "description": "Flow validation warning or error",
36
+ "properties": {
37
+ "id": {
38
+ "type": "string",
39
+ "description": "Unique warning identifier"
40
+ },
41
+ "type": {
42
+ "type": "string",
43
+ "enum": [
44
+ "missing-selector",
45
+ "infinite-loop",
46
+ "unreachable-node",
47
+ "missing-condition",
48
+ "invalid-reference",
49
+ "missing-action-reference",
50
+ "circular-dependency",
51
+ "duplicate-id",
52
+ "invalid-variable",
53
+ "missing-variable",
54
+ "type-mismatch",
55
+ "performance-issue",
56
+ "security-risk"
57
+ ],
58
+ "description": "Type of warning"
59
+ },
60
+ "severity": {
61
+ "$ref": "#/$defs/WarningSeverity"
62
+ },
63
+ "nodeId": {
64
+ "type": "string",
65
+ "description": "ID of the node that triggered the warning"
66
+ },
67
+ "nodeName": {
68
+ "type": "string",
69
+ "description": "Name of the node that triggered the warning"
70
+ },
71
+ "message": {
72
+ "type": "string",
73
+ "description": "Warning message"
74
+ },
75
+ "description": {
76
+ "type": "string",
77
+ "description": "Detailed description of the warning"
78
+ },
79
+ "affectedNodes": {
80
+ "type": "array",
81
+ "items": {
82
+ "type": "string"
83
+ },
84
+ "description": "List of other affected node IDs"
85
+ },
86
+ "suggestion": {
87
+ "type": "string",
88
+ "description": "Suggested fix for the warning"
89
+ },
90
+ "category": {
91
+ "type": "string",
92
+ "enum": ["logic", "performance", "security", "usability", "compatibility"],
93
+ "description": "Category of the warning"
94
+ },
95
+ "createdAt": {
96
+ "type": "string",
97
+ "format": "date-time",
98
+ "description": "When the warning was detected"
99
+ }
100
+ },
101
+ "required": ["id", "type", "severity", "nodeId", "nodeName", "message", "description"]
102
+ },
103
+ "WarningSeverity": {
104
+ "type": "string",
105
+ "enum": ["minor", "medium", "critical", "info"],
106
+ "description": "Severity level of the warning"
107
+ },
108
+ "LoopDetectionResult": {
109
+ "type": "object",
110
+ "description": "Result of loop detection analysis",
111
+ "properties": {
112
+ "hasLoops": {
113
+ "type": "boolean",
114
+ "description": "Whether loops were detected in the flow"
115
+ },
116
+ "loops": {
117
+ "type": "array",
118
+ "items": {
119
+ "$ref": "#/$defs/LoopInfo"
120
+ },
121
+ "description": "Information about detected loops"
122
+ },
123
+ "totalLoops": {
124
+ "type": "integer",
125
+ "minimum": 0,
126
+ "description": "Total number of loops detected"
127
+ },
128
+ "infiniteLoops": {
129
+ "type": "integer",
130
+ "minimum": 0,
131
+ "description": "Number of potentially infinite loops"
132
+ }
133
+ },
134
+ "required": ["hasLoops", "loops"]
135
+ },
136
+ "LoopInfo": {
137
+ "type": "object",
138
+ "description": "Information about a detected loop",
139
+ "properties": {
140
+ "nodes": {
141
+ "type": "array",
142
+ "items": {
143
+ "type": "string"
144
+ },
145
+ "description": "Node IDs that form the loop"
146
+ },
147
+ "hasExitCondition": {
148
+ "type": "boolean",
149
+ "description": "Whether the loop has a proper exit condition"
150
+ },
151
+ "severity": {
152
+ "$ref": "#/$defs/WarningSeverity"
153
+ },
154
+ "description": {
155
+ "type": "string",
156
+ "description": "Description of the loop issue"
157
+ },
158
+ "maxIterations": {
159
+ "type": "integer",
160
+ "description": "Maximum iterations if detectable"
161
+ },
162
+ "isInfinite": {
163
+ "type": "boolean",
164
+ "description": "Whether this appears to be an infinite loop"
165
+ }
166
+ },
167
+ "required": ["nodes", "hasExitCondition", "severity", "description"]
168
+ },
169
+ "FlowValidationResult": {
170
+ "type": "object",
171
+ "description": "Complete result of flow validation",
172
+ "properties": {
173
+ "flowId": {
174
+ "type": "string",
175
+ "description": "ID of the validated flow"
176
+ },
177
+ "flowName": {
178
+ "type": "string",
179
+ "description": "Name of the validated flow"
180
+ },
181
+ "isValid": {
182
+ "type": "boolean",
183
+ "description": "Whether the flow is valid"
184
+ },
185
+ "warnings": {
186
+ "type": "array",
187
+ "items": {
188
+ "$ref": "#/$defs/FlowWarning"
189
+ },
190
+ "description": "List of warnings found"
191
+ },
192
+ "errors": {
193
+ "type": "array",
194
+ "items": {
195
+ "$ref": "#/$defs/FlowWarning"
196
+ },
197
+ "description": "List of errors found (critical warnings)"
198
+ },
199
+ "summary": {
200
+ "$ref": "#/$defs/ValidationSummary"
201
+ },
202
+ "validatedAt": {
203
+ "type": "string",
204
+ "format": "date-time",
205
+ "description": "When validation was performed"
206
+ },
207
+ "validationTime": {
208
+ "type": "number",
209
+ "minimum": 0,
210
+ "description": "Time taken for validation in seconds"
211
+ }
212
+ },
213
+ "required": ["flowId", "isValid", "warnings", "errors", "summary"]
214
+ },
215
+ "ValidationSummary": {
216
+ "type": "object",
217
+ "description": "Summary statistics of validation results",
218
+ "properties": {
219
+ "totalNodes": {
220
+ "type": "integer",
221
+ "minimum": 0,
222
+ "description": "Total number of nodes in the flow"
223
+ },
224
+ "totalEdges": {
225
+ "type": "integer",
226
+ "minimum": 0,
227
+ "description": "Total number of edges in the flow"
228
+ },
229
+ "warningCount": {
230
+ "type": "integer",
231
+ "minimum": 0,
232
+ "description": "Total number of warnings"
233
+ },
234
+ "errorCount": {
235
+ "type": "integer",
236
+ "minimum": 0,
237
+ "description": "Total number of errors"
238
+ },
239
+ "criticalCount": {
240
+ "type": "integer",
241
+ "minimum": 0,
242
+ "description": "Number of critical severity issues"
243
+ },
244
+ "warningsByType": {
245
+ "type": "object",
246
+ "description": "Count of warnings by type",
247
+ "additionalProperties": {
248
+ "type": "integer",
249
+ "minimum": 0
250
+ }
251
+ },
252
+ "warningsBySeverity": {
253
+ "type": "object",
254
+ "description": "Count of warnings by severity",
255
+ "properties": {
256
+ "minor": {"type": "integer", "minimum": 0},
257
+ "medium": {"type": "integer", "minimum": 0},
258
+ "critical": {"type": "integer", "minimum": 0},
259
+ "info": {"type": "integer", "minimum": 0}
260
+ }
261
+ }
262
+ },
263
+ "required": ["totalNodes", "totalEdges", "warningCount", "errorCount"]
264
+ },
265
+ "NodeValidationResult": {
266
+ "type": "object",
267
+ "description": "Validation result for a specific node",
268
+ "properties": {
269
+ "nodeId": {
270
+ "type": "string",
271
+ "description": "ID of the validated node"
272
+ },
273
+ "nodeType": {
274
+ "type": "string",
275
+ "description": "Type of the node"
276
+ },
277
+ "isValid": {
278
+ "type": "boolean",
279
+ "description": "Whether the node is valid"
280
+ },
281
+ "warnings": {
282
+ "type": "array",
283
+ "items": {
284
+ "$ref": "#/$defs/FlowWarning"
285
+ },
286
+ "description": "Warnings specific to this node"
287
+ },
288
+ "configValidation": {
289
+ "type": "object",
290
+ "description": "Validation of node configuration",
291
+ "properties": {
292
+ "isValid": {"type": "boolean"},
293
+ "missingFields": {
294
+ "type": "array",
295
+ "items": {"type": "string"}
296
+ },
297
+ "invalidFields": {
298
+ "type": "array",
299
+ "items": {"type": "string"}
300
+ },
301
+ "typeErrors": {
302
+ "type": "array",
303
+ "items": {"type": "string"}
304
+ }
305
+ }
306
+ }
307
+ },
308
+ "required": ["nodeId", "nodeType", "isValid"]
309
+ }
310
+ }
311
+ }
@@ -0,0 +1,381 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://floweb.com/schemas/flow.json",
4
+ "title": "Flow",
5
+ "description": "Complete flow definition for automation workflows",
6
+ "type": "object",
7
+ "properties": {
8
+ "id": {
9
+ "type": "string",
10
+ "description": "Unique identifier for the flow"
11
+ },
12
+ "name": {
13
+ "type": "string",
14
+ "description": "Human-readable name of the flow"
15
+ },
16
+ "description": {
17
+ "type": "string",
18
+ "description": "Optional description of the flow"
19
+ },
20
+ "tags": {
21
+ "type": "array",
22
+ "items": {
23
+ "type": "string"
24
+ },
25
+ "description": "Tags for categorization and filtering"
26
+ },
27
+ "parentID": {
28
+ "type": ["string", "null"],
29
+ "description": "Parent folder ID for organization"
30
+ },
31
+ "type": {
32
+ "type": "string",
33
+ "enum": ["flow", "test", "performance"],
34
+ "description": "Type of the flow"
35
+ },
36
+ "actions": {
37
+ "type": "array",
38
+ "items": {
39
+ "$ref": "#/$defs/Action"
40
+ },
41
+ "description": "List of actions in the flow"
42
+ },
43
+ "edges": {
44
+ "type": "array",
45
+ "items": {
46
+ "$ref": "#/$defs/Edge"
47
+ },
48
+ "description": "Connections between actions"
49
+ },
50
+ "zoom": {
51
+ "$ref": "#/$defs/Zoom",
52
+ "description": "Canvas zoom and pan state"
53
+ },
54
+ "createdAt": {
55
+ "type": "string",
56
+ "format": "date-time",
57
+ "description": "Creation timestamp"
58
+ },
59
+ "updatedAt": {
60
+ "type": "string",
61
+ "format": "date-time",
62
+ "description": "Last update timestamp"
63
+ },
64
+ "variables": {
65
+ "$ref": "#/$defs/FlowVariables",
66
+ "description": "Flow input and output variables"
67
+ },
68
+ "parameters": {
69
+ "$ref": "#/$defs/FlowParameters",
70
+ "description": "Flow parameters for configuration"
71
+ },
72
+ "environment": {
73
+ "$ref": "#/$defs/Environment",
74
+ "description": "Environment configuration"
75
+ },
76
+ "globalVariables": {
77
+ "type": "array",
78
+ "items": {
79
+ "$ref": "#/$defs/GlobalVariable"
80
+ },
81
+ "description": "Global variables available to the flow"
82
+ },
83
+ "synced": {
84
+ "type": "boolean",
85
+ "description": "Whether the flow is synced with server"
86
+ },
87
+ "lastRun": {
88
+ "type": "string",
89
+ "format": "date-time",
90
+ "description": "Last execution timestamp"
91
+ },
92
+ "lastResult": {
93
+ "type": "string",
94
+ "enum": ["passed", "failed", "pending", "running"],
95
+ "description": "Result of last execution"
96
+ }
97
+ },
98
+ "required": ["id", "name", "actions", "edges"],
99
+ "$defs": {
100
+ "Position": {
101
+ "type": "object",
102
+ "properties": {
103
+ "x": {
104
+ "type": "number",
105
+ "description": "X coordinate"
106
+ },
107
+ "y": {
108
+ "type": "number",
109
+ "description": "Y coordinate"
110
+ }
111
+ },
112
+ "required": ["x", "y"]
113
+ },
114
+ "ActionData": {
115
+ "type": "object",
116
+ "properties": {
117
+ "label": {
118
+ "type": "string",
119
+ "description": "Human-readable label"
120
+ },
121
+ "type": {
122
+ "type": "string",
123
+ "description": "Action type identifier"
124
+ },
125
+ "config": {
126
+ "type": "object",
127
+ "description": "Action-specific configuration"
128
+ }
129
+ },
130
+ "required": ["label", "type", "config"]
131
+ },
132
+ "Action": {
133
+ "type": "object",
134
+ "properties": {
135
+ "id": {
136
+ "type": "string",
137
+ "description": "Unique action identifier"
138
+ },
139
+ "type": {
140
+ "type": "string",
141
+ "description": "Action type"
142
+ },
143
+ "position": {
144
+ "$ref": "#/$defs/Position"
145
+ },
146
+ "data": {
147
+ "$ref": "#/$defs/ActionData"
148
+ }
149
+ },
150
+ "required": ["id", "type", "position", "data"]
151
+ },
152
+ "Edge": {
153
+ "type": "object",
154
+ "properties": {
155
+ "id": {
156
+ "type": "string",
157
+ "description": "Unique edge identifier"
158
+ },
159
+ "source": {
160
+ "type": "string",
161
+ "description": "Source action ID"
162
+ },
163
+ "sourceHandle": {
164
+ "type": "string",
165
+ "description": "Source handle identifier"
166
+ },
167
+ "target": {
168
+ "type": "string",
169
+ "description": "Target action ID"
170
+ },
171
+ "targetHandle": {
172
+ "type": "string",
173
+ "description": "Target handle identifier"
174
+ },
175
+ "type": {
176
+ "type": "string",
177
+ "default": "step",
178
+ "description": "Edge type"
179
+ },
180
+ "data": {
181
+ "type": "object",
182
+ "description": "Additional edge data"
183
+ }
184
+ },
185
+ "required": ["id", "source", "target"]
186
+ },
187
+ "Zoom": {
188
+ "type": "object",
189
+ "properties": {
190
+ "x": {
191
+ "type": "number",
192
+ "description": "Pan X position"
193
+ },
194
+ "y": {
195
+ "type": "number",
196
+ "description": "Pan Y position"
197
+ },
198
+ "zoom": {
199
+ "type": "number",
200
+ "description": "Zoom level"
201
+ }
202
+ },
203
+ "required": ["x", "y", "zoom"]
204
+ },
205
+ "Variable": {
206
+ "type": "object",
207
+ "properties": {
208
+ "id": {
209
+ "type": "string",
210
+ "description": "Variable identifier"
211
+ },
212
+ "name": {
213
+ "type": "string",
214
+ "description": "Variable name"
215
+ },
216
+ "type": {
217
+ "type": "string",
218
+ "description": "Variable data type"
219
+ },
220
+ "value": {
221
+ "type": "string",
222
+ "description": "Variable value"
223
+ },
224
+ "description": {
225
+ "type": "string",
226
+ "description": "Optional description"
227
+ },
228
+ "isOutput": {
229
+ "type": "boolean",
230
+ "description": "Whether this is an output variable"
231
+ }
232
+ },
233
+ "required": ["id", "name", "type", "value"]
234
+ },
235
+ "FlowVariables": {
236
+ "type": "object",
237
+ "properties": {
238
+ "input": {
239
+ "type": "array",
240
+ "items": {
241
+ "$ref": "#/$defs/Variable"
242
+ },
243
+ "description": "Input variables"
244
+ },
245
+ "output": {
246
+ "type": "array",
247
+ "items": {
248
+ "$ref": "#/$defs/Variable"
249
+ },
250
+ "description": "Output variables"
251
+ }
252
+ },
253
+ "required": ["input", "output"]
254
+ },
255
+ "FlowParameters": {
256
+ "type": "object",
257
+ "properties": {
258
+ "input": {
259
+ "type": "array",
260
+ "items": {
261
+ "$ref": "#/$defs/Variable"
262
+ },
263
+ "description": "Input parameters"
264
+ },
265
+ "output": {
266
+ "type": "array",
267
+ "items": {
268
+ "$ref": "#/$defs/Variable"
269
+ },
270
+ "description": "Output parameters"
271
+ }
272
+ },
273
+ "required": ["input", "output"]
274
+ },
275
+ "EnvironmentVariable": {
276
+ "type": "object",
277
+ "properties": {
278
+ "id": {
279
+ "type": "string",
280
+ "description": "Variable identifier"
281
+ },
282
+ "name": {
283
+ "type": "string",
284
+ "description": "Variable name"
285
+ },
286
+ "type": {
287
+ "type": "string",
288
+ "description": "Variable data type"
289
+ },
290
+ "value": {
291
+ "type": "string",
292
+ "description": "Variable value"
293
+ },
294
+ "description": {
295
+ "type": "string",
296
+ "description": "Optional description"
297
+ }
298
+ },
299
+ "required": ["id", "name", "type", "value"]
300
+ },
301
+ "Environment": {
302
+ "type": "object",
303
+ "properties": {
304
+ "id": {
305
+ "type": "string",
306
+ "description": "Environment identifier"
307
+ },
308
+ "name": {
309
+ "type": "string",
310
+ "description": "Environment name"
311
+ },
312
+ "variables": {
313
+ "type": "array",
314
+ "items": {
315
+ "$ref": "#/$defs/EnvironmentVariable"
316
+ },
317
+ "description": "Environment variables"
318
+ },
319
+ "description": {
320
+ "type": "string",
321
+ "description": "Environment description"
322
+ },
323
+ "isDefault": {
324
+ "type": "boolean",
325
+ "description": "Whether this is the default environment"
326
+ },
327
+ "isActive": {
328
+ "type": "boolean",
329
+ "description": "Whether this environment is active"
330
+ },
331
+ "createdAt": {
332
+ "type": "string",
333
+ "format": "date-time",
334
+ "description": "Creation timestamp"
335
+ },
336
+ "updatedAt": {
337
+ "type": "string",
338
+ "format": "date-time",
339
+ "description": "Last update timestamp"
340
+ }
341
+ },
342
+ "required": ["id", "name", "variables"]
343
+ },
344
+ "GlobalVariable": {
345
+ "type": "object",
346
+ "properties": {
347
+ "id": {
348
+ "type": "string",
349
+ "description": "Variable identifier"
350
+ },
351
+ "name": {
352
+ "type": "string",
353
+ "description": "Variable name"
354
+ },
355
+ "type": {
356
+ "type": "string",
357
+ "description": "Variable data type"
358
+ },
359
+ "value": {
360
+ "type": "string",
361
+ "description": "Variable value"
362
+ },
363
+ "description": {
364
+ "type": "string",
365
+ "description": "Optional description"
366
+ },
367
+ "createdAt": {
368
+ "type": "string",
369
+ "format": "date-time",
370
+ "description": "Creation timestamp"
371
+ },
372
+ "updatedAt": {
373
+ "type": "string",
374
+ "format": "date-time",
375
+ "description": "Last update timestamp"
376
+ }
377
+ },
378
+ "required": ["id", "name", "type", "value"]
379
+ }
380
+ }
381
+ }