kuzzle 2.19.2 → 2.19.3

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 (289) 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 +89 -87
  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 +3 -3
  71. package/lib/core/backend/backend.js +34 -31
  72. package/lib/core/backend/backendCluster.d.ts +2 -2
  73. package/lib/core/backend/backendCluster.js +5 -5
  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 +2 -2
  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 +2 -2
  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 +25 -24
  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 +2 -2
  227. package/lib/types/DebugModule.js +1 -1
  228. package/lib/types/Global.d.ts +1 -1
  229. package/lib/types/HttpStream.d.ts +2 -1
  230. package/lib/types/HttpStream.js +7 -5
  231. package/lib/types/Kuzzle.d.ts +1 -1
  232. package/lib/types/KuzzleDocument.d.ts +1 -1
  233. package/lib/types/OpenApiDefinition.d.ts +1 -1
  234. package/lib/types/PasswordPolicy.d.ts +1 -1
  235. package/lib/types/Plugin.d.ts +6 -6
  236. package/lib/types/Plugin.js +2 -2
  237. package/lib/types/Policy.d.ts +1 -1
  238. package/lib/types/RequestPayload.d.ts +1 -1
  239. package/lib/types/ResponsePayload.d.ts +1 -1
  240. package/lib/types/Token.d.ts +1 -1
  241. package/lib/types/User.d.ts +1 -1
  242. package/lib/types/config/DumpConfiguration.d.ts +8 -8
  243. package/lib/types/config/HttpConfiguration.d.ts +1 -1
  244. package/lib/types/config/KuzzleConfiguration.d.ts +1 -1
  245. package/lib/types/config/LimitsConfiguration.d.ts +8 -8
  246. package/lib/types/config/PluginsConfiguration.d.ts +4 -4
  247. package/lib/types/config/SecurityConfiguration.d.ts +62 -62
  248. package/lib/types/config/ServerConfiguration.d.ts +55 -55
  249. package/lib/types/config/ServicesConfiguration.d.ts +2 -2
  250. package/lib/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +10 -10
  251. package/lib/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +3 -3
  252. package/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +194 -110
  253. package/lib/types/errors/ErrorDefinition.d.ts +1 -1
  254. package/lib/types/errors/ErrorDomains.d.ts +1 -1
  255. package/lib/types/index.d.ts +38 -38
  256. package/lib/types/realtime/RealtimeScope.d.ts +1 -1
  257. package/lib/types/realtime/RealtimeUsers.d.ts +1 -1
  258. package/lib/util/assertType.js +13 -11
  259. package/lib/util/async.d.ts +1 -0
  260. package/lib/util/async.js +61 -0
  261. package/lib/util/asyncStore.js +19 -21
  262. package/lib/util/bufferedPassThrough.d.ts +2 -2
  263. package/lib/util/bufferedPassThrough.js +4 -4
  264. package/lib/util/bytes.js +9 -13
  265. package/lib/util/crypto.js +1 -1
  266. package/lib/util/debug.js +5 -5
  267. package/lib/util/deprecate.js +24 -21
  268. package/lib/util/didYouMean.js +7 -7
  269. package/lib/util/dump-collection.d.ts +2 -2
  270. package/lib/util/dump-collection.js +26 -26
  271. package/lib/util/esRequest.d.ts +1 -0
  272. package/lib/util/esRequest.js +62 -0
  273. package/lib/util/extractFields.js +24 -25
  274. package/lib/util/inflector.js +5 -5
  275. package/lib/util/koncordeCompat.d.ts +2 -2
  276. package/lib/util/koncordeCompat.js +5 -5
  277. package/lib/util/memoize.js +3 -5
  278. package/lib/util/mutex.d.ts +19 -1
  279. package/lib/util/mutex.js +39 -12
  280. package/lib/util/name-generator.js +1331 -1331
  281. package/lib/util/promback.js +8 -10
  282. package/lib/util/readYamlFile.d.ts +1 -1
  283. package/lib/util/readYamlFile.js +1 -1
  284. package/lib/util/requestAssertions.js +34 -34
  285. package/lib/util/safeObject.js +5 -5
  286. package/lib/util/stackTrace.js +20 -22
  287. package/lib/util/wildcard.js +15 -15
  288. package/package.json +6 -6
  289. package/npm-shrinkwrap.json +0 -19422
@@ -19,14 +19,14 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const { Request } = require('../../api/request');
25
- const debug = require('../../util/debug')('kuzzle:core:security:users');
26
- const Repository = require('../shared/repository');
27
- const kerror = require('../../kerror');
28
- const { User } = require('../../model/security/user');
29
- const ApiKey = require('../../model/storage/apiKey');
24
+ const { Request } = require("../../api/request");
25
+ const debug = require("../../util/debug")("kuzzle:core:security:users");
26
+ const Repository = require("../shared/repository");
27
+ const kerror = require("../../kerror");
28
+ const { User } = require("../../model/security/user");
29
+ const ApiKey = require("../../model/storage/apiKey");
30
30
 
31
31
  /**
32
32
  * @class UserRepository
@@ -37,26 +37,29 @@ class UserRepository extends Repository {
37
37
  * @param {SecurityModule} securityModule
38
38
  * @constructor
39
39
  */
40
- constructor (securityModule) {
40
+ constructor(securityModule) {
41
41
  super({ store: global.kuzzle.internalIndex });
42
42
  this.module = securityModule;
43
- this.collection = 'users';
43
+ this.collection = "users";
44
44
  this.ObjectConstructor = User;
45
45
  this.anonymousUser = null;
46
46
  }
47
47
 
48
- async init () {
48
+ async init() {
49
49
  this.anonymousUser = await this.fromDTO({
50
- _id: '-1',
51
- name: 'Anonymous',
52
- profileIds: ['anonymous']
50
+ _id: "-1",
51
+ name: "Anonymous",
52
+ profileIds: ["anonymous"],
53
53
  });
54
54
 
55
55
  /**
56
56
  * Gets the standard anonymous User object
57
57
  * @returns {User}
58
58
  */
59
- global.kuzzle.onAsk('core:security:user:anonymous:get', () => this.anonymousUser);
59
+ global.kuzzle.onAsk(
60
+ "core:security:user:anonymous:get",
61
+ () => this.anonymousUser
62
+ );
60
63
 
61
64
  /**
62
65
  * Creates a new user
@@ -68,8 +71,10 @@ class UserRepository extends Repository {
68
71
  * @throws If already exists or if at least one profile ID is unknown
69
72
  */
70
73
  global.kuzzle.onAsk(
71
- 'core:security:user:create',
72
- (id, profileIds, content, opts) => this.create(id, profileIds, content, opts));
74
+ "core:security:user:create",
75
+ (id, profileIds, content, opts) =>
76
+ this.create(id, profileIds, content, opts)
77
+ );
73
78
 
74
79
  /**
75
80
  * Deletes an existing user
@@ -77,9 +82,9 @@ class UserRepository extends Repository {
77
82
  * @param {Object} opts - refresh
78
83
  * @throws If the user doesn't exist
79
84
  */
80
- global.kuzzle.onAsk(
81
- 'core:security:user:delete',
82
- (id, opts) => this.deleteById(id, opts));
85
+ global.kuzzle.onAsk("core:security:user:delete", (id, opts) =>
86
+ this.deleteById(id, opts)
87
+ );
83
88
 
84
89
  /**
85
90
  * Loads and returns an existing user
@@ -87,7 +92,7 @@ class UserRepository extends Repository {
87
92
  * @returns {User}
88
93
  * @throws {NotFoundError} If the user doesn't exist
89
94
  */
90
- global.kuzzle.onAsk('core:security:user:get', id => this.load(id));
95
+ global.kuzzle.onAsk("core:security:user:get", (id) => this.load(id));
91
96
 
92
97
  /**
93
98
  * Gets multiple users
@@ -95,9 +100,9 @@ class UserRepository extends Repository {
95
100
  * @returns {Array.<User>}
96
101
  * @throws If one or more users don't exist
97
102
  */
98
- global.kuzzle.onAsk(
99
- 'core:security:user:mGet',
100
- ids => this.loadMultiFromDatabase(ids));
103
+ global.kuzzle.onAsk("core:security:user:mGet", (ids) =>
104
+ this.loadMultiFromDatabase(ids)
105
+ );
101
106
 
102
107
  /**
103
108
  * Replaces the user's content
@@ -107,8 +112,10 @@ class UserRepository extends Repository {
107
112
  * @returns {User} Updated user
108
113
  */
109
114
  global.kuzzle.onAsk(
110
- 'core:security:user:replace',
111
- (id, profileIds, content, opts) => this.replace(id, profileIds, content, opts));
115
+ "core:security:user:replace",
116
+ (id, profileIds, content, opts) =>
117
+ this.replace(id, profileIds, content, opts)
118
+ );
112
119
 
113
120
  /**
114
121
  * Fetches the next page of search results
@@ -116,9 +123,9 @@ class UserRepository extends Repository {
116
123
  * @param {String} [ttl] - refresh the scroll results TTL
117
124
  * @returns {Object} Search results
118
125
  */
119
- global.kuzzle.onAsk(
120
- 'core:security:user:scroll',
121
- (id, ttl) => this.scroll(id, ttl));
126
+ global.kuzzle.onAsk("core:security:user:scroll", (id, ttl) =>
127
+ this.scroll(id, ttl)
128
+ );
122
129
 
123
130
  /**
124
131
  * Searches users
@@ -126,17 +133,17 @@ class UserRepository extends Repository {
126
133
  * @param {Object} opts (from, size, scroll)
127
134
  * @returns {Object} Search results
128
135
  */
129
- global.kuzzle.onAsk(
130
- 'core:security:user:search',
131
- (searchBody, opts) => this.search(searchBody, opts));
136
+ global.kuzzle.onAsk("core:security:user:search", (searchBody, opts) =>
137
+ this.search(searchBody, opts)
138
+ );
132
139
 
133
140
  /**
134
141
  * Removes all existing users
135
142
  * @param {Object} opts (refresh)
136
143
  */
137
- global.kuzzle.onAsk(
138
- 'core:security:user:truncate',
139
- opts => this.truncate(opts));
144
+ global.kuzzle.onAsk("core:security:user:truncate", (opts) =>
145
+ this.truncate(opts)
146
+ );
140
147
 
141
148
  /**
142
149
  * Updates an existing user using a partial content
@@ -146,17 +153,19 @@ class UserRepository extends Repository {
146
153
  * @returns {User} Updated user
147
154
  */
148
155
  global.kuzzle.onAsk(
149
- 'core:security:user:update',
150
- (id, profileIds, content, opts) => this.update(id, profileIds, content, opts));
156
+ "core:security:user:update",
157
+ (id, profileIds, content, opts) =>
158
+ this.update(id, profileIds, content, opts)
159
+ );
151
160
 
152
161
  /**
153
162
  * Returns true if there is at least one user with the "admin" profile
154
163
  *
155
164
  * @returns {Boolean}
156
165
  */
157
- global.kuzzle.onAsk(
158
- 'core:security:user:admin:exist',
159
- () => this.adminExists());
166
+ global.kuzzle.onAsk("core:security:user:admin:exist", () =>
167
+ this.adminExists()
168
+ );
160
169
  }
161
170
 
162
171
  /**
@@ -166,7 +175,7 @@ class UserRepository extends Repository {
166
175
  * @param {Object} content
167
176
  * @param {Object} [opts]
168
177
  */
169
- async create (id, profileIds, content, { userId, refresh = 'false' } = {}) {
178
+ async create(id, profileIds, content, { userId, refresh = "false" } = {}) {
170
179
  const user = await this.fromDTO({
171
180
  ...content,
172
181
  // Profile Ids and content are stored at the same level... for now.
@@ -184,12 +193,11 @@ class UserRepository extends Repository {
184
193
 
185
194
  try {
186
195
  return await this.persist(user, {
187
- database: { method: 'create', refresh }
196
+ database: { method: "create", refresh },
188
197
  });
189
- }
190
- catch (error) {
191
- if (error.id === 'services.storage.document_already_exists') {
192
- throw kerror.get('security', 'user', 'already_exists', id);
198
+ } catch (error) {
199
+ if (error.id === "services.storage.document_already_exists") {
200
+ throw kerror.get("security", "user", "already_exists", id);
193
201
  }
194
202
 
195
203
  throw error;
@@ -204,11 +212,12 @@ class UserRepository extends Repository {
204
212
  * @param {Object} [opts]
205
213
  * @returns {Promise}
206
214
  */
207
- async update (id, profileIds, content, {
208
- refresh = 'false',
209
- retryOnConflict = 10,
210
- userId,
211
- } = {}) {
215
+ async update(
216
+ id,
217
+ profileIds,
218
+ content,
219
+ { refresh = "false", retryOnConflict = 10, userId } = {}
220
+ ) {
212
221
  const user = await this.load(id);
213
222
  const pojo = this.toDTO(user);
214
223
 
@@ -228,10 +237,10 @@ class UserRepository extends Repository {
228
237
 
229
238
  return this.persist(updated, {
230
239
  database: {
231
- method: 'update',
240
+ method: "update",
232
241
  refresh,
233
242
  retryOnConflict,
234
- }
243
+ },
235
244
  });
236
245
  }
237
246
 
@@ -242,7 +251,7 @@ class UserRepository extends Repository {
242
251
  * @param {Object} [opts]
243
252
  * @returns {Promise}
244
253
  */
245
- async replace (id, profileIds, content, { refresh = 'false', userId } = {}) {
254
+ async replace(id, profileIds, content, { refresh = "false", userId } = {}) {
246
255
  // Assertion: the user must exist
247
256
  await this.load(id);
248
257
 
@@ -254,16 +263,16 @@ class UserRepository extends Repository {
254
263
  author: userId,
255
264
  createdAt: Date.now(),
256
265
  updatedAt: null,
257
- updater: null
266
+ updater: null,
258
267
  },
259
268
  profileIds,
260
269
  });
261
270
 
262
271
  return this.persist(user, {
263
272
  database: {
264
- method: 'replace',
273
+ method: "replace",
265
274
  refresh,
266
- }
275
+ },
267
276
  });
268
277
  }
269
278
 
@@ -274,22 +283,23 @@ class UserRepository extends Repository {
274
283
  * @returns {Promise.<User>}
275
284
  * @throws {NotFoundError} If the user is not found
276
285
  */
277
- async load (id) {
278
- if (id === 'anonymous' || id === '-1') {
286
+ async load(id) {
287
+ if (id === "anonymous" || id === "-1") {
279
288
  return this.anonymousUser;
280
289
  }
281
290
 
282
291
  return super.load(id);
283
292
  }
284
293
 
285
- async persist (user, options = {}) {
294
+ async persist(user, options = {}) {
286
295
  const databaseOptions = options.database || {};
287
296
  const cacheOptions = options.cache || {};
288
297
 
289
- if ( user._id === this.anonymousUser._id
290
- && user.profileIds.indexOf('anonymous') === -1
298
+ if (
299
+ user._id === this.anonymousUser._id &&
300
+ user.profileIds.indexOf("anonymous") === -1
291
301
  ) {
292
- throw kerror.get('security', 'user', 'anonymous_profile_required');
302
+ throw kerror.get("security", "user", "anonymous_profile_required");
293
303
  }
294
304
 
295
305
  await this.persistToDatabase(user, databaseOptions);
@@ -303,8 +313,8 @@ class UserRepository extends Repository {
303
313
  * @param dto
304
314
  * @returns {Promise<User>}
305
315
  */
306
- async fromDTO (dto) {
307
- if (dto.profileIds && ! Array.isArray(dto.profileIds)) {
316
+ async fromDTO(dto) {
317
+ if (dto.profileIds && !Array.isArray(dto.profileIds)) {
308
318
  dto.profileIds = [dto.profileIds];
309
319
  }
310
320
 
@@ -317,14 +327,14 @@ class UserRepository extends Repository {
317
327
  // if the user exists (has an _id) but no profile associated: there is a
318
328
  // database inconsistency
319
329
  if (user.profileIds.length === 0) {
320
- throw kerror.get('security', 'user', 'no_profile', user._id);
330
+ throw kerror.get("security", "user", "no_profile", user._id);
321
331
  }
322
332
 
323
333
  const profiles = await this.module.profile.loadProfiles(user.profileIds);
324
334
 
325
335
  // Fail if not all profiles are found
326
- if (profiles.some(p => p === null)) {
327
- throw kerror.get('security', 'user', 'cannot_hydrate', dto._id);
336
+ if (profiles.some((p) => p === null)) {
337
+ throw kerror.get("security", "user", "cannot_hydrate", dto._id);
328
338
  }
329
339
 
330
340
  return user;
@@ -338,7 +348,7 @@ class UserRepository extends Repository {
338
348
  * @param {Object} [options]
339
349
  * @returns {Promise}
340
350
  */
341
- async deleteById (id, opts) {
351
+ async deleteById(id, opts) {
342
352
  const user = await this.load(id);
343
353
 
344
354
  return this.delete(user, opts);
@@ -347,8 +357,8 @@ class UserRepository extends Repository {
347
357
  /**
348
358
  * @override
349
359
  */
350
- async delete (user, { refresh = 'false' } = {}) {
351
- debug('Delete user: %s', user);
360
+ async delete(user, { refresh = "false" } = {}) {
361
+ debug("Delete user: %s", user);
352
362
 
353
363
  await this._removeUserStrategies(user);
354
364
  await ApiKey.deleteByUser(user, { refresh });
@@ -356,7 +366,7 @@ class UserRepository extends Repository {
356
366
  await super.delete(user, { refresh });
357
367
  }
358
368
 
359
- async _removeUserStrategies (user) {
369
+ async _removeUserStrategies(user) {
360
370
  const availableStrategies = global.kuzzle.pluginsManager.listStrategies();
361
371
  const userStrategies = [];
362
372
  const request = new Request({ _id: user._id });
@@ -364,7 +374,8 @@ class UserRepository extends Repository {
364
374
  for (const strategy of availableStrategies) {
365
375
  const existStrategy = global.kuzzle.pluginsManager.getStrategyMethod(
366
376
  strategy,
367
- 'exists');
377
+ "exists"
378
+ );
368
379
 
369
380
  if (await existStrategy(request, user._id, strategy)) {
370
381
  userStrategies.push(strategy);
@@ -376,15 +387,19 @@ class UserRepository extends Repository {
376
387
  for (const strategy of userStrategies) {
377
388
  const deleteStrategy = global.kuzzle.pluginsManager.getStrategyMethod(
378
389
  strategy,
379
- 'delete');
390
+ "delete"
391
+ );
380
392
 
381
393
  // We catch any error produced by delete as we want to make as much
382
394
  // cleanup as possible
383
395
  try {
384
- debug('Deleting credentials on strategy %s for user %s', strategy, user._id);
396
+ debug(
397
+ "Deleting credentials on strategy %s for user %s",
398
+ strategy,
399
+ user._id
400
+ );
385
401
  await deleteStrategy(request, user._id, strategy);
386
- }
387
- catch (error) {
402
+ } catch (error) {
388
403
  errors.push(error);
389
404
  }
390
405
  }
@@ -392,36 +407,37 @@ class UserRepository extends Repository {
392
407
 
393
408
  if (errors.length > 0) {
394
409
  throw kerror.get(
395
- 'security',
396
- 'credentials',
397
- 'rejected',
398
- errors.join('\n\t- '));
410
+ "security",
411
+ "credentials",
412
+ "rejected",
413
+ errors.join("\n\t- ")
414
+ );
399
415
  }
400
416
  }
401
417
 
402
418
  /**
403
419
  * @override
404
420
  */
405
- async loadOneFromDatabase (id) {
421
+ async loadOneFromDatabase(id) {
406
422
  try {
407
423
  return await super.loadOneFromDatabase(id);
408
- }
409
- catch (err) {
424
+ } catch (err) {
410
425
  if (err.status === 404) {
411
- throw kerror.get('security', 'user', 'not_found', id);
426
+ throw kerror.get("security", "user", "not_found", id);
412
427
  }
413
428
  throw err;
414
429
  }
415
430
  }
416
431
 
417
- async adminExists () {
432
+ async adminExists() {
418
433
  const { total } = await this.search(
419
434
  {
420
435
  query: {
421
- term: { profileIds: 'admin' }
422
- }
436
+ term: { profileIds: "admin" },
437
+ },
423
438
  },
424
- { size: 1 });
439
+ { size: 1 }
440
+ );
425
441
 
426
442
  return total >= 1;
427
443
  }
@@ -1,4 +1,4 @@
1
- import { JSONObject } from 'kuzzle-sdk';
1
+ import { JSONObject } from "kuzzle-sdk";
2
2
  /**
3
3
  * Emulates the normalized object returned by Koncorde v3
4
4
  */
@@ -82,7 +82,9 @@ class Koncorde {
82
82
  * @return {boolean}
83
83
  */
84
84
  exists(index, collection) {
85
- return this.koncorde.getIndexes().includes((0, koncordeCompat_1.toKoncordeIndex)(index, collection));
85
+ return this.koncorde
86
+ .getIndexes()
87
+ .includes((0, koncordeCompat_1.toKoncordeIndex)(index, collection));
86
88
  }
87
89
  /**
88
90
  * Returns the list of collections associated to an index registered in this
@@ -19,13 +19,13 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const _ = require('lodash');
25
- const path = require('path');
26
- const semver = require('semver');
24
+ const _ = require("lodash");
25
+ const path = require("path");
26
+ const semver = require("semver");
27
27
 
28
- const kerror = require('../../kerror').wrap('plugin', 'manifest');
28
+ const kerror = require("../../kerror").wrap("plugin", "manifest");
29
29
 
30
30
  /**
31
31
  * Abstract class used to load a manifest.json file.
@@ -35,46 +35,45 @@ const kerror = require('../../kerror').wrap('plugin', 'manifest');
35
35
  * @param {string} pluginPath - Absolute path to the plugin directory
36
36
  */
37
37
  class AbstractManifest {
38
- constructor (pluginPath) {
38
+ constructor(pluginPath) {
39
39
  this.path = pluginPath;
40
40
 
41
- this.manifestPath = path.resolve(this.path, 'manifest.json');
41
+ this.manifestPath = path.resolve(this.path, "manifest.json");
42
42
  this.name = null;
43
43
  this.kuzzleVersion = null;
44
44
  this.raw = null;
45
45
  }
46
46
 
47
- load () {
47
+ load() {
48
48
  try {
49
49
  this.raw = require(this.manifestPath);
50
- }
51
- catch (e) {
52
- throw kerror.get('cannot_load', this.manifestPath, e.message);
50
+ } catch (e) {
51
+ throw kerror.get("cannot_load", this.manifestPath, e.message);
53
52
  }
54
53
 
55
54
  if (_.isNil(this.raw.kuzzleVersion)) {
56
- throw kerror.get('missing_version', this.manifestPath);
55
+ throw kerror.get("missing_version", this.manifestPath);
57
56
  }
58
57
 
59
58
  this.kuzzleVersion = this.raw.kuzzleVersion;
60
59
 
61
- if (! semver.satisfies(global.kuzzle.config.version, this.kuzzleVersion)) {
60
+ if (!semver.satisfies(global.kuzzle.config.version, this.kuzzleVersion)) {
62
61
  throw kerror.get(
63
- 'version_mismatch',
62
+ "version_mismatch",
64
63
  this.path,
65
64
  global.kuzzle.config.version,
66
- this.kuzzleVersion);
65
+ this.kuzzleVersion
66
+ );
67
67
  }
68
68
 
69
- if (! _.isNil(this.raw.name)) {
70
- if (typeof this.raw.name !== 'string' || this.raw.name.length === 0) {
71
- throw kerror.get('invalid_name_type', this.manifestPath);
69
+ if (!_.isNil(this.raw.name)) {
70
+ if (typeof this.raw.name !== "string" || this.raw.name.length === 0) {
71
+ throw kerror.get("invalid_name_type", this.manifestPath);
72
72
  }
73
73
 
74
74
  this.name = this.raw.name;
75
- }
76
- else {
77
- throw kerror.get('missing_name', this.manifestPath);
75
+ } else {
76
+ throw kerror.get("missing_name", this.manifestPath);
78
77
  }
79
78
  }
80
79
 
@@ -87,11 +86,11 @@ class AbstractManifest {
87
86
  *
88
87
  * @returns {Object}
89
88
  */
90
- toJSON () {
89
+ toJSON() {
91
90
  return {
92
91
  kuzzleVersion: this.kuzzleVersion,
93
92
  name: this.name,
94
- path: this.path
93
+ path: this.path,
95
94
  };
96
95
  }
97
96
  }