losant_rest 1.0.7 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +1 -1
  4. data/docs/_schemas.md +616 -12
  5. data/docs/applications.md +1 -1
  6. data/docs/auditLog.md +43 -0
  7. data/docs/auditLogs.md +47 -0
  8. data/docs/dashboards.md +1 -1
  9. data/docs/device.md +1 -1
  10. data/docs/devices.md +1 -1
  11. data/docs/org.md +1 -1
  12. data/docs/orgInvites.md +77 -0
  13. data/lib/losant_rest/access_token.rb +22 -0
  14. data/lib/losant_rest/access_tokens.rb +22 -0
  15. data/lib/losant_rest/application.rb +22 -0
  16. data/lib/losant_rest/application_key.rb +22 -0
  17. data/lib/losant_rest/application_keys.rb +22 -0
  18. data/lib/losant_rest/applications.rb +23 -1
  19. data/lib/losant_rest/audit_log.rb +73 -0
  20. data/lib/losant_rest/audit_logs.rb +85 -0
  21. data/lib/losant_rest/auth.rb +22 -0
  22. data/lib/losant_rest/client.rb +36 -2
  23. data/lib/losant_rest/dashboard.rb +22 -0
  24. data/lib/losant_rest/dashboards.rb +23 -1
  25. data/lib/losant_rest/data.rb +22 -0
  26. data/lib/losant_rest/device.rb +23 -1
  27. data/lib/losant_rest/device_recipe.rb +22 -0
  28. data/lib/losant_rest/device_recipes.rb +22 -0
  29. data/lib/losant_rest/devices.rb +23 -1
  30. data/lib/losant_rest/error.rb +22 -0
  31. data/lib/losant_rest/event.rb +22 -0
  32. data/lib/losant_rest/events.rb +22 -0
  33. data/lib/losant_rest/flow.rb +22 -0
  34. data/lib/losant_rest/flows.rb +22 -0
  35. data/lib/losant_rest/me.rb +22 -0
  36. data/lib/losant_rest/org.rb +24 -2
  37. data/lib/losant_rest/org_invites.rb +116 -0
  38. data/lib/losant_rest/orgs.rb +22 -0
  39. data/lib/losant_rest/solution.rb +22 -0
  40. data/lib/losant_rest/solution_user.rb +22 -0
  41. data/lib/losant_rest/solution_users.rb +22 -0
  42. data/lib/losant_rest/solutions.rb +22 -0
  43. data/lib/losant_rest/utils.rb +22 -0
  44. data/lib/losant_rest/version.rb +23 -1
  45. data/lib/losant_rest/webhook.rb +22 -0
  46. data/lib/losant_rest/webhooks.rb +22 -0
  47. data/lib/losant_rest.rb +25 -0
  48. data/schemas/auditLog.json +102 -0
  49. data/schemas/auditLogFilter.json +114 -0
  50. data/schemas/auditLogs.json +138 -0
  51. data/schemas/dashboard.json +2 -2
  52. data/schemas/dashboardPatch.json +2 -2
  53. data/schemas/dashboardPost.json +2 -2
  54. data/schemas/dashboards.json +2 -2
  55. data/schemas/flow.json +0 -1
  56. data/schemas/flowPatch.json +0 -1
  57. data/schemas/flowPost.json +0 -1
  58. data/schemas/flows.json +0 -1
  59. data/schemas/orgInviteAction.json +24 -0
  60. data/schemas/orgInviteInfo.json +31 -0
  61. data/schemas/orgInviteResult.json +13 -0
  62. metadata +14 -2
@@ -1,3 +1,25 @@
1
+ # The MIT License (MIT)
2
+ #
3
+ # Copyright (c) 2017 Losant IoT, Inc.
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
1
23
  module LosantRest
2
- VERSION = "1.0.7"
24
+ VERSION = "1.0.8"
3
25
  end
@@ -1,3 +1,25 @@
1
+ # The MIT License (MIT)
2
+ #
3
+ # Copyright (c) 2017 Losant IoT, Inc.
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
1
23
  module LosantRest
2
24
 
3
25
  # Class containing all the actions for the Webhook Resource
@@ -1,3 +1,25 @@
1
+ # The MIT License (MIT)
2
+ #
3
+ # Copyright (c) 2017 Losant IoT, Inc.
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
1
23
  module LosantRest
2
24
 
3
25
  # Class containing all the actions for the Webhooks Resource
data/lib/losant_rest.rb CHANGED
@@ -1,3 +1,25 @@
1
+ # The MIT License (MIT)
2
+ #
3
+ # Copyright (c) 2017 Losant IoT, Inc.
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
1
23
  require_relative "losant_rest/version"
2
24
  require_relative "losant_rest/error"
3
25
  require_relative "losant_rest/utils"
@@ -7,6 +29,8 @@ require_relative "losant_rest/application"
7
29
  require_relative "losant_rest/application_key"
8
30
  require_relative "losant_rest/application_keys"
9
31
  require_relative "losant_rest/applications"
32
+ require_relative "losant_rest/audit_log"
33
+ require_relative "losant_rest/audit_logs"
10
34
  require_relative "losant_rest/auth"
11
35
  require_relative "losant_rest/dashboard"
12
36
  require_relative "losant_rest/dashboards"
@@ -21,6 +45,7 @@ require_relative "losant_rest/flow"
21
45
  require_relative "losant_rest/flows"
22
46
  require_relative "losant_rest/me"
23
47
  require_relative "losant_rest/org"
48
+ require_relative "losant_rest/org_invites"
24
49
  require_relative "losant_rest/orgs"
25
50
  require_relative "losant_rest/solution"
26
51
  require_relative "losant_rest/solution_user"
@@ -0,0 +1,102 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "id": {
6
+ "type": "string",
7
+ "pattern": "^[A-Fa-f\\d]{24}$"
8
+ },
9
+ "auditLogId": {
10
+ "type": "string",
11
+ "pattern": "^[A-Fa-f\\d]{24}$"
12
+ },
13
+ "creationDate": {
14
+ "type": "string",
15
+ "format": "date-time"
16
+ },
17
+ "orgId": {
18
+ "type": "string",
19
+ "pattern": "^[A-Fa-f\\d]{24}$"
20
+ },
21
+ "primaryTargetId": {
22
+ "type": "string",
23
+ "pattern": "^[A-Fa-f\\d]{24}$"
24
+ },
25
+ "primaryTargetType": {
26
+ "type": "string",
27
+ "enum": [
28
+ "Application",
29
+ "Dashboard",
30
+ "Solution",
31
+ "OrgInvite"
32
+ ]
33
+ },
34
+ "primaryTargetName": {
35
+ "type": "string",
36
+ "maxLength": 1024
37
+ },
38
+ "secondaryTargetId": {
39
+ "type": "string",
40
+ "pattern": "^[A-Fa-f\\d]{24}$"
41
+ },
42
+ "secondaryTargetType": {
43
+ "type": "string",
44
+ "enum": [
45
+ "ApplicationKey",
46
+ "Device",
47
+ "DeviceRecipe",
48
+ "Event",
49
+ "Flow",
50
+ "SolutionUser",
51
+ "Webhook"
52
+ ]
53
+ },
54
+ "secondaryTargetName": {
55
+ "type": "string",
56
+ "maxLength": 1024
57
+ },
58
+ "actorId": {
59
+ "type": "string",
60
+ "pattern": "^[A-Fa-f\\d]{24}$"
61
+ },
62
+ "actorType": {
63
+ "type": "string",
64
+ "enum": [
65
+ "Application",
66
+ "Device",
67
+ "Flow",
68
+ "SolutionUser",
69
+ "User"
70
+ ]
71
+ },
72
+ "actorName": {
73
+ "type": "string",
74
+ "maxLength": 1024
75
+ },
76
+ "requestResource": {
77
+ "type": "string",
78
+ "maxLength": 1024
79
+ },
80
+ "requestAction": {
81
+ "type": "string",
82
+ "maxLength": 1024
83
+ },
84
+ "requestQueryParams": {
85
+ "type": "object"
86
+ },
87
+ "requestBody": {
88
+ "type": "object"
89
+ },
90
+ "requestPathParams": {
91
+ "type": "object"
92
+ },
93
+ "responseBody": {
94
+ "type": "object"
95
+ },
96
+ "responseStatus": {
97
+ "type": "integer",
98
+ "minimum": 100,
99
+ "maximum": 599
100
+ }
101
+ }
102
+ }
@@ -0,0 +1,114 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "primaryTarget": {
6
+ "type": "array",
7
+ "items": {
8
+ "type": "object",
9
+ "properties": {
10
+ "id": {
11
+ "type": "string",
12
+ "pattern": "^[A-Fa-f\\d]{24}$"
13
+ },
14
+ "type": {
15
+ "type": "string",
16
+ "enum": [
17
+ "Application",
18
+ "Dashboard",
19
+ "Solution",
20
+ "OrgInvite"
21
+ ]
22
+ },
23
+ "name": {
24
+ "type": "string",
25
+ "maxLength": 1024
26
+ }
27
+ },
28
+ "additionalProperties": false
29
+ }
30
+ },
31
+ "secondaryTarget": {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "object",
35
+ "properties": {
36
+ "id": {
37
+ "type": "string",
38
+ "pattern": "^[A-Fa-f\\d]{24}$"
39
+ },
40
+ "type": {
41
+ "type": "string",
42
+ "enum": [
43
+ "ApplicationKey",
44
+ "Device",
45
+ "DeviceRecipe",
46
+ "Event",
47
+ "Flow",
48
+ "SolutionUser",
49
+ "Webhook"
50
+ ]
51
+ },
52
+ "name": {
53
+ "type": "string",
54
+ "maxLength": 1024
55
+ }
56
+ },
57
+ "additionalProperties": false
58
+ }
59
+ },
60
+ "actor": {
61
+ "type": "array",
62
+ "items": {
63
+ "type": "object",
64
+ "properties": {
65
+ "id": {
66
+ "type": "string",
67
+ "pattern": "^[A-Fa-f\\d]{24}$"
68
+ },
69
+ "type": {
70
+ "type": "string",
71
+ "enum": [
72
+ "Application",
73
+ "Device",
74
+ "Flow",
75
+ "SolutionUser",
76
+ "User"
77
+ ]
78
+ },
79
+ "name": {
80
+ "type": "string",
81
+ "maxLength": 1024
82
+ }
83
+ },
84
+ "additionalProperties": false
85
+ }
86
+ },
87
+ "request": {
88
+ "type": "array",
89
+ "items": {
90
+ "type": "object",
91
+ "properties": {
92
+ "resource": {
93
+ "type": "string",
94
+ "maxLength": 1024
95
+ },
96
+ "action": {
97
+ "type": "string",
98
+ "maxLength": 1024
99
+ }
100
+ },
101
+ "additionalProperties": false
102
+ }
103
+ },
104
+ "responseCode": {
105
+ "type": "array",
106
+ "items": {
107
+ "type": "integer",
108
+ "minimum": 100,
109
+ "maximum": 599
110
+ }
111
+ }
112
+ },
113
+ "additionalProperties": false
114
+ }
@@ -0,0 +1,138 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "items": {
6
+ "type": "array",
7
+ "items": {
8
+ "title": "Audit Log",
9
+ "description": "Schema for a single Audit Log entry",
10
+ "type": "object",
11
+ "properties": {
12
+ "id": {
13
+ "type": "string",
14
+ "pattern": "^[A-Fa-f\\d]{24}$"
15
+ },
16
+ "auditLogId": {
17
+ "type": "string",
18
+ "pattern": "^[A-Fa-f\\d]{24}$"
19
+ },
20
+ "creationDate": {
21
+ "type": "string",
22
+ "format": "date-time"
23
+ },
24
+ "orgId": {
25
+ "type": "string",
26
+ "pattern": "^[A-Fa-f\\d]{24}$"
27
+ },
28
+ "primaryTargetId": {
29
+ "type": "string",
30
+ "pattern": "^[A-Fa-f\\d]{24}$"
31
+ },
32
+ "primaryTargetType": {
33
+ "type": "string",
34
+ "enum": [
35
+ "Application",
36
+ "Dashboard",
37
+ "Solution",
38
+ "OrgInvite"
39
+ ]
40
+ },
41
+ "primaryTargetName": {
42
+ "type": "string",
43
+ "maxLength": 1024
44
+ },
45
+ "secondaryTargetId": {
46
+ "type": "string",
47
+ "pattern": "^[A-Fa-f\\d]{24}$"
48
+ },
49
+ "secondaryTargetType": {
50
+ "type": "string",
51
+ "enum": [
52
+ "ApplicationKey",
53
+ "Device",
54
+ "DeviceRecipe",
55
+ "Event",
56
+ "Flow",
57
+ "SolutionUser",
58
+ "Webhook"
59
+ ]
60
+ },
61
+ "secondaryTargetName": {
62
+ "type": "string",
63
+ "maxLength": 1024
64
+ },
65
+ "actorId": {
66
+ "type": "string",
67
+ "pattern": "^[A-Fa-f\\d]{24}$"
68
+ },
69
+ "actorType": {
70
+ "type": "string",
71
+ "enum": [
72
+ "Application",
73
+ "Device",
74
+ "Flow",
75
+ "SolutionUser",
76
+ "User"
77
+ ]
78
+ },
79
+ "actorName": {
80
+ "type": "string",
81
+ "maxLength": 1024
82
+ },
83
+ "requestResource": {
84
+ "type": "string",
85
+ "maxLength": 1024
86
+ },
87
+ "requestAction": {
88
+ "type": "string",
89
+ "maxLength": 1024
90
+ },
91
+ "requestQueryParams": {
92
+ "type": "object"
93
+ },
94
+ "requestBody": {
95
+ "type": "object"
96
+ },
97
+ "requestPathParams": {
98
+ "type": "object"
99
+ },
100
+ "responseBody": {
101
+ "type": "object"
102
+ },
103
+ "responseStatus": {
104
+ "type": "integer",
105
+ "minimum": 100,
106
+ "maximum": 599
107
+ }
108
+ }
109
+ }
110
+ },
111
+ "count": {
112
+ "type": "integer"
113
+ },
114
+ "totalCount": {
115
+ "type": "integer"
116
+ },
117
+ "perPage": {
118
+ "type": "integer"
119
+ },
120
+ "page": {
121
+ "type": "integer"
122
+ },
123
+ "sortField": {
124
+ "type": "string"
125
+ },
126
+ "sortDirection": {
127
+ "type": "string",
128
+ "enum": [
129
+ "asc",
130
+ "desc"
131
+ ]
132
+ },
133
+ "orgId": {
134
+ "type": "string",
135
+ "pattern": "^[A-Fa-f\\d]{24}$"
136
+ }
137
+ }
138
+ }
@@ -85,13 +85,13 @@
85
85
  }
86
86
  },
87
87
  "required": [
88
- "id",
89
88
  "blockType",
90
89
  "startX",
91
90
  "startY",
92
91
  "width",
93
92
  "height"
94
- ]
93
+ ],
94
+ "additionalProperties": false
95
95
  }
96
96
  }
97
97
  }
@@ -43,13 +43,13 @@
43
43
  }
44
44
  },
45
45
  "required": [
46
- "id",
47
46
  "blockType",
48
47
  "startX",
49
48
  "startY",
50
49
  "width",
51
50
  "height"
52
- ]
51
+ ],
52
+ "additionalProperties": false
53
53
  }
54
54
  },
55
55
  "description": {
@@ -47,13 +47,13 @@
47
47
  }
48
48
  },
49
49
  "required": [
50
- "id",
51
50
  "blockType",
52
51
  "startX",
53
52
  "startY",
54
53
  "width",
55
54
  "height"
56
- ]
55
+ ],
56
+ "additionalProperties": false
57
57
  }
58
58
  },
59
59
  "description": {
@@ -92,13 +92,13 @@
92
92
  }
93
93
  },
94
94
  "required": [
95
- "id",
96
95
  "blockType",
97
96
  "startX",
98
97
  "startY",
99
98
  "width",
100
99
  "height"
101
- ]
100
+ ],
101
+ "additionalProperties": false
102
102
  }
103
103
  }
104
104
  }
data/schemas/flow.json CHANGED
@@ -96,7 +96,6 @@
96
96
  },
97
97
  "additionalProperties": false,
98
98
  "required": [
99
- "id",
100
99
  "type"
101
100
  ]
102
101
  }
@@ -76,7 +76,6 @@
76
76
  },
77
77
  "additionalProperties": false,
78
78
  "required": [
79
- "id",
80
79
  "type"
81
80
  ]
82
81
  }
@@ -76,7 +76,6 @@
76
76
  },
77
77
  "additionalProperties": false,
78
78
  "required": [
79
- "id",
80
79
  "type"
81
80
  ]
82
81
  }
data/schemas/flows.json CHANGED
@@ -103,7 +103,6 @@
103
103
  },
104
104
  "additionalProperties": false,
105
105
  "required": [
106
- "id",
107
106
  "type"
108
107
  ]
109
108
  }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "email": {
6
+ "type": "string",
7
+ "format": "email",
8
+ "maxLength": 1024
9
+ },
10
+ "token": {
11
+ "type": "string",
12
+ "minLength": 1
13
+ },
14
+ "accept": {
15
+ "type": "boolean"
16
+ }
17
+ },
18
+ "additionalProperties": false,
19
+ "required": [
20
+ "email",
21
+ "token",
22
+ "accept"
23
+ ]
24
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "orgName": {
6
+ "type": "string",
7
+ "minLength": 1,
8
+ "maxLength": 255
9
+ },
10
+ "email": {
11
+ "type": "string",
12
+ "format": "email",
13
+ "maxLength": 1024
14
+ },
15
+ "role": {
16
+ "type": "string",
17
+ "enum": [
18
+ "admin",
19
+ "edit",
20
+ "view"
21
+ ]
22
+ },
23
+ "inviteDate": {
24
+ "type": "string",
25
+ "format": "date-time"
26
+ },
27
+ "ttl": {
28
+ "type": "number"
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "accepted": {
6
+ "type": "boolean"
7
+ },
8
+ "orgId": {
9
+ "type": "string",
10
+ "pattern": "^[A-Fa-f\\d]{24}$"
11
+ }
12
+ }
13
+ }