losant_rest 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/docs/_schemas.md +5644 -846
  3. data/docs/applicationApiTokens.md +1 -1
  4. data/docs/applicationKeys.md +1 -1
  5. data/docs/applications.md +1 -1
  6. data/docs/dataTables.md +1 -1
  7. data/docs/deviceRecipes.md +1 -1
  8. data/docs/devices.md +1 -1
  9. data/docs/experienceEndpoints.md +1 -1
  10. data/docs/experienceGroups.md +1 -1
  11. data/docs/experienceUsers.md +1 -1
  12. data/docs/flow.md +2 -0
  13. data/docs/flowVersion.md +6 -4
  14. data/docs/flowVersions.md +4 -2
  15. data/docs/flows.md +44 -2
  16. data/docs/integrations.md +1 -1
  17. data/docs/orgs.md +1 -1
  18. data/docs/solutionUsers.md +1 -1
  19. data/docs/solutions.md +1 -1
  20. data/docs/webhooks.md +1 -1
  21. data/lib/losant_rest/application_api_tokens.rb +1 -1
  22. data/lib/losant_rest/application_keys.rb +1 -1
  23. data/lib/losant_rest/applications.rb +1 -1
  24. data/lib/losant_rest/client.rb +2 -2
  25. data/lib/losant_rest/data_tables.rb +1 -1
  26. data/lib/losant_rest/device_recipes.rb +1 -1
  27. data/lib/losant_rest/devices.rb +1 -1
  28. data/lib/losant_rest/experience_endpoints.rb +1 -1
  29. data/lib/losant_rest/experience_groups.rb +1 -1
  30. data/lib/losant_rest/experience_users.rb +1 -1
  31. data/lib/losant_rest/flow.rb +4 -0
  32. data/lib/losant_rest/flow_version.rb +8 -4
  33. data/lib/losant_rest/flow_versions.rb +6 -2
  34. data/lib/losant_rest/flows.rb +53 -2
  35. data/lib/losant_rest/integrations.rb +1 -1
  36. data/lib/losant_rest/orgs.rb +1 -1
  37. data/lib/losant_rest/solution_users.rb +1 -1
  38. data/lib/losant_rest/solutions.rb +1 -1
  39. data/lib/losant_rest/version.rb +1 -1
  40. data/lib/losant_rest/webhooks.rb +1 -1
  41. data/schemas/applicationApiTokenPost.json +2 -0
  42. data/schemas/auditLog.json +1 -0
  43. data/schemas/auditLogFilter.json +1 -0
  44. data/schemas/auditLogs.json +1 -0
  45. data/schemas/dashboard.json +7 -0
  46. data/schemas/dashboardPatch.json +7 -0
  47. data/schemas/dashboardPost.json +7 -0
  48. data/schemas/dashboards.json +7 -0
  49. data/schemas/deviceState.json +54 -0
  50. data/schemas/flow.json +334 -1
  51. data/schemas/flowPatch.json +327 -0
  52. data/schemas/flowPost.json +338 -1
  53. data/schemas/flowVersion.json +315 -0
  54. data/schemas/flowVersionPost.json +315 -0
  55. data/schemas/flowVersions.json +315 -0
  56. data/schemas/flows.json +336 -2
  57. data/schemas/flowsImportPost.json +994 -0
  58. data/schemas/flowsImportResult.json +1048 -0
  59. data/schemas/org.json +59 -1
  60. data/schemas/orgInviteInfo.json +3 -1
  61. data/schemas/orgInvitePost.json +59 -1
  62. data/schemas/orgInvites.json +59 -1
  63. data/schemas/orgMemberPatch.json +60 -3
  64. data/schemas/orgs.json +59 -1
  65. metadata +5 -2
@@ -39,14 +39,15 @@ module LosantRest
39
39
  #
40
40
  # Parameters:
41
41
  # * {string} applicationId - ID associated with the application
42
- # * {string} sortField - Field to sort the results by. Accepted values are: name, id, creationDate
42
+ # * {string} sortField - Field to sort the results by. Accepted values are: name, id, creationDate, lastUpdated
43
43
  # * {string} sortDirection - Direction to sort the results by. Accepted values are: asc, desc
44
44
  # * {string} page - Which page of results to return
45
45
  # * {string} perPage - How many items to return per page
46
46
  # * {string} filterField - Field to filter the results by. Blank or not provided means no filtering. Accepted values are: name
47
47
  # * {string} filter - Filter to apply against the filtered field. Supports globbing. Blank or not provided means no filtering.
48
- # * {string} flowClass - Filter the workflows by the given flow class. Accepted values are: edge, cloud
48
+ # * {string} flowClass - Filter the workflows by the given flow class. Accepted values are: edge, cloud, customNode
49
49
  # * {hash} triggerFilter - Array of triggers to filter by - always filters against default flow version. (https://api.losant.com/#/definitions/flowTriggerFilter)
50
+ # * {string} includeCustomNodes - If the result of the request should also include the details of any custom nodes referenced by the returned workflows
50
51
  # * {string} losantdomain - Domain scope of request (rarely needed)
51
52
  # * {boolean} _actions - Return resource actions in response
52
53
  # * {boolean} _links - Return resource link in response
@@ -74,6 +75,7 @@ module LosantRest
74
75
  query_params[:filter] = params[:filter] if params.has_key?(:filter)
75
76
  query_params[:flowClass] = params[:flowClass] if params.has_key?(:flowClass)
76
77
  query_params[:triggerFilter] = params[:triggerFilter] if params.has_key?(:triggerFilter)
78
+ query_params[:includeCustomNodes] = params[:includeCustomNodes] if params.has_key?(:includeCustomNodes)
77
79
  headers[:losantdomain] = params[:losantdomain] if params.has_key?(:losantdomain)
78
80
  query_params[:_actions] = params[:_actions] if params.has_key?(:_actions)
79
81
  query_params[:_links] = params[:_links] if params.has_key?(:_links)
@@ -89,6 +91,53 @@ module LosantRest
89
91
  body: body)
90
92
  end
91
93
 
94
+ # Import a set of flows and flow versions
95
+ #
96
+ # Authentication:
97
+ # The client must be configured with a valid api
98
+ # access token to call this action. The token
99
+ # must include at least one of the following scopes:
100
+ # all.Application, all.Organization, all.User, flows.*, or flows.import.
101
+ #
102
+ # Parameters:
103
+ # * {string} applicationId - ID associated with the application
104
+ # * {hash} importData - New flow and flow version information (https://api.losant.com/#/definitions/flowsImportPost)
105
+ # * {string} losantdomain - Domain scope of request (rarely needed)
106
+ # * {boolean} _actions - Return resource actions in response
107
+ # * {boolean} _links - Return resource link in response
108
+ # * {boolean} _embedded - Return embedded resources in response
109
+ #
110
+ # Responses:
111
+ # * 201 - Successfully imported workflows (https://api.losant.com/#/definitions/flowsImportResult)
112
+ #
113
+ # Errors:
114
+ # * 400 - Error if malformed request (https://api.losant.com/#/definitions/error)
115
+ # * 404 - Error if application was not found (https://api.losant.com/#/definitions/error)
116
+ def import(params = {})
117
+ params = Utils.symbolize_hash_keys(params)
118
+ query_params = { _actions: false, _links: true, _embedded: true }
119
+ headers = {}
120
+ body = nil
121
+
122
+ raise ArgumentError.new("applicationId is required") unless params.has_key?(:applicationId)
123
+ raise ArgumentError.new("importData is required") unless params.has_key?(:importData)
124
+
125
+ body = params[:importData] if params.has_key?(:importData)
126
+ headers[:losantdomain] = params[:losantdomain] if params.has_key?(:losantdomain)
127
+ query_params[:_actions] = params[:_actions] if params.has_key?(:_actions)
128
+ query_params[:_links] = params[:_links] if params.has_key?(:_links)
129
+ query_params[:_embedded] = params[:_embedded] if params.has_key?(:_embedded)
130
+
131
+ path = "/applications/#{params[:applicationId]}/flows/import"
132
+
133
+ @client.request(
134
+ method: :post,
135
+ path: path,
136
+ query: query_params,
137
+ headers: headers,
138
+ body: body)
139
+ end
140
+
92
141
  # Create a new flow for an application
93
142
  #
94
143
  # Authentication:
@@ -100,6 +149,7 @@ module LosantRest
100
149
  # Parameters:
101
150
  # * {string} applicationId - ID associated with the application
102
151
  # * {hash} flow - New flow information (https://api.losant.com/#/definitions/flowPost)
152
+ # * {string} includeCustomNodes - If the result of the request should also include the details of any custom nodes referenced by the returned workflows
103
153
  # * {string} losantdomain - Domain scope of request (rarely needed)
104
154
  # * {boolean} _actions - Return resource actions in response
105
155
  # * {boolean} _links - Return resource link in response
@@ -121,6 +171,7 @@ module LosantRest
121
171
  raise ArgumentError.new("flow is required") unless params.has_key?(:flow)
122
172
 
123
173
  body = params[:flow] if params.has_key?(:flow)
174
+ query_params[:includeCustomNodes] = params[:includeCustomNodes] if params.has_key?(:includeCustomNodes)
124
175
  headers[:losantdomain] = params[:losantdomain] if params.has_key?(:losantdomain)
125
176
  query_params[:_actions] = params[:_actions] if params.has_key?(:_actions)
126
177
  query_params[:_links] = params[:_links] if params.has_key?(:_links)
@@ -39,7 +39,7 @@ module LosantRest
39
39
  #
40
40
  # Parameters:
41
41
  # * {string} applicationId - ID associated with the application
42
- # * {string} sortField - Field to sort the results by. Accepted values are: name, id, creationDate, integrationType
42
+ # * {string} sortField - Field to sort the results by. Accepted values are: name, id, creationDate, integrationType, lastUpdated
43
43
  # * {string} sortDirection - Direction to sort the results by. Accepted values are: asc, desc
44
44
  # * {string} page - Which page of results to return
45
45
  # * {string} perPage - How many items to return per page
@@ -38,7 +38,7 @@ module LosantRest
38
38
  # all.User, all.User.read, orgs.*, or orgs.get.
39
39
  #
40
40
  # Parameters:
41
- # * {string} sortField - Field to sort the results by. Accepted values are: name, id, creationDate
41
+ # * {string} sortField - Field to sort the results by. Accepted values are: name, id, creationDate, lastUpdated
42
42
  # * {string} sortDirection - Direction to sort the results by. Accepted values are: asc, desc
43
43
  # * {string} page - Which page of results to return
44
44
  # * {string} perPage - How many items to return per page
@@ -40,7 +40,7 @@ module LosantRest
40
40
  # Parameters:
41
41
  # * {string} orgId - ID associated with the organization
42
42
  # * {string} solutionId - ID associated with the solution
43
- # * {string} sortField - Field to sort the results by. Accepted values are: email, firstName, lastName, id, creationDate, lastLogin
43
+ # * {string} sortField - Field to sort the results by. Accepted values are: email, firstName, lastName, id, creationDate, lastLogin, lastUpdated
44
44
  # * {string} sortDirection - Direction to sort the results by. Accepted values are: asc, desc
45
45
  # * {string} page - Which page of results to return
46
46
  # * {string} perPage - How many items to return per page
@@ -39,7 +39,7 @@ module LosantRest
39
39
  #
40
40
  # Parameters:
41
41
  # * {string} orgId - ID associated with the organization
42
- # * {string} sortField - Field to sort the results by. Accepted values are: name, id, creationDate
42
+ # * {string} sortField - Field to sort the results by. Accepted values are: name, id, creationDate, lastUpdated
43
43
  # * {string} sortDirection - Direction to sort the results by. Accepted values are: asc, desc
44
44
  # * {string} page - Which page of results to return
45
45
  # * {string} perPage - How many items to return per page
@@ -21,5 +21,5 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  module LosantRest
24
- VERSION = "1.6.0"
24
+ VERSION = "1.7.0"
25
25
  end
@@ -39,7 +39,7 @@ module LosantRest
39
39
  #
40
40
  # Parameters:
41
41
  # * {string} applicationId - ID associated with the application
42
- # * {string} sortField - Field to sort the results by. Accepted values are: name, id, creationDate
42
+ # * {string} sortField - Field to sort the results by. Accepted values are: name, id, creationDate, lastUpdated
43
43
  # * {string} sortDirection - Direction to sort the results by. Accepted values are: asc, desc
44
44
  # * {string} page - Which page of results to return
45
45
  # * {string} perPage - How many items to return per page
@@ -93,6 +93,7 @@
93
93
  "dataTableRows.truncate",
94
94
  "dataTables.get",
95
95
  "dataTables.post",
96
+ "device.commandStream",
96
97
  "device.delete",
97
98
  "device.export",
98
99
  "device.get",
@@ -104,6 +105,7 @@
104
105
  "device.removeData",
105
106
  "device.sendCommand",
106
107
  "device.sendState",
108
+ "device.stateStream",
107
109
  "deviceRecipe.bulkCreate",
108
110
  "deviceRecipe.delete",
109
111
  "deviceRecipe.get",
@@ -53,6 +53,7 @@
53
53
  "ExperienceGroup",
54
54
  "ExperienceView",
55
55
  "ExperienceUser",
56
+ "File",
56
57
  "Flow",
57
58
  "SolutionUser",
58
59
  "Integration",
@@ -51,6 +51,7 @@
51
51
  "ExperienceGroup",
52
52
  "ExperienceView",
53
53
  "ExperienceUser",
54
+ "File",
54
55
  "Flow",
55
56
  "SolutionUser",
56
57
  "Integration",
@@ -60,6 +60,7 @@
60
60
  "ExperienceGroup",
61
61
  "ExperienceView",
62
62
  "ExperienceUser",
63
+ "File",
63
64
  "Flow",
64
65
  "SolutionUser",
65
66
  "Integration",
@@ -43,6 +43,13 @@
43
43
  "minimum": 5,
44
44
  "maximum": 600
45
45
  },
46
+ "defaultTheme": {
47
+ "type": "string",
48
+ "enum": [
49
+ "dark",
50
+ "light"
51
+ ]
52
+ },
46
53
  "isPasswordProtected": {
47
54
  "type": "boolean"
48
55
  },
@@ -115,6 +115,13 @@
115
115
  "minimum": 5,
116
116
  "maximum": 600
117
117
  },
118
+ "defaultTheme": {
119
+ "type": "string",
120
+ "enum": [
121
+ "dark",
122
+ "light"
123
+ ]
124
+ },
118
125
  "public": {
119
126
  "type": "boolean"
120
127
  },
@@ -69,6 +69,13 @@
69
69
  "minimum": 5,
70
70
  "maximum": 600
71
71
  },
72
+ "defaultTheme": {
73
+ "type": "string",
74
+ "enum": [
75
+ "dark",
76
+ "light"
77
+ ]
78
+ },
72
79
  "reportConfigs": {
73
80
  "type": "array",
74
81
  "max": 10,
@@ -50,6 +50,13 @@
50
50
  "minimum": 5,
51
51
  "maximum": 600
52
52
  },
53
+ "defaultTheme": {
54
+ "type": "string",
55
+ "enum": [
56
+ "dark",
57
+ "light"
58
+ ]
59
+ },
53
60
  "isPasswordProtected": {
54
61
  "type": "boolean"
55
62
  },
@@ -0,0 +1,54 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "time": {
6
+ "oneOf": [
7
+ {
8
+ "type": "string"
9
+ },
10
+ {
11
+ "type": "number"
12
+ },
13
+ {
14
+ "type": "object",
15
+ "properties": {
16
+ "$date": {
17
+ "type": "string"
18
+ }
19
+ },
20
+ "additionalProperties": false,
21
+ "required": [
22
+ "$date"
23
+ ]
24
+ }
25
+ ]
26
+ },
27
+ "relayId": {
28
+ "type": "string"
29
+ },
30
+ "meta": {},
31
+ "data": {
32
+ "type": "object",
33
+ "patternProperties": {
34
+ "^[0-9a-zA-Z_-]{1,255}$": {
35
+ "type": [
36
+ "number",
37
+ "string",
38
+ "boolean"
39
+ ]
40
+ }
41
+ },
42
+ "additionalProperties": false
43
+ },
44
+ "flowVersion": {
45
+ "type": "string",
46
+ "minLength": 1,
47
+ "maxLength": 255
48
+ }
49
+ },
50
+ "required": [
51
+ "data"
52
+ ],
53
+ "additionalProperties": false
54
+ }
data/schemas/flow.json CHANGED
@@ -31,6 +31,11 @@
31
31
  "type": "string",
32
32
  "maxLength": 32767
33
33
  },
34
+ "iconData": {
35
+ "type": "string",
36
+ "maxLength": 32767,
37
+ "pattern": "^data:image/(jpg|jpeg|png|svg\\+xml);base64,[0-9a-zA-Z+/=]*$"
38
+ },
34
39
  "enabled": {
35
40
  "type": "boolean"
36
41
  },
@@ -46,7 +51,8 @@
46
51
  "type": "string",
47
52
  "enum": [
48
53
  "cloud",
49
- "edge"
54
+ "edge",
55
+ "customNode"
50
56
  ]
51
57
  },
52
58
  "triggers": {
@@ -76,6 +82,7 @@
76
82
  "integration",
77
83
  "mqttTopic",
78
84
  "request",
85
+ "customNodeStart",
79
86
  "timer",
80
87
  "udp",
81
88
  "virtualButton",
@@ -146,6 +153,332 @@
146
153
  ]
147
154
  }
148
155
  },
156
+ "customNodeConfig": {
157
+ "type": "object",
158
+ "properties": {
159
+ "outputCount": {
160
+ "type": "number",
161
+ "enum": [
162
+ 1,
163
+ 2
164
+ ]
165
+ },
166
+ "resultMode": {
167
+ "type": "string",
168
+ "enum": [
169
+ "optional",
170
+ "required",
171
+ "none"
172
+ ]
173
+ },
174
+ "resultDescription": {
175
+ "type": "string",
176
+ "maxLength": 32767
177
+ },
178
+ "fields": {
179
+ "type": "array",
180
+ "maxItems": 100,
181
+ "items": {
182
+ "oneOf": [
183
+ {
184
+ "type": "object",
185
+ "properties": {
186
+ "type": {
187
+ "type": "string",
188
+ "enum": [
189
+ "checkbox"
190
+ ]
191
+ },
192
+ "label": {
193
+ "type": "string",
194
+ "minLength": 1,
195
+ "maxLength": 1024
196
+ },
197
+ "id": {
198
+ "type": "string",
199
+ "minLength": 1,
200
+ "maxLength": 1024
201
+ },
202
+ "description": {
203
+ "type": "string",
204
+ "maxLength": 32767
205
+ },
206
+ "defaultValue": {
207
+ "type": "boolean"
208
+ }
209
+ },
210
+ "additionalProperties": false,
211
+ "required": [
212
+ "type",
213
+ "label"
214
+ ]
215
+ },
216
+ {
217
+ "type": "object",
218
+ "properties": {
219
+ "type": {
220
+ "type": "string",
221
+ "enum": [
222
+ "select"
223
+ ]
224
+ },
225
+ "label": {
226
+ "type": "string",
227
+ "minLength": 1,
228
+ "maxLength": 1024
229
+ },
230
+ "id": {
231
+ "type": "string",
232
+ "minLength": 1,
233
+ "maxLength": 1024
234
+ },
235
+ "description": {
236
+ "type": "string",
237
+ "maxLength": 32767
238
+ },
239
+ "defaultValue": {
240
+ "type": "string",
241
+ "minLength": 1,
242
+ "maxLength": 1024
243
+ },
244
+ "options": {
245
+ "type": "array",
246
+ "minItems": 1,
247
+ "maxItems": 100,
248
+ "items": {
249
+ "type": "object",
250
+ "properties": {
251
+ "label": {
252
+ "type": "string",
253
+ "maxLength": 1024
254
+ },
255
+ "value": {
256
+ "type": "string",
257
+ "minLength": 1,
258
+ "maxLength": 1024
259
+ }
260
+ },
261
+ "additionalProperties": false,
262
+ "required": [
263
+ "value"
264
+ ]
265
+ }
266
+ }
267
+ },
268
+ "additionalProperties": false,
269
+ "required": [
270
+ "type",
271
+ "label",
272
+ "defaultValue",
273
+ "options"
274
+ ]
275
+ },
276
+ {
277
+ "type": "object",
278
+ "properties": {
279
+ "type": {
280
+ "type": "string",
281
+ "enum": [
282
+ "stringTemplate"
283
+ ]
284
+ },
285
+ "label": {
286
+ "type": "string",
287
+ "minLength": 1,
288
+ "maxLength": 1024
289
+ },
290
+ "id": {
291
+ "type": "string",
292
+ "minLength": 1,
293
+ "maxLength": 1024
294
+ },
295
+ "description": {
296
+ "type": "string",
297
+ "maxLength": 32767
298
+ },
299
+ "defaultValue": {
300
+ "type": "string",
301
+ "maxLength": 1024
302
+ },
303
+ "required": {
304
+ "type": "boolean"
305
+ },
306
+ "validRegExp": {
307
+ "type": "string",
308
+ "maxLength": 1024
309
+ }
310
+ },
311
+ "additionalProperties": false,
312
+ "required": [
313
+ "type",
314
+ "label"
315
+ ]
316
+ },
317
+ {
318
+ "type": "object",
319
+ "properties": {
320
+ "type": {
321
+ "type": "string",
322
+ "enum": [
323
+ "numberTemplate"
324
+ ]
325
+ },
326
+ "label": {
327
+ "type": "string",
328
+ "minLength": 1,
329
+ "maxLength": 1024
330
+ },
331
+ "id": {
332
+ "type": "string",
333
+ "minLength": 1,
334
+ "maxLength": 1024
335
+ },
336
+ "description": {
337
+ "type": "string",
338
+ "maxLength": 32767
339
+ },
340
+ "defaultValue": {
341
+ "type": "number"
342
+ },
343
+ "required": {
344
+ "type": "boolean"
345
+ },
346
+ "validMin": {
347
+ "type": "number"
348
+ },
349
+ "validMax": {
350
+ "type": "number"
351
+ }
352
+ },
353
+ "additionalProperties": false,
354
+ "required": [
355
+ "type",
356
+ "label"
357
+ ]
358
+ },
359
+ {
360
+ "type": "object",
361
+ "properties": {
362
+ "type": {
363
+ "type": "string",
364
+ "enum": [
365
+ "jsonTemplate"
366
+ ]
367
+ },
368
+ "label": {
369
+ "type": "string",
370
+ "minLength": 1,
371
+ "maxLength": 1024
372
+ },
373
+ "id": {
374
+ "type": "string",
375
+ "minLength": 1,
376
+ "maxLength": 1024
377
+ },
378
+ "description": {
379
+ "type": "string",
380
+ "maxLength": 32767
381
+ },
382
+ "defaultValue": {
383
+ "type": "string",
384
+ "maxLength": 32767
385
+ },
386
+ "required": {
387
+ "type": "boolean"
388
+ }
389
+ },
390
+ "additionalProperties": false,
391
+ "required": [
392
+ "type",
393
+ "label"
394
+ ]
395
+ },
396
+ {
397
+ "type": "object",
398
+ "properties": {
399
+ "type": {
400
+ "type": "string",
401
+ "enum": [
402
+ "payloadPath"
403
+ ]
404
+ },
405
+ "label": {
406
+ "type": "string",
407
+ "minLength": 1,
408
+ "maxLength": 1024
409
+ },
410
+ "id": {
411
+ "type": "string",
412
+ "minLength": 1,
413
+ "maxLength": 1024
414
+ },
415
+ "description": {
416
+ "type": "string",
417
+ "maxLength": 32767
418
+ },
419
+ "required": {
420
+ "type": "boolean"
421
+ }
422
+ },
423
+ "additionalProperties": false,
424
+ "required": [
425
+ "type",
426
+ "label"
427
+ ]
428
+ },
429
+ {
430
+ "type": "object",
431
+ "properties": {
432
+ "type": {
433
+ "type": "string",
434
+ "enum": [
435
+ "section"
436
+ ]
437
+ },
438
+ "label": {
439
+ "type": "string",
440
+ "minLength": 1,
441
+ "maxLength": 1024
442
+ },
443
+ "id": {
444
+ "type": "string",
445
+ "minLength": 1,
446
+ "maxLength": 1024
447
+ },
448
+ "description": {
449
+ "type": "string",
450
+ "maxLength": 32767
451
+ }
452
+ },
453
+ "additionalProperties": false,
454
+ "required": [
455
+ "type",
456
+ "label"
457
+ ]
458
+ }
459
+ ]
460
+ }
461
+ }
462
+ },
463
+ "additionalProperties": false,
464
+ "required": [
465
+ "outputCount",
466
+ "resultMode",
467
+ "fields"
468
+ ]
469
+ },
470
+ "customNodeSupports": {
471
+ "type": "array",
472
+ "items": {
473
+ "type": "string",
474
+ "enum": [
475
+ "cloud"
476
+ ]
477
+ }
478
+ },
479
+ "customNodeUseCount": {
480
+ "type": "number"
481
+ },
149
482
  "globals": {
150
483
  "type": "array",
151
484
  "maxItems": 100,