kuzzle 2.19.2 → 2.19.5

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 (293) hide show
  1. package/lib/api/controllers/adminController.js +94 -80
  2. package/lib/api/controllers/authController.js +239 -212
  3. package/lib/api/controllers/baseController.js +89 -51
  4. package/lib/api/controllers/bulkController.js +62 -49
  5. package/lib/api/controllers/clusterController.js +6 -8
  6. package/lib/api/controllers/collectionController.js +140 -129
  7. package/lib/api/controllers/debugController.d.ts +2 -2
  8. package/lib/api/controllers/debugController.js +33 -31
  9. package/lib/api/controllers/documentController.js +365 -274
  10. package/lib/api/controllers/index.js +13 -13
  11. package/lib/api/controllers/indexController.js +46 -50
  12. package/lib/api/controllers/memoryStorageController.js +410 -360
  13. package/lib/api/controllers/realtimeController.js +37 -36
  14. package/lib/api/controllers/securityController.js +553 -412
  15. package/lib/api/controllers/serverController.js +111 -104
  16. package/lib/api/documentExtractor.js +75 -68
  17. package/lib/api/funnel.js +411 -312
  18. package/lib/api/httpRoutes.js +1493 -324
  19. package/lib/api/openapi/OpenApiManager.d.ts +1 -1
  20. package/lib/api/openapi/OpenApiManager.js +22 -22
  21. package/lib/api/openapi/components/document/count.yaml +1 -1
  22. package/lib/api/openapi/components/document/create.yaml +2 -2
  23. package/lib/api/openapi/components/document/delete.yaml +1 -1
  24. package/lib/api/openapi/components/document/deleteByQuery.yaml +1 -1
  25. package/lib/api/openapi/components/document/exists.yaml +1 -1
  26. package/lib/api/openapi/components/document/get.yaml +2 -2
  27. package/lib/api/openapi/components/document/index.js +12 -12
  28. package/lib/api/openapi/components/document/replace.yaml +1 -1
  29. package/lib/api/openapi/components/document/scroll.yaml +1 -1
  30. package/lib/api/openapi/components/document/validate.yaml +1 -1
  31. package/lib/api/openapi/components/index.d.ts +2 -2
  32. package/lib/api/openapi/components/index.js +1 -1
  33. package/lib/api/openapi/components/security/index.js +1 -1
  34. package/lib/api/openapi/components/security/upsertUser.yaml +2 -3
  35. package/lib/api/openapi/index.d.ts +1 -1
  36. package/lib/api/openapi/openApiGenerator.d.ts +1 -1
  37. package/lib/api/openapi/openApiGenerator.js +7 -7
  38. package/lib/api/rateLimiter.js +12 -13
  39. package/lib/api/request/index.d.ts +4 -4
  40. package/lib/api/request/kuzzleRequest.d.ts +9 -9
  41. package/lib/api/request/kuzzleRequest.js +91 -90
  42. package/lib/api/request/requestContext.d.ts +2 -2
  43. package/lib/api/request/requestContext.js +17 -17
  44. package/lib/api/request/requestInput.d.ts +1 -1
  45. package/lib/api/request/requestInput.js +19 -19
  46. package/lib/api/request/requestResponse.d.ts +4 -4
  47. package/lib/api/request/requestResponse.js +31 -33
  48. package/lib/cluster/command.js +48 -44
  49. package/lib/cluster/idCardHandler.d.ts +1 -1
  50. package/lib/cluster/idCardHandler.js +15 -15
  51. package/lib/cluster/index.js +2 -2
  52. package/lib/cluster/node.js +301 -269
  53. package/lib/cluster/publisher.js +45 -46
  54. package/lib/cluster/state.d.ts +5 -5
  55. package/lib/cluster/state.js +8 -8
  56. package/lib/cluster/subscriber.js +163 -113
  57. package/lib/cluster/workers/IDCardRenewer.js +33 -32
  58. package/lib/config/default.config.d.ts +1 -1
  59. package/lib/config/default.config.js +212 -171
  60. package/lib/config/documentEventAliases.js +6 -6
  61. package/lib/config/index.js +161 -98
  62. package/lib/config/sdkCompatibility.json +8 -8
  63. package/lib/core/auth/formatProcessing.js +7 -7
  64. package/lib/core/auth/passportResponse.js +7 -7
  65. package/lib/core/auth/passportWrapper.js +34 -30
  66. package/lib/core/auth/tokenManager.d.ts +2 -2
  67. package/lib/core/auth/tokenManager.js +11 -10
  68. package/lib/core/backend/applicationManager.d.ts +1 -1
  69. package/lib/core/backend/applicationManager.js +2 -2
  70. package/lib/core/backend/backend.d.ts +4 -4
  71. package/lib/core/backend/backend.js +34 -31
  72. package/lib/core/backend/backendCluster.d.ts +8 -9
  73. package/lib/core/backend/backendCluster.js +8 -8
  74. package/lib/core/backend/backendConfig.d.ts +2 -2
  75. package/lib/core/backend/backendConfig.js +3 -3
  76. package/lib/core/backend/backendController.d.ts +2 -2
  77. package/lib/core/backend/backendController.js +9 -10
  78. package/lib/core/backend/backendErrors.d.ts +3 -3
  79. package/lib/core/backend/backendErrors.js +2 -1
  80. package/lib/core/backend/backendHook.d.ts +3 -3
  81. package/lib/core/backend/backendHook.js +5 -5
  82. package/lib/core/backend/backendImport.d.ts +3 -3
  83. package/lib/core/backend/backendImport.js +23 -23
  84. package/lib/core/backend/backendOpenApi.d.ts +2 -2
  85. package/lib/core/backend/backendOpenApi.js +16 -16
  86. package/lib/core/backend/backendPipe.d.ts +3 -3
  87. package/lib/core/backend/backendPipe.js +6 -6
  88. package/lib/core/backend/backendPlugin.d.ts +4 -4
  89. package/lib/core/backend/backendPlugin.js +14 -14
  90. package/lib/core/backend/backendStorage.d.ts +2 -2
  91. package/lib/core/backend/backendStorage.js +1 -2
  92. package/lib/core/backend/backendVault.d.ts +2 -2
  93. package/lib/core/backend/backendVault.js +3 -3
  94. package/lib/core/backend/index.d.ts +14 -14
  95. package/lib/core/backend/internalLogger.d.ts +1 -1
  96. package/lib/core/backend/internalLogger.js +5 -5
  97. package/lib/core/cache/cacheDbEnum.js +4 -4
  98. package/lib/core/cache/cacheEngine.js +79 -85
  99. package/lib/core/network/accessLogger.js +126 -120
  100. package/lib/core/network/clientConnection.js +5 -5
  101. package/lib/core/network/context.js +8 -8
  102. package/lib/core/network/entryPoint.js +100 -85
  103. package/lib/core/network/httpRouter/index.js +63 -60
  104. package/lib/core/network/httpRouter/routeHandler.js +18 -19
  105. package/lib/core/network/httpRouter/routePart.js +23 -19
  106. package/lib/core/network/protocolManifest.js +3 -3
  107. package/lib/core/network/protocols/httpMessage.js +8 -10
  108. package/lib/core/network/protocols/httpwsProtocol.js +305 -250
  109. package/lib/core/network/protocols/internalProtocol.js +27 -24
  110. package/lib/core/network/protocols/mqttProtocol.js +106 -96
  111. package/lib/core/network/protocols/protocol.js +20 -17
  112. package/lib/core/network/router.js +56 -46
  113. package/lib/core/plugin/plugin.js +151 -120
  114. package/lib/core/plugin/pluginContext.d.ts +7 -7
  115. package/lib/core/plugin/pluginContext.js +48 -44
  116. package/lib/core/plugin/pluginManifest.js +13 -12
  117. package/lib/core/plugin/pluginRepository.js +26 -27
  118. package/lib/core/plugin/pluginsManager.js +425 -304
  119. package/lib/core/plugin/privilegedContext.js +3 -3
  120. package/lib/core/realtime/actionEnum.js +1 -1
  121. package/lib/core/realtime/channel.d.ts +1 -1
  122. package/lib/core/realtime/channel.js +22 -22
  123. package/lib/core/realtime/connectionRooms.d.ts +1 -1
  124. package/lib/core/realtime/hotelClerk.d.ts +2 -2
  125. package/lib/core/realtime/hotelClerk.js +53 -50
  126. package/lib/core/realtime/index.js +5 -5
  127. package/lib/core/realtime/notification/document.js +25 -25
  128. package/lib/core/realtime/notification/index.js +4 -4
  129. package/lib/core/realtime/notification/server.js +3 -3
  130. package/lib/core/realtime/notification/user.js +4 -4
  131. package/lib/core/realtime/notifier.js +113 -75
  132. package/lib/core/realtime/room.d.ts +1 -1
  133. package/lib/core/realtime/subscription.d.ts +1 -1
  134. package/lib/core/realtime/subscription.js +1 -1
  135. package/lib/core/security/index.js +8 -8
  136. package/lib/core/security/profileRepository.d.ts +6 -6
  137. package/lib/core/security/profileRepository.js +48 -45
  138. package/lib/core/security/roleRepository.js +127 -115
  139. package/lib/core/security/securityLoader.js +70 -63
  140. package/lib/core/security/tokenRepository.js +132 -118
  141. package/lib/core/security/userRepository.js +104 -88
  142. package/lib/core/shared/KoncordeWrapper.d.ts +1 -1
  143. package/lib/core/shared/KoncordeWrapper.js +3 -1
  144. package/lib/core/shared/abstractManifest.js +22 -23
  145. package/lib/core/shared/repository.js +69 -67
  146. package/lib/core/shared/sdk/embeddedSdk.d.ts +2 -2
  147. package/lib/core/shared/sdk/embeddedSdk.js +36 -32
  148. package/lib/core/shared/sdk/funnelProtocol.d.ts +1 -1
  149. package/lib/core/shared/sdk/funnelProtocol.js +11 -11
  150. package/lib/core/shared/sdk/impersonatedSdk.js +19 -18
  151. package/lib/core/shared/store.js +127 -32
  152. package/lib/core/statistics/index.js +2 -2
  153. package/lib/core/statistics/statistics.js +99 -85
  154. package/lib/core/storage/clientAdapter.js +219 -136
  155. package/lib/core/storage/indexCache.js +3 -3
  156. package/lib/core/storage/storageEngine.js +10 -13
  157. package/lib/core/storage/storeScopeEnum.js +3 -3
  158. package/lib/core/validation/baseType.js +12 -10
  159. package/lib/core/validation/index.js +2 -2
  160. package/lib/core/validation/types/anything.js +4 -4
  161. package/lib/core/validation/types/boolean.js +7 -7
  162. package/lib/core/validation/types/date.js +165 -131
  163. package/lib/core/validation/types/email.js +18 -21
  164. package/lib/core/validation/types/enum.js +34 -21
  165. package/lib/core/validation/types/geoPoint.js +7 -7
  166. package/lib/core/validation/types/geoShape.js +148 -125
  167. package/lib/core/validation/types/integer.js +9 -9
  168. package/lib/core/validation/types/ipAddress.js +17 -19
  169. package/lib/core/validation/types/numeric.js +36 -29
  170. package/lib/core/validation/types/object.js +19 -19
  171. package/lib/core/validation/types/string.js +36 -29
  172. package/lib/core/validation/types/url.js +17 -19
  173. package/lib/core/validation/validation.js +422 -378
  174. package/lib/kerror/codes/1-services.json +7 -1
  175. package/lib/kerror/codes/4-plugin.json +2 -2
  176. package/lib/kerror/codes/index.js +85 -63
  177. package/lib/kerror/errors/badRequestError.d.ts +1 -1
  178. package/lib/kerror/errors/externalServiceError.d.ts +1 -1
  179. package/lib/kerror/errors/forbiddenError.d.ts +1 -1
  180. package/lib/kerror/errors/gatewayTimeoutError.d.ts +1 -1
  181. package/lib/kerror/errors/index.d.ts +15 -15
  182. package/lib/kerror/errors/internalError.d.ts +1 -1
  183. package/lib/kerror/errors/kuzzleError.d.ts +1 -1
  184. package/lib/kerror/errors/multipleErrorsError.d.ts +1 -1
  185. package/lib/kerror/errors/multipleErrorsError.js +1 -1
  186. package/lib/kerror/errors/notFoundError.d.ts +1 -1
  187. package/lib/kerror/errors/partialError.d.ts +1 -1
  188. package/lib/kerror/errors/partialError.js +1 -1
  189. package/lib/kerror/errors/pluginImplementationError.d.ts +1 -1
  190. package/lib/kerror/errors/pluginImplementationError.js +2 -1
  191. package/lib/kerror/errors/preconditionError.d.ts +1 -1
  192. package/lib/kerror/errors/serviceUnavailableError.d.ts +1 -1
  193. package/lib/kerror/errors/sizeLimitError.d.ts +1 -1
  194. package/lib/kerror/errors/tooManyRequestsError.d.ts +1 -1
  195. package/lib/kerror/errors/unauthorizedError.d.ts +1 -1
  196. package/lib/kerror/index.d.ts +3 -3
  197. package/lib/kerror/index.js +17 -16
  198. package/lib/kuzzle/dumpGenerator.js +130 -114
  199. package/lib/kuzzle/event/kuzzleEventEmitter.js +96 -70
  200. package/lib/kuzzle/event/pipeRunner.js +26 -25
  201. package/lib/kuzzle/event/waterfall.js +13 -15
  202. package/lib/kuzzle/index.js +2 -2
  203. package/lib/kuzzle/internalIndexHandler.js +80 -59
  204. package/lib/kuzzle/kuzzle.js +99 -99
  205. package/lib/kuzzle/kuzzleStateEnum.js +1 -1
  206. package/lib/kuzzle/log.js +23 -18
  207. package/lib/kuzzle/vault.js +34 -19
  208. package/lib/model/security/profile.d.ts +3 -3
  209. package/lib/model/security/profile.js +38 -37
  210. package/lib/model/security/rights.js +5 -5
  211. package/lib/model/security/role.d.ts +3 -3
  212. package/lib/model/security/role.js +25 -26
  213. package/lib/model/security/token.d.ts +1 -1
  214. package/lib/model/security/token.js +4 -4
  215. package/lib/model/security/user.d.ts +2 -2
  216. package/lib/model/security/user.js +9 -9
  217. package/lib/model/storage/apiKey.js +43 -33
  218. package/lib/model/storage/baseModel.js +49 -45
  219. package/lib/service/cache/redis.js +60 -55
  220. package/lib/service/service.js +17 -17
  221. package/lib/service/storage/elasticsearch.js +839 -755
  222. package/lib/service/storage/esWrapper.js +103 -86
  223. package/lib/service/storage/queryTranslator.js +52 -59
  224. package/lib/types/Controller.d.ts +3 -3
  225. package/lib/types/ControllerDefinition.d.ts +3 -3
  226. package/lib/types/DebugModule.d.ts +3 -2
  227. package/lib/types/DebugModule.js +1 -1
  228. package/lib/types/EventHandler.d.ts +31 -1
  229. package/lib/types/Global.d.ts +1 -1
  230. package/lib/types/HttpStream.d.ts +2 -1
  231. package/lib/types/HttpStream.js +7 -5
  232. package/lib/types/Kuzzle.d.ts +1 -1
  233. package/lib/types/KuzzleDocument.d.ts +1 -1
  234. package/lib/types/OpenApiDefinition.d.ts +1 -1
  235. package/lib/types/PasswordPolicy.d.ts +1 -1
  236. package/lib/types/Plugin.d.ts +8 -8
  237. package/lib/types/Plugin.js +2 -2
  238. package/lib/types/Policy.d.ts +1 -1
  239. package/lib/types/RequestPayload.d.ts +1 -1
  240. package/lib/types/ResponsePayload.d.ts +1 -1
  241. package/lib/types/Token.d.ts +1 -1
  242. package/lib/types/User.d.ts +1 -1
  243. package/lib/types/config/DumpConfiguration.d.ts +8 -8
  244. package/lib/types/config/HttpConfiguration.d.ts +1 -1
  245. package/lib/types/config/KuzzleConfiguration.d.ts +1 -1
  246. package/lib/types/config/LimitsConfiguration.d.ts +8 -8
  247. package/lib/types/config/PluginsConfiguration.d.ts +4 -4
  248. package/lib/types/config/SecurityConfiguration.d.ts +62 -62
  249. package/lib/types/config/ServerConfiguration.d.ts +55 -55
  250. package/lib/types/config/ServicesConfiguration.d.ts +2 -2
  251. package/lib/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +10 -10
  252. package/lib/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +3 -3
  253. package/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +194 -110
  254. package/lib/types/errors/ErrorDefinition.d.ts +1 -1
  255. package/lib/types/errors/ErrorDomains.d.ts +1 -1
  256. package/lib/types/events/EventGenericDocument.d.ts +26 -0
  257. package/lib/types/events/EventGenericDocument.js +3 -0
  258. package/lib/types/index.d.ts +39 -38
  259. package/lib/types/index.js +1 -0
  260. package/lib/types/realtime/RealtimeScope.d.ts +1 -1
  261. package/lib/types/realtime/RealtimeUsers.d.ts +1 -1
  262. package/lib/util/assertType.js +13 -11
  263. package/lib/util/async.d.ts +1 -0
  264. package/lib/util/async.js +61 -0
  265. package/lib/util/asyncStore.js +19 -21
  266. package/lib/util/bufferedPassThrough.d.ts +3 -2
  267. package/lib/util/bufferedPassThrough.js +4 -4
  268. package/lib/util/bytes.js +9 -13
  269. package/lib/util/crypto.js +1 -1
  270. package/lib/util/debug.js +5 -5
  271. package/lib/util/deprecate.js +24 -21
  272. package/lib/util/didYouMean.js +7 -7
  273. package/lib/util/dump-collection.d.ts +2 -2
  274. package/lib/util/dump-collection.js +26 -26
  275. package/lib/util/esRequest.d.ts +1 -0
  276. package/lib/util/esRequest.js +62 -0
  277. package/lib/util/extractFields.js +24 -25
  278. package/lib/util/inflector.js +5 -5
  279. package/lib/util/koncordeCompat.d.ts +2 -2
  280. package/lib/util/koncordeCompat.js +5 -5
  281. package/lib/util/memoize.js +3 -5
  282. package/lib/util/mutex.d.ts +19 -1
  283. package/lib/util/mutex.js +39 -12
  284. package/lib/util/name-generator.js +1331 -1331
  285. package/lib/util/promback.js +8 -10
  286. package/lib/util/readYamlFile.d.ts +1 -1
  287. package/lib/util/readYamlFile.js +1 -1
  288. package/lib/util/requestAssertions.js +34 -34
  289. package/lib/util/safeObject.js +5 -5
  290. package/lib/util/stackTrace.js +20 -22
  291. package/lib/util/wildcard.js +15 -15
  292. package/package.json +28 -29
  293. package/npm-shrinkwrap.json +0 -19422
@@ -19,18 +19,18 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const Bluebird = require('bluebird');
24
+ const Bluebird = require("bluebird");
25
25
 
26
- const kuzzleStateEnum = require('../../kuzzle/kuzzleStateEnum');
27
- const { Role } = require('../../model/security/role');
28
- const Repository = require('../shared/repository');
29
- const kerror = require('../../kerror');
30
- const didYouMean = require('../../util/didYouMean');
31
- const cacheDbEnum = require('../cache/cacheDbEnum');
26
+ const kuzzleStateEnum = require("../../kuzzle/kuzzleStateEnum");
27
+ const { Role } = require("../../model/security/role");
28
+ const Repository = require("../shared/repository");
29
+ const kerror = require("../../kerror");
30
+ const didYouMean = require("../../util/didYouMean");
31
+ const cacheDbEnum = require("../cache/cacheDbEnum");
32
32
 
33
- const roleRightsError = kerror.wrap('security', 'role');
33
+ const roleRightsError = kerror.wrap("security", "role");
34
34
 
35
35
  /**
36
36
  * @class RoleRepository
@@ -41,7 +41,7 @@ class RoleRepository extends Repository {
41
41
  * @constructor
42
42
  * @param {SecurityModule} securityModule
43
43
  */
44
- constructor (securityModule) {
44
+ constructor(securityModule) {
45
45
  super({
46
46
  cache: cacheDbEnum.NONE,
47
47
  store: global.kuzzle.internalIndex,
@@ -49,12 +49,12 @@ class RoleRepository extends Repository {
49
49
 
50
50
  this.module = securityModule;
51
51
 
52
- this.collection = 'roles';
52
+ this.collection = "roles";
53
53
  this.ObjectConstructor = Role;
54
54
  this.roles = new Map();
55
55
  }
56
56
 
57
- init () {
57
+ init() {
58
58
  /**
59
59
  * Creates a new role
60
60
  * @param {String} id - role identifier / name
@@ -63,9 +63,9 @@ class RoleRepository extends Repository {
63
63
  * @returns {Role}
64
64
  * @throws If already exists or if the content is invalid
65
65
  */
66
- global.kuzzle.onAsk(
67
- 'core:security:role:create',
68
- (id, content, opts) => this.create(id, content, opts));
66
+ global.kuzzle.onAsk("core:security:role:create", (id, content, opts) =>
67
+ this.create(id, content, opts)
68
+ );
69
69
 
70
70
  /**
71
71
  * Creates a new role, or replaces it if it already exists
@@ -76,8 +76,9 @@ class RoleRepository extends Repository {
76
76
  * @throws If the content is invalid
77
77
  */
78
78
  global.kuzzle.onAsk(
79
- 'core:security:role:createOrReplace',
80
- (id, content, opts) => this.createOrReplace(id, content, opts));
79
+ "core:security:role:createOrReplace",
80
+ (id, content, opts) => this.createOrReplace(id, content, opts)
81
+ );
81
82
 
82
83
  /**
83
84
  * Deletes an existing role
@@ -86,9 +87,9 @@ class RoleRepository extends Repository {
86
87
  * @throws If the role doesn't exist, if it is protected, or if it's
87
88
  * still in use
88
89
  */
89
- global.kuzzle.onAsk(
90
- 'core:security:role:delete',
91
- (id, opts) => this.deleteById(id, opts));
90
+ global.kuzzle.onAsk("core:security:role:delete", (id, opts) =>
91
+ this.deleteById(id, opts)
92
+ );
92
93
 
93
94
  /**
94
95
  * Loads and returns an existing role
@@ -96,7 +97,7 @@ class RoleRepository extends Repository {
96
97
  * @returns {Role}
97
98
  * @throws {NotFoundError} If the role doesn't exist
98
99
  */
99
- global.kuzzle.onAsk('core:security:role:get', id => this.load(id));
100
+ global.kuzzle.onAsk("core:security:role:get", (id) => this.load(id));
100
101
 
101
102
  /**
102
103
  * Invalidates the RAM cache from the given role ID. If none is provided,
@@ -104,9 +105,9 @@ class RoleRepository extends Repository {
104
105
  *
105
106
  * @param {String} [id] - role identifier
106
107
  */
107
- global.kuzzle.onAsk(
108
- 'core:security:role:invalidate',
109
- id => this.invalidate(id));
108
+ global.kuzzle.onAsk("core:security:role:invalidate", (id) =>
109
+ this.invalidate(id)
110
+ );
110
111
 
111
112
  /**
112
113
  * Gets multiple roles
@@ -114,7 +115,9 @@ class RoleRepository extends Repository {
114
115
  * @returns {Array.<Role>}
115
116
  * @throws If one or more roles don't exist
116
117
  */
117
- global.kuzzle.onAsk('core:security:role:mGet', ids => this.loadRoles(ids));
118
+ global.kuzzle.onAsk("core:security:role:mGet", (ids) =>
119
+ this.loadRoles(ids)
120
+ );
118
121
 
119
122
  /**
120
123
  * Searches roles associated to a provided list of API controllers
@@ -123,17 +126,17 @@ class RoleRepository extends Repository {
123
126
  * @param {Number} size
124
127
  * @returns {Object} Search results
125
128
  */
126
- global.kuzzle.onAsk(
127
- 'core:security:role:search',
128
- (controllers, opts) => this.searchRole(controllers, opts));
129
+ global.kuzzle.onAsk("core:security:role:search", (controllers, opts) =>
130
+ this.searchRole(controllers, opts)
131
+ );
129
132
 
130
133
  /**
131
134
  * Removes all existing roles and invalidates the RAM cache
132
135
  * @param {Object} opts (refresh)
133
136
  */
134
- global.kuzzle.onAsk(
135
- 'core:security:role:truncate',
136
- opts => this.truncate(opts));
137
+ global.kuzzle.onAsk("core:security:role:truncate", (opts) =>
138
+ this.truncate(opts)
139
+ );
137
140
 
138
141
  /**
139
142
  * Updates an existing profile using a partial content
@@ -143,14 +146,14 @@ class RoleRepository extends Repository {
143
146
  * userId (used for metadata)
144
147
  * @returns {Role} Updated role
145
148
  */
146
- global.kuzzle.onAsk(
147
- 'core:security:role:update',
148
- (id, content, opts) => this.update(id, content, opts));
149
+ global.kuzzle.onAsk("core:security:role:update", (id, content, opts) =>
150
+ this.update(id, content, opts)
151
+ );
149
152
 
150
153
  /**
151
154
  * Verifies that existing roles are sane
152
155
  */
153
- global.kuzzle.onAsk('core:security:verify', () => this.sanityCheck());
156
+ global.kuzzle.onAsk("core:security:verify", () => this.sanityCheck());
154
157
  }
155
158
 
156
159
  /**
@@ -160,18 +163,17 @@ class RoleRepository extends Repository {
160
163
  * @param {Object} options - resetCache (false)
161
164
  * @returns {Promise.<Array.<Role>>}
162
165
  */
163
- loadRoles (ids) {
166
+ loadRoles(ids) {
164
167
  const roles = [];
165
168
 
166
169
  for (const id of ids) {
167
170
  let role = this.roles.get(id);
168
171
 
169
- if (! role) {
170
- role = this.loadOneFromDatabase(id)
171
- .then(r => {
172
- this.roles.set(id, r);
173
- return r;
174
- });
172
+ if (!role) {
173
+ role = this.loadOneFromDatabase(id).then((r) => {
174
+ this.roles.set(id, r);
175
+ return r;
176
+ });
175
177
 
176
178
  this.roles.set(id, role);
177
179
  }
@@ -190,10 +192,10 @@ class RoleRepository extends Repository {
190
192
  * @param {Object} [opts]
191
193
  * @returns {Role}
192
194
  */
193
- async _createOrReplace (
195
+ async _createOrReplace(
194
196
  id,
195
197
  content,
196
- { force = false, method, refresh = 'false', userId = null } = {}
198
+ { force = false, method, refresh = "false", userId = null } = {}
197
199
  ) {
198
200
  const dto = {
199
201
  ...content,
@@ -220,9 +222,9 @@ class RoleRepository extends Repository {
220
222
  * @param {Object} [opts]
221
223
  * @returns {Role}
222
224
  */
223
- async create (id, content, opts) {
225
+ async create(id, content, opts) {
224
226
  return this._createOrReplace(id, content, {
225
- method: 'create',
227
+ method: "create",
226
228
  ...opts,
227
229
  });
228
230
  }
@@ -235,9 +237,9 @@ class RoleRepository extends Repository {
235
237
  * @param {Object} [opts]
236
238
  * @returns {Role}
237
239
  */
238
- async createOrReplace (id, content, opts) {
240
+ async createOrReplace(id, content, opts) {
239
241
  return this._createOrReplace(id, content, {
240
- method: 'createOrReplace',
242
+ method: "createOrReplace",
241
243
  ...opts,
242
244
  });
243
245
  }
@@ -253,7 +255,7 @@ class RoleRepository extends Repository {
253
255
  * @param {Object} [opts]
254
256
  * @returns {Promise}
255
257
  */
256
- async update (id, content, { force, refresh, retryOnConflict, userId } = {}) {
258
+ async update(id, content, { force, refresh, retryOnConflict, userId } = {}) {
257
259
  const updated = await this.fromDTO({
258
260
  // /!\ order is important
259
261
  ...content,
@@ -267,7 +269,7 @@ class RoleRepository extends Repository {
267
269
 
268
270
  return this.validateAndSaveRole(updated, {
269
271
  force,
270
- method: 'replace',
272
+ method: "replace",
271
273
  refresh,
272
274
  retryOnConflict,
273
275
  });
@@ -280,7 +282,7 @@ class RoleRepository extends Repository {
280
282
  * @returns {Promise.<Role>} role
281
283
  * @throws {NotFoundError} If the corresponding role doesn't exist
282
284
  */
283
- async load (id) {
285
+ async load(id) {
284
286
  if (this.roles.has(id)) {
285
287
  return this.roles.get(id);
286
288
  }
@@ -295,13 +297,12 @@ class RoleRepository extends Repository {
295
297
  /**
296
298
  * @override
297
299
  */
298
- async loadOneFromDatabase (id) {
300
+ async loadOneFromDatabase(id) {
299
301
  try {
300
302
  return await super.loadOneFromDatabase(id);
301
- }
302
- catch (err) {
303
+ } catch (err) {
303
304
  if (err.status === 404) {
304
- throw kerror.get('security', 'role', 'not_found', id);
305
+ throw kerror.get("security", "role", "not_found", id);
305
306
  }
306
307
  throw err;
307
308
  }
@@ -311,25 +312,27 @@ class RoleRepository extends Repository {
311
312
  * @param {Object} body Search body containing either "query" or "controllers"
312
313
  * @param {Object} options
313
314
  */
314
- async searchRole (body, { from = 0, size = 9999 } = {}) {
315
- if (! body.controllers) {
315
+ async searchRole(body, { from = 0, size = 9999 } = {}) {
316
+ if (!body.controllers) {
316
317
  return this.search(body, { from, size });
317
318
  }
318
319
 
319
320
  const searchResults = await this.search(
320
- { query: {}, sort: [{ _id: { order: 'asc' } }] },
321
- { from: 0, size: 9999 }); // /!\ NOT the options values
321
+ { query: {}, sort: [{ _id: { order: "asc" } }] },
322
+ { from: 0, size: 9999 }
323
+ ); // /!\ NOT the options values
322
324
 
323
325
  const result = {
324
326
  hits: searchResults.hits,
325
- total: searchResults.total
327
+ total: searchResults.total,
326
328
  };
327
329
 
328
330
  if (body.controllers.length > 0) {
329
- result.hits = searchResults.hits
330
- .filter(role => Object
331
- .keys(role.controllers)
332
- .some(key => key === '*' || body.controllers.includes(key)));
331
+ result.hits = searchResults.hits.filter((role) =>
332
+ Object.keys(role.controllers).some(
333
+ (key) => key === "*" || body.controllers.includes(key)
334
+ )
335
+ );
333
336
 
334
337
  result.total = result.hits.length;
335
338
  }
@@ -346,11 +349,11 @@ class RoleRepository extends Repository {
346
349
  * @param {object} [options] The persistence options
347
350
  * @returns Promise
348
351
  */
349
- async validateAndSaveRole (role, options = {}) {
352
+ async validateAndSaveRole(role, options = {}) {
350
353
  await role.validateDefinition();
351
354
 
352
- if (role._id === 'anonymous' && ! role.canLogIn()) {
353
- throw kerror.get('security', 'role', 'login_required');
355
+ if (role._id === "anonymous" && !role.canLogIn()) {
356
+ throw kerror.get("security", "role", "login_required");
354
357
  }
355
358
 
356
359
  this.checkRoleNativeRights(role);
@@ -368,33 +371,34 @@ class RoleRepository extends Repository {
368
371
  *
369
372
  * @param {Role} role
370
373
  */
371
- checkRoleNativeRights (role) {
372
- Object.keys(role.controllers).forEach(roleController => {
373
- if ( roleController !== '*'
374
- && ! global.kuzzle.funnel.isNativeController(roleController)
374
+ checkRoleNativeRights(role) {
375
+ Object.keys(role.controllers).forEach((roleController) => {
376
+ if (
377
+ roleController !== "*" &&
378
+ !global.kuzzle.funnel.isNativeController(roleController)
375
379
  ) {
376
380
  return;
377
381
  }
378
382
 
379
- if (roleController === '*') {
380
- Object.keys(role.controllers['*'].actions).forEach(action => {
381
- if (action !== '*') {
382
- throw roleRightsError.get('unknown_action', role._id, action, '*');
383
+ if (roleController === "*") {
384
+ Object.keys(role.controllers["*"].actions).forEach((action) => {
385
+ if (action !== "*") {
386
+ throw roleRightsError.get("unknown_action", role._id, action, "*");
383
387
  }
384
388
  });
385
- }
386
- else {
389
+ } else {
387
390
  const controller = global.kuzzle.funnel.controllers.get(roleController);
388
391
  const actions = Object.keys(role.controllers[roleController].actions);
389
392
 
390
- actions.forEach(action => {
391
- if (action !== '*' && ! controller._isAction(action)) {
393
+ actions.forEach((action) => {
394
+ if (action !== "*" && !controller._isAction(action)) {
392
395
  throw roleRightsError.get(
393
- 'unknown_action',
396
+ "unknown_action",
394
397
  role._id,
395
398
  action,
396
399
  roleController,
397
- didYouMean(action, controller.__actions));
400
+ didYouMean(action, controller.__actions)
401
+ );
398
402
  }
399
403
  });
400
404
  }
@@ -407,23 +411,25 @@ class RoleRepository extends Repository {
407
411
  * @param {Role} role
408
412
  * @param {Force} force
409
413
  */
410
- checkRolePluginsRights (role, { force = false, forceWarn = false } = {}) {
414
+ checkRolePluginsRights(role, { force = false, forceWarn = false } = {}) {
411
415
  const plugins = global.kuzzle.pluginsManager;
412
416
 
413
417
  for (const roleController of Object.keys(role.controllers)) {
414
- if ( roleController === '*'
415
- || global.kuzzle.funnel.isNativeController(roleController)
418
+ if (
419
+ roleController === "*" ||
420
+ global.kuzzle.funnel.isNativeController(roleController)
416
421
  ) {
417
422
  return;
418
423
  }
419
424
 
420
- if (! plugins.isController(roleController)) {
421
- if (! force) {
425
+ if (!plugins.isController(roleController)) {
426
+ if (!force) {
422
427
  throw roleRightsError.get(
423
- 'unknown_controller',
428
+ "unknown_controller",
424
429
  role._id,
425
430
  roleController,
426
- didYouMean(roleController, plugins.getControllerNames()));
431
+ didYouMean(roleController, plugins.getControllerNames())
432
+ );
427
433
  }
428
434
 
429
435
  // Do not print any warning if Kuzzle is not started or if warn is not forced.
@@ -432,7 +438,9 @@ class RoleRepository extends Repository {
432
438
  // then we need to display non-existing controllers with the sanity check
433
439
  // made after plugins controllers loading.
434
440
  if (global.kuzzle.state === kuzzleStateEnum.RUNNING || forceWarn) {
435
- global.kuzzle.log.warn(`The role "${role._id}" gives access to the non-existing controller "${roleController}".`);
441
+ global.kuzzle.log.warn(
442
+ `The role "${role._id}" gives access to the non-existing controller "${roleController}".`
443
+ );
436
444
  }
437
445
 
438
446
  return;
@@ -440,19 +448,22 @@ class RoleRepository extends Repository {
440
448
 
441
449
  const roleActions = Object.keys(role.controllers[roleController].actions);
442
450
  for (const action of roleActions) {
443
- if (action !== '*' && ! plugins.isAction(roleController, action)) {
444
- if (! force) {
451
+ if (action !== "*" && !plugins.isAction(roleController, action)) {
452
+ if (!force) {
445
453
  throw roleRightsError.get(
446
- 'unknown_action',
454
+ "unknown_action",
447
455
  role._id,
448
456
  action,
449
457
  roleController,
450
- didYouMean(action, plugins.getActions(roleController)));
458
+ didYouMean(action, plugins.getActions(roleController))
459
+ );
451
460
  }
452
461
 
453
462
  // see the other comment
454
463
  if (global.kuzzle.state === kuzzleStateEnum.RUNNING || forceWarn) {
455
- global.kuzzle.log.warn(`The role "${role._id}" gives access to the non-existing action "${action}" for the controller "${roleController}".`);
464
+ global.kuzzle.log.warn(
465
+ `The role "${role._id}" gives access to the non-existing action "${action}" for the controller "${roleController}".`
466
+ );
456
467
  }
457
468
  }
458
469
  }
@@ -464,7 +475,7 @@ class RoleRepository extends Repository {
464
475
  * If there are some, Kuzzle will log a warning.
465
476
  */
466
477
 
467
- async sanityCheck () {
478
+ async sanityCheck() {
468
479
  const roles = await this.search({}, {});
469
480
 
470
481
  for (const role of roles.hits) {
@@ -479,7 +490,7 @@ class RoleRepository extends Repository {
479
490
  * @param {object} [options]
480
491
  * @returns Promise
481
492
  */
482
- async deleteById (id, options) {
493
+ async deleteById(id, options) {
483
494
  const role = await this.load(id);
484
495
  return this.delete(role, options);
485
496
  }
@@ -487,20 +498,23 @@ class RoleRepository extends Repository {
487
498
  /**
488
499
  * @override
489
500
  */
490
- async delete (role, { refresh = 'false' } = {}) {
491
- if (['admin', 'default', 'anonymous'].indexOf(role._id) > -1) {
492
- throw kerror.get('security', 'role', 'cannot_delete');
501
+ async delete(role, { refresh = "false" } = {}) {
502
+ if (["admin", "default", "anonymous"].indexOf(role._id) > -1) {
503
+ throw kerror.get("security", "role", "cannot_delete");
493
504
  }
494
505
 
495
- const query = { term: { 'policies.roleId': role._id } };
506
+ const query = { term: { "policies.roleId": role._id } };
496
507
 
497
- const response = await this.module.profile.search({ query }, {
498
- from: 0,
499
- size: 1
500
- });
508
+ const response = await this.module.profile.search(
509
+ { query },
510
+ {
511
+ from: 0,
512
+ size: 1,
513
+ }
514
+ );
501
515
 
502
516
  if (response.total > 0) {
503
- throw kerror.get('security', 'role', 'in_use', role._id);
517
+ throw kerror.get("security", "role", "in_use", role._id);
504
518
  }
505
519
 
506
520
  await this.deleteFromDatabase(role._id, { refresh });
@@ -514,11 +528,11 @@ class RoleRepository extends Repository {
514
528
  * @param {Role} role
515
529
  * @returns {object}
516
530
  */
517
- serializeToDatabase (role) {
531
+ serializeToDatabase(role) {
518
532
  const serializedRole = {};
519
533
 
520
- Object.keys(role).forEach(key => {
521
- if (key !== '_id' && key !== 'restrictedTo') {
534
+ Object.keys(role).forEach((key) => {
535
+ if (key !== "_id" && key !== "restrictedTo") {
522
536
  serializedRole[key] = role[key];
523
537
  }
524
538
  });
@@ -529,11 +543,10 @@ class RoleRepository extends Repository {
529
543
  /**
530
544
  * @override
531
545
  */
532
- async truncate (opts) {
546
+ async truncate(opts) {
533
547
  try {
534
548
  await super.truncate(opts);
535
- }
536
- finally {
549
+ } finally {
537
550
  this.invalidate();
538
551
  }
539
552
  }
@@ -543,11 +556,10 @@ class RoleRepository extends Repository {
543
556
  * the entire cache is emptied.
544
557
  * @param {string} [roleId]
545
558
  */
546
- invalidate (roleId) {
547
- if (! roleId) {
559
+ invalidate(roleId) {
560
+ if (!roleId) {
548
561
  this.roles.clear();
549
- }
550
- else {
562
+ } else {
551
563
  this.roles.delete(roleId);
552
564
  }
553
565
  }