losant_rest 1.8.7 → 1.8.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/docs/_schemas.md +38618 -21196
  3. data/docs/application.md +76 -0
  4. data/docs/auth.md +0 -36
  5. data/docs/dashboards.md +1 -1
  6. data/docs/dataTableRows.md +2 -2
  7. data/docs/device.md +1 -0
  8. data/docs/events.md +81 -0
  9. data/docs/file.md +43 -0
  10. data/docs/me.md +50 -13
  11. data/lib/losant_rest.rb +0 -4
  12. data/lib/losant_rest/application.rb +90 -0
  13. data/lib/losant_rest/application_api_token.rb +2 -0
  14. data/lib/losant_rest/application_api_tokens.rb +2 -0
  15. data/lib/losant_rest/application_certificate.rb +2 -0
  16. data/lib/losant_rest/application_certificate_authorities.rb +2 -0
  17. data/lib/losant_rest/application_certificate_authority.rb +2 -0
  18. data/lib/losant_rest/application_certificates.rb +2 -0
  19. data/lib/losant_rest/application_key.rb +2 -0
  20. data/lib/losant_rest/application_keys.rb +2 -0
  21. data/lib/losant_rest/applications.rb +2 -0
  22. data/lib/losant_rest/audit_log.rb +2 -0
  23. data/lib/losant_rest/audit_logs.rb +2 -0
  24. data/lib/losant_rest/auth.rb +2 -42
  25. data/lib/losant_rest/client.rb +2 -18
  26. data/lib/losant_rest/dashboard.rb +2 -0
  27. data/lib/losant_rest/dashboards.rb +3 -1
  28. data/lib/losant_rest/data.rb +2 -0
  29. data/lib/losant_rest/data_table.rb +2 -0
  30. data/lib/losant_rest/data_table_row.rb +2 -0
  31. data/lib/losant_rest/data_table_rows.rb +4 -2
  32. data/lib/losant_rest/data_tables.rb +2 -0
  33. data/lib/losant_rest/device.rb +4 -0
  34. data/lib/losant_rest/device_recipe.rb +2 -0
  35. data/lib/losant_rest/device_recipes.rb +2 -0
  36. data/lib/losant_rest/devices.rb +2 -0
  37. data/lib/losant_rest/edge_deployments.rb +2 -0
  38. data/lib/losant_rest/event.rb +2 -0
  39. data/lib/losant_rest/events.rb +103 -0
  40. data/lib/losant_rest/experience.rb +2 -0
  41. data/lib/losant_rest/experience_domain.rb +2 -0
  42. data/lib/losant_rest/experience_domains.rb +2 -0
  43. data/lib/losant_rest/experience_endpoint.rb +2 -0
  44. data/lib/losant_rest/experience_endpoints.rb +2 -0
  45. data/lib/losant_rest/experience_group.rb +2 -0
  46. data/lib/losant_rest/experience_groups.rb +2 -0
  47. data/lib/losant_rest/experience_slug.rb +2 -0
  48. data/lib/losant_rest/experience_slugs.rb +2 -0
  49. data/lib/losant_rest/experience_user.rb +2 -0
  50. data/lib/losant_rest/experience_users.rb +2 -0
  51. data/lib/losant_rest/experience_version.rb +2 -0
  52. data/lib/losant_rest/experience_versions.rb +2 -0
  53. data/lib/losant_rest/experience_view.rb +2 -0
  54. data/lib/losant_rest/experience_views.rb +2 -0
  55. data/lib/losant_rest/file.rb +2 -0
  56. data/lib/losant_rest/files.rb +2 -0
  57. data/lib/losant_rest/flow.rb +2 -0
  58. data/lib/losant_rest/flow_version.rb +2 -0
  59. data/lib/losant_rest/flow_versions.rb +2 -0
  60. data/lib/losant_rest/flows.rb +2 -0
  61. data/lib/losant_rest/integration.rb +2 -0
  62. data/lib/losant_rest/integrations.rb +2 -0
  63. data/lib/losant_rest/me.rb +57 -13
  64. data/lib/losant_rest/notebook.rb +2 -0
  65. data/lib/losant_rest/notebooks.rb +2 -0
  66. data/lib/losant_rest/org.rb +2 -0
  67. data/lib/losant_rest/org_invites.rb +2 -0
  68. data/lib/losant_rest/orgs.rb +2 -0
  69. data/lib/losant_rest/version.rb +1 -1
  70. data/lib/losant_rest/webhook.rb +2 -0
  71. data/lib/losant_rest/webhooks.rb +2 -0
  72. data/schemas/advancedEventQuery.json +817 -0
  73. data/schemas/{dataTableQuery.json → advancedQuery.json} +5 -4
  74. data/schemas/apiTokens.json +4 -1
  75. data/schemas/application.json +30 -1
  76. data/schemas/applicationApiTokenPost.json +5 -0
  77. data/schemas/applicationCertificate.json +29 -1
  78. data/schemas/applicationCertificateAuthorities.json +36 -3
  79. data/schemas/applicationCertificateAuthority.json +32 -2
  80. data/schemas/applicationCertificateAuthorityPatch.json +3 -1
  81. data/schemas/applicationCertificateAuthorityPost.json +3 -1
  82. data/schemas/applicationCertificatePatch.json +3 -1
  83. data/schemas/applicationCertificatePost.json +3 -1
  84. data/schemas/applicationCertificates.json +33 -2
  85. data/schemas/applicationKeys.json +4 -1
  86. data/schemas/applicationPatch.json +28 -0
  87. data/schemas/applicationPost.json +28 -0
  88. data/schemas/applications.json +34 -2
  89. data/schemas/auditLog.json +0 -3
  90. data/schemas/auditLogFilter.json +0 -3
  91. data/schemas/auditLogs.json +4 -4
  92. data/schemas/authedDevice.json +7 -0
  93. data/schemas/dashboard.json +3970 -72
  94. data/schemas/dashboardPatch.json +3969 -72
  95. data/schemas/dashboardPost.json +3969 -72
  96. data/schemas/dashboardSendReport.json +4 -0
  97. data/schemas/dashboardUpdateEvents.json +46 -0
  98. data/schemas/dashboards.json +3974 -73
  99. data/schemas/dataTableRows.json +4 -1
  100. data/schemas/dataTableRowsExport.json +11 -7
  101. data/schemas/dataTables.json +4 -1
  102. data/schemas/deviceRecipes.json +4 -1
  103. data/schemas/devices.json +4 -1
  104. data/schemas/event.json +19 -2
  105. data/schemas/eventPost.json +0 -1
  106. data/schemas/eventTagsSummary.json +28 -0
  107. data/schemas/events.json +841 -3
  108. data/schemas/eventsDeleted.json +9 -0
  109. data/schemas/eventsExport.json +830 -0
  110. data/schemas/experienceDomain.json +6 -2
  111. data/schemas/experienceDomainPatch.json +14 -10
  112. data/schemas/experienceDomainPost.json +8 -4
  113. data/schemas/experienceDomains.json +6 -2
  114. data/schemas/experienceEndpoints.json +4 -1
  115. data/schemas/experienceGroup.json +2 -2
  116. data/schemas/experienceGroupPatch.json +2 -2
  117. data/schemas/experienceGroupPost.json +2 -2
  118. data/schemas/experienceGroups.json +6 -3
  119. data/schemas/experienceSlugPatch.json +2 -2
  120. data/schemas/experienceSlugPost.json +2 -2
  121. data/schemas/experienceUsers.json +4 -1
  122. data/schemas/experienceViews.json +4 -1
  123. data/schemas/files.json +4 -1
  124. data/schemas/flow.json +4 -0
  125. data/schemas/flowPatch.json +6 -2
  126. data/schemas/flowPost.json +4 -0
  127. data/schemas/flowVersion.json +8 -0
  128. data/schemas/flowVersionPost.json +4 -0
  129. data/schemas/flowVersions.json +12 -1
  130. data/schemas/flows.json +8 -1
  131. data/schemas/flowsImportPost.json +10 -2
  132. data/schemas/flowsImportResult.json +12 -0
  133. data/schemas/githubLogin.json +6 -15
  134. data/schemas/integrations.json +4 -1
  135. data/schemas/notebooks.json +4 -1
  136. data/schemas/org.json +2 -4
  137. data/schemas/orgPatch.json +2 -1
  138. data/schemas/orgPost.json +2 -1
  139. data/schemas/orgs.json +6 -5
  140. data/schemas/passwordResetFinish.json +0 -4
  141. data/schemas/passwordResetInput.json +0 -4
  142. data/schemas/resourceTransfer.json +0 -8
  143. data/schemas/userCredentials.json +6 -15
  144. data/schemas/userPost.json +6 -15
  145. data/schemas/webhooks.json +4 -1
  146. data/test/basic_test.rb +15 -0
  147. metadata +8 -23
  148. data/docs/solution.md +0 -133
  149. data/docs/solutionUser.md +0 -139
  150. data/docs/solutionUsers.md +0 -96
  151. data/docs/solutions.md +0 -91
  152. data/lib/losant_rest/solution.rb +0 -174
  153. data/lib/losant_rest/solution_user.rb +0 -180
  154. data/lib/losant_rest/solution_users.rb +0 -138
  155. data/lib/losant_rest/solutions.rb +0 -134
  156. data/schemas/authedSolutionUser.json +0 -18
  157. data/schemas/fileUploadPostResp.json +0 -109
  158. data/schemas/solution.json +0 -76
  159. data/schemas/solutionMe.json +0 -150
  160. data/schemas/solutionPatch.json +0 -48
  161. data/schemas/solutionPost.json +0 -52
  162. data/schemas/solutionUser.json +0 -103
  163. data/schemas/solutionUserCredentials.json +0 -34
  164. data/schemas/solutionUserPatch.json +0 -74
  165. data/schemas/solutionUserPost.json +0 -80
  166. data/schemas/solutionUsers.json +0 -149
  167. data/schemas/solutions.json +0 -118
@@ -1,134 +0,0 @@
1
- # The MIT License (MIT)
2
- #
3
- # Copyright (c) 2019 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
-
23
- module LosantRest
24
-
25
- # Class containing all the actions for the Solutions Resource
26
- class Solutions
27
-
28
- def initialize(client)
29
- @client = client
30
- end
31
-
32
- # Returns the solutions for the organization
33
- #
34
- # Authentication:
35
- # The client must be configured with a valid api
36
- # access token to call this action. The token
37
- # must include at least one of the following scopes:
38
- # all.Organization, all.Organization.read, all.User, all.User.read, solutions.*, or solutions.get.
39
- #
40
- # Parameters:
41
- # * {string} orgId - ID associated with the organization
42
- # * {string} sortField - Field to sort the results by. Accepted values are: name, id, creationDate, lastUpdated
43
- # * {string} sortDirection - Direction to sort the results by. Accepted values are: asc, desc
44
- # * {string} page - Which page of results to return
45
- # * {string} perPage - How many items to return per page
46
- # * {string} filterField - Field to filter the results by. Blank or not provided means no filtering. Accepted values are: name
47
- # * {string} filter - Filter to apply against the filtered field. Supports globbing. Blank or not provided means no filtering.
48
- # * {string} losantdomain - Domain scope of request (rarely needed)
49
- # * {boolean} _actions - Return resource actions in response
50
- # * {boolean} _links - Return resource link in response
51
- # * {boolean} _embedded - Return embedded resources in response
52
- #
53
- # Responses:
54
- # * 200 - Collection of solutions (https://api.losant.com/#/definitions/solutions)
55
- #
56
- # Errors:
57
- # * 400 - Error if malformed request (https://api.losant.com/#/definitions/error)
58
- def get(params = {})
59
- params = Utils.symbolize_hash_keys(params)
60
- query_params = { _actions: false, _links: true, _embedded: true }
61
- headers = {}
62
- body = nil
63
-
64
- raise ArgumentError.new("orgId is required") unless params.has_key?(:orgId)
65
-
66
- query_params[:sortField] = params[:sortField] if params.has_key?(:sortField)
67
- query_params[:sortDirection] = params[:sortDirection] if params.has_key?(:sortDirection)
68
- query_params[:page] = params[:page] if params.has_key?(:page)
69
- query_params[:perPage] = params[:perPage] if params.has_key?(:perPage)
70
- query_params[:filterField] = params[:filterField] if params.has_key?(:filterField)
71
- query_params[:filter] = params[:filter] if params.has_key?(:filter)
72
- headers[:losantdomain] = params[:losantdomain] if params.has_key?(:losantdomain)
73
- query_params[:_actions] = params[:_actions] if params.has_key?(:_actions)
74
- query_params[:_links] = params[:_links] if params.has_key?(:_links)
75
- query_params[:_embedded] = params[:_embedded] if params.has_key?(:_embedded)
76
-
77
- path = "/orgs/#{params[:orgId]}/solutions"
78
-
79
- @client.request(
80
- method: :get,
81
- path: path,
82
- query: query_params,
83
- headers: headers,
84
- body: body)
85
- end
86
-
87
- # Create a new solution
88
- #
89
- # Authentication:
90
- # The client must be configured with a valid api
91
- # access token to call this action. The token
92
- # must include at least one of the following scopes:
93
- # all.Organization, all.User, solutions.*, or solutions.post.
94
- #
95
- # Parameters:
96
- # * {string} orgId - ID associated with the organization
97
- # * {hash} solution - New solution information (https://api.losant.com/#/definitions/solutionPost)
98
- # * {string} losantdomain - Domain scope of request (rarely needed)
99
- # * {boolean} _actions - Return resource actions in response
100
- # * {boolean} _links - Return resource link in response
101
- # * {boolean} _embedded - Return embedded resources in response
102
- #
103
- # Responses:
104
- # * 201 - Successfully created solution (https://api.losant.com/#/definitions/solution)
105
- #
106
- # Errors:
107
- # * 400 - Error if malformed request (https://api.losant.com/#/definitions/error)
108
- def post(params = {})
109
- params = Utils.symbolize_hash_keys(params)
110
- query_params = { _actions: false, _links: true, _embedded: true }
111
- headers = {}
112
- body = nil
113
-
114
- raise ArgumentError.new("orgId is required") unless params.has_key?(:orgId)
115
- raise ArgumentError.new("solution is required") unless params.has_key?(:solution)
116
-
117
- body = params[:solution] if params.has_key?(:solution)
118
- headers[:losantdomain] = params[:losantdomain] if params.has_key?(:losantdomain)
119
- query_params[:_actions] = params[:_actions] if params.has_key?(:_actions)
120
- query_params[:_links] = params[:_links] if params.has_key?(:_links)
121
- query_params[:_embedded] = params[:_embedded] if params.has_key?(:_embedded)
122
-
123
- path = "/orgs/#{params[:orgId]}/solutions"
124
-
125
- @client.request(
126
- method: :post,
127
- path: path,
128
- query: query_params,
129
- headers: headers,
130
- body: body)
131
- end
132
-
133
- end
134
- end
@@ -1,18 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-04/schema#",
3
- "type": "object",
4
- "properties": {
5
- "solutionUserId": {
6
- "type": "string",
7
- "pattern": "^[A-Fa-f\\d]{24}$"
8
- },
9
- "token": {
10
- "type": "string",
11
- "minLength": 1
12
- }
13
- },
14
- "required": [
15
- "solutionUserId",
16
- "token"
17
- ]
18
- }
@@ -1,109 +0,0 @@
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
- "applicationId": {
10
- "type": "string",
11
- "pattern": "^[A-Fa-f\\d]{24}$"
12
- },
13
- "creationDate": {
14
- "type": "string",
15
- "format": "date-time"
16
- },
17
- "lastUpdated": {
18
- "type": "string",
19
- "format": "date-time"
20
- },
21
- "authorId": {
22
- "type": "string",
23
- "pattern": "^[A-Fa-f\\d]{24}$"
24
- },
25
- "authorType": {
26
- "type": "string",
27
- "enum": [
28
- "flow",
29
- "user",
30
- "device",
31
- "apiToken"
32
- ]
33
- },
34
- "status": {
35
- "type": "string",
36
- "enum": [
37
- "pending",
38
- "moving",
39
- "deleting",
40
- "completed"
41
- ]
42
- },
43
- "name": {
44
- "type": "string",
45
- "minLength": 1,
46
- "maxLength": 1024
47
- },
48
- "parentDirectory": {
49
- "type": "string",
50
- "maxLength": 1024
51
- },
52
- "type": {
53
- "type": "string",
54
- "enum": [
55
- "file",
56
- "directory"
57
- ]
58
- },
59
- "fileSize": {
60
- "type": "number"
61
- },
62
- "contentType": {
63
- "type": "string",
64
- "maxLength": 1024
65
- },
66
- "fileDimensions": {
67
- "type": "object",
68
- "properties": {
69
- "width": {
70
- "type": "number"
71
- },
72
- "height": {
73
- "type": "number"
74
- }
75
- }
76
- },
77
- "upload": {
78
- "url": {
79
- "type": "string"
80
- },
81
- "fields": {
82
- "type": "object",
83
- "properties": {
84
- "key": {
85
- "type": "string"
86
- },
87
- "bucket": {
88
- "type": "string"
89
- },
90
- "X-Amz-Algorithm": {
91
- "type": "string"
92
- },
93
- "X-Amz-Credential": {
94
- "type": "string"
95
- },
96
- "X-Amz-Date": {
97
- "type": "string"
98
- },
99
- "Policy": {
100
- "type": "string"
101
- },
102
- "X-Amz-Signature": {
103
- "type": "string"
104
- }
105
- }
106
- }
107
- }
108
- }
109
- }
@@ -1,76 +0,0 @@
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
- "solutionId": {
10
- "type": "string",
11
- "pattern": "^[A-Fa-f\\d]{24}$"
12
- },
13
- "orgId": {
14
- "type": "string",
15
- "pattern": "^[A-Fa-f\\d]{24}$"
16
- },
17
- "creationDate": {
18
- "type": "string",
19
- "format": "date-time"
20
- },
21
- "lastUpdated": {
22
- "type": "string",
23
- "format": "date-time"
24
- },
25
- "name": {
26
- "type": "string",
27
- "minLength": 1,
28
- "maxLength": 255
29
- },
30
- "description": {
31
- "type": "string",
32
- "maxLength": 32767
33
- },
34
- "slug": {
35
- "type": "string",
36
- "minLength": 4,
37
- "maxLength": 63,
38
- "pattern": "^[0-9a-z-]*$"
39
- },
40
- "allowSelfDeletion": {
41
- "type": "boolean"
42
- },
43
- "allowSelfEmailChange": {
44
- "type": "boolean"
45
- },
46
- "passwordReset": {
47
- "type": "object",
48
- "properties": {
49
- "allowPasswordReset": {
50
- "type": "boolean"
51
- },
52
- "emailSubject": {
53
- "type": "string",
54
- "maxLength": 255
55
- },
56
- "emailBody": {
57
- "type": "string",
58
- "maxLength": 32767
59
- },
60
- "emailFrom": {
61
- "type": "string",
62
- "format": "email",
63
- "maxLength": 1024
64
- }
65
- }
66
- },
67
- "summary": {
68
- "type": "object",
69
- "properties": {
70
- "solutionUserCount": {
71
- "type": "number"
72
- }
73
- }
74
- }
75
- }
76
- }
@@ -1,150 +0,0 @@
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
- "solutionUserId": {
10
- "type": "string",
11
- "pattern": "^[A-Fa-f\\d]{24}$"
12
- },
13
- "creationDate": {
14
- "type": "string",
15
- "format": "date-time"
16
- },
17
- "lastUpdated": {
18
- "type": "string",
19
- "format": "date-time"
20
- },
21
- "passwordLastUpdated": {
22
- "type": "string",
23
- "format": "date-time"
24
- },
25
- "lastLogin": {
26
- "type": "string",
27
- "format": "date-time"
28
- },
29
- "email": {
30
- "type": "string",
31
- "format": "email",
32
- "maxLength": 1024
33
- },
34
- "firstName": {
35
- "type": "string",
36
- "minLength": 1,
37
- "maxLength": 1024
38
- },
39
- "lastName": {
40
- "type": "string",
41
- "minLength": 1,
42
- "maxLength": 1024
43
- },
44
- "companyName": {
45
- "type": "string",
46
- "maxLength": 1024
47
- },
48
- "title": {
49
- "type": "string",
50
- "maxLength": 1024
51
- },
52
- "phoneNumber": {
53
- "type": "string",
54
- "maxLength": 1024
55
- },
56
- "location": {
57
- "type": "string",
58
- "maxLength": 1024
59
- },
60
- "url": {
61
- "type": "string",
62
- "maxLength": 1024
63
- },
64
- "forcePasswordResetOnNextLogin": {
65
- "type": "boolean"
66
- },
67
- "fullName": {
68
- "type": "string"
69
- },
70
- "twoFactorAuthEnabled": {
71
- "type": "boolean"
72
- },
73
- "avatarUrl": {
74
- "type": "string",
75
- "format": "url"
76
- },
77
- "accessRestrictions": {
78
- "type": "object",
79
- "properties": {
80
- "dashboardIds": {
81
- "type": "array",
82
- "items": {
83
- "type": "string",
84
- "pattern": "^[A-Fa-f\\d]{24}$"
85
- },
86
- "maxItems": 1000
87
- }
88
- }
89
- },
90
- "recentDashboards": {
91
- "title": "Recent Item List",
92
- "description": "Schema for an array of recent items",
93
- "type": "object",
94
- "properties": {
95
- "itemType": {
96
- "type": "string",
97
- "enum": [
98
- "application",
99
- "device",
100
- "flow",
101
- "dashboard",
102
- "organization"
103
- ]
104
- },
105
- "parentId": {
106
- "type": "string",
107
- "pattern": "^[A-Fa-f\\d]{24}$"
108
- },
109
- "items": {
110
- "type": "array",
111
- "items": {
112
- "type": "object",
113
- "properties": {
114
- "id": {
115
- "type": "string",
116
- "pattern": "^[A-Fa-f\\d]{24}$"
117
- },
118
- "name": {
119
- "type": "string",
120
- "minLength": 1,
121
- "maxLength": 255
122
- }
123
- }
124
- }
125
- }
126
- }
127
- },
128
- "solution": {
129
- "id": {
130
- "type": "string",
131
- "pattern": "^[A-Fa-f\\d]{24}$"
132
- },
133
- "slug": {
134
- "type": "string",
135
- "pattern": "^[0-9a-z_-]{1,255}$"
136
- },
137
- "name": {
138
- "type": "string",
139
- "minLength": 1,
140
- "maxLength": 255
141
- },
142
- "allowSelfDeletion": {
143
- "type": "boolean"
144
- },
145
- "allowSelfEmailChange": {
146
- "type": "boolean"
147
- }
148
- }
149
- }
150
- }