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,25 +19,25 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  // Most of the functions exposed in this file should be viewed as
25
25
  // critical section of code.
26
26
 
27
- const assert = require('assert');
27
+ const assert = require("assert");
28
28
 
29
- const EventEmitter = require('eventemitter3');
30
- const Bluebird = require('bluebird');
31
- const debug = require('debug')('kuzzle:events');
32
- const { v4: uuidv4 } = require('uuid');
29
+ const EventEmitter = require("eventemitter3");
30
+ const Bluebird = require("bluebird");
31
+ const debug = require("debug")("kuzzle:events");
32
+ const { v4: uuidv4 } = require("uuid");
33
33
 
34
- const Promback = require('../../util/promback');
35
- const memoize = require('../../util/memoize');
36
- const PipeRunner = require('./pipeRunner');
37
- const kerror = require('../../kerror');
34
+ const Promback = require("../../util/promback");
35
+ const memoize = require("../../util/memoize");
36
+ const PipeRunner = require("./pipeRunner");
37
+ const kerror = require("../../kerror");
38
38
 
39
39
  class PluginPipeDefinition {
40
- constructor (event, handler, pipeId = null) {
40
+ constructor(event, handler, pipeId = null) {
41
41
  this.event = event;
42
42
  this.handler = handler;
43
43
 
@@ -46,7 +46,7 @@ class PluginPipeDefinition {
46
46
  }
47
47
 
48
48
  class KuzzleEventEmitter extends EventEmitter {
49
- constructor (maxConcurrentPipes, pipesBufferSize) {
49
+ constructor(maxConcurrentPipes, pipesBufferSize) {
50
50
  super();
51
51
  this.superEmit = super.emit;
52
52
  this.pipeRunner = new PipeRunner(maxConcurrentPipes, pipesBufferSize);
@@ -78,10 +78,13 @@ class KuzzleEventEmitter extends EventEmitter {
78
78
  * @param {String} event
79
79
  * @param {Function} fn
80
80
  */
81
- onPipe (event, fn) {
82
- assert(typeof fn === 'function', `Cannot listen to pipe event ${event}: "${fn}" is not a function`);
81
+ onPipe(event, fn) {
82
+ assert(
83
+ typeof fn === "function",
84
+ `Cannot listen to pipe event ${event}: "${fn}" is not a function`
85
+ );
83
86
 
84
- if (! this.corePipes.has(event)) {
87
+ if (!this.corePipes.has(event)) {
85
88
  this.corePipes.set(event, []);
86
89
  }
87
90
 
@@ -95,14 +98,19 @@ class KuzzleEventEmitter extends EventEmitter {
95
98
  * @param {String} event
96
99
  * @param {Function} fn
97
100
  */
98
- onAsk (event, fn) {
99
- assert(typeof fn === 'function', `Cannot listen to ask event "${event}": "${fn}" is not a function`);
100
- assert(! this.coreAnswerers.has(event), `Cannot add a listener to the ask event "${event}": event has already an answerer`);
101
+ onAsk(event, fn) {
102
+ assert(
103
+ typeof fn === "function",
104
+ `Cannot listen to ask event "${event}": "${fn}" is not a function`
105
+ );
106
+ assert(
107
+ !this.coreAnswerers.has(event),
108
+ `Cannot add a listener to the ask event "${event}": event has already an answerer`
109
+ );
101
110
 
102
111
  this.coreAnswerers.set(event, fn);
103
112
  }
104
113
 
105
-
106
114
  /**
107
115
  * Registers a core 'callback' answerer
108
116
  * There can only be 0 or 1 answerer per callback event.
@@ -110,9 +118,15 @@ class KuzzleEventEmitter extends EventEmitter {
110
118
  * @param {String} event
111
119
  * @param {Function} fn
112
120
  */
113
- onCall (event, fn) {
114
- assert(typeof fn === 'function', `Cannot register callback for event "${event}": "${fn}" is not a function`);
115
- assert(! this.coreSyncedAnswerers.has(event), `Cannot register callback for event "${event}": a callback has already been registered`);
121
+ onCall(event, fn) {
122
+ assert(
123
+ typeof fn === "function",
124
+ `Cannot register callback for event "${event}": "${fn}" is not a function`
125
+ );
126
+ assert(
127
+ !this.coreSyncedAnswerers.has(event),
128
+ `Cannot register callback for event "${event}": a callback has already been registered`
129
+ );
116
130
 
117
131
  this.coreSyncedAnswerers.set(event, fn);
118
132
  }
@@ -125,7 +139,7 @@ class KuzzleEventEmitter extends EventEmitter {
125
139
  * @param {string} event
126
140
  * @param {*} data
127
141
  */
128
- emit (event, data) {
142
+ emit(event, data) {
129
143
  const events = getWildcardEvents(event);
130
144
  debug('Triggering event "%s" with data: %o', event, data);
131
145
 
@@ -153,13 +167,16 @@ class KuzzleEventEmitter extends EventEmitter {
153
167
  * @param {*} payload
154
168
  * @returns {Promise.<*>|null}
155
169
  */
156
- pipe (event, ...payload) {
170
+ pipe(event, ...payload) {
157
171
  debug('Triggering pipe "%s" with payload: %o', event, payload);
158
172
 
159
173
  let callback = null;
160
174
 
161
175
  // safe: a pipe's payload can never contain functions
162
- if (payload.length > 0 && typeof payload[payload.length - 1] === 'function') {
176
+ if (
177
+ payload.length > 0 &&
178
+ typeof payload[payload.length - 1] === "function"
179
+ ) {
163
180
  callback = payload.pop();
164
181
  }
165
182
 
@@ -170,7 +187,7 @@ class KuzzleEventEmitter extends EventEmitter {
170
187
  const targets = this.pluginPipes.get(events[i]);
171
188
 
172
189
  if (targets) {
173
- targets.forEach(t => funcs.push(t));
190
+ targets.forEach((t) => funcs.push(t));
174
191
  }
175
192
  }
176
193
 
@@ -185,8 +202,7 @@ class KuzzleEventEmitter extends EventEmitter {
185
202
 
186
203
  if (funcs.length === 0) {
187
204
  pipeCallback.call(callbackContext, null, ...payload);
188
- }
189
- else {
205
+ } else {
190
206
  this.pipeRunner.run(funcs, payload, pipeCallback, callbackContext);
191
207
  }
192
208
 
@@ -196,21 +212,28 @@ class KuzzleEventEmitter extends EventEmitter {
196
212
  /**
197
213
  * Emits an "ask" event to get information about the provided payload
198
214
  */
199
- async ask (event, ...payload) {
215
+ async ask(event, ...payload) {
200
216
  debug('Triggering ask "%s" with payload: %o', event, payload);
201
217
 
202
218
  const fn = this.coreAnswerers.get(event);
203
219
 
204
- if (! fn) {
205
- throw kerror.get('core', 'fatal', 'assertion_failed', `the requested ask event '${event}' doesn't have an answerer`);
220
+ if (!fn) {
221
+ throw kerror.get(
222
+ "core",
223
+ "fatal",
224
+ "assertion_failed",
225
+ `the requested ask event '${event}' doesn't have an answerer`
226
+ );
206
227
  }
207
228
 
208
229
  const response = await fn(...payload);
209
230
 
210
- getWildcardEvents(event).forEach(ev => super.emit(ev, {
211
- args: payload,
212
- response,
213
- }));
231
+ getWildcardEvents(event).forEach((ev) =>
232
+ super.emit(ev, {
233
+ args: payload,
234
+ response,
235
+ })
236
+ );
214
237
 
215
238
  return response;
216
239
  }
@@ -218,21 +241,28 @@ class KuzzleEventEmitter extends EventEmitter {
218
241
  /**
219
242
  * Calls a callback to get information about the provided payload
220
243
  */
221
- call (event, ...payload) {
244
+ call(event, ...payload) {
222
245
  debug('Triggering callback "%s" with payload: %o', event, payload);
223
246
 
224
247
  const fn = this.coreSyncedAnswerers.get(event);
225
248
 
226
- if (! fn) {
227
- throw kerror.get('core', 'fatal', 'assertion_failed', `the requested callback event '${event}' doesn't have an answerer`);
249
+ if (!fn) {
250
+ throw kerror.get(
251
+ "core",
252
+ "fatal",
253
+ "assertion_failed",
254
+ `the requested callback event '${event}' doesn't have an answerer`
255
+ );
228
256
  }
229
257
 
230
258
  const response = fn(...payload);
231
259
 
232
- getWildcardEvents(event).forEach(ev => super.emit(ev, {
233
- args: payload,
234
- response,
235
- }));
260
+ getWildcardEvents(event).forEach((ev) =>
261
+ super.emit(ev, {
262
+ args: payload,
263
+ response,
264
+ })
265
+ );
236
266
 
237
267
  return response;
238
268
  }
@@ -241,35 +271,32 @@ class KuzzleEventEmitter extends EventEmitter {
241
271
  * Registers a plugin hook.
242
272
  * Catch any error in the handler and emit the hook:onError event.
243
273
  */
244
- registerPluginHook (pluginName, event, fn) {
274
+ registerPluginHook(pluginName, event, fn) {
245
275
  this.on(event, (...args) => {
246
276
  try {
247
277
  const ret = fn(...args, event);
248
278
 
249
- if (typeof ret === 'object' && typeof ret.catch === 'function') {
250
- ret.catch(error => {
251
- if (event !== 'hook:onError') {
252
- this.emit('hook:onError', { error, event, pluginName });
253
- }
254
- else {
255
- this.emit('plugin:hook:loop-error', { error, pluginName });
279
+ if (typeof ret === "object" && typeof ret.catch === "function") {
280
+ ret.catch((error) => {
281
+ if (event !== "hook:onError") {
282
+ this.emit("hook:onError", { error, event, pluginName });
283
+ } else {
284
+ this.emit("plugin:hook:loop-error", { error, pluginName });
256
285
  }
257
286
  });
258
287
  }
259
- }
260
- catch (error) {
261
- if (event !== 'hook:onError') {
262
- this.emit('hook:onError', { error, event, pluginName });
263
- }
264
- else {
265
- this.emit('plugin:hook:loop-error', { error, pluginName });
288
+ } catch (error) {
289
+ if (event !== "hook:onError") {
290
+ this.emit("hook:onError", { error, event, pluginName });
291
+ } else {
292
+ this.emit("plugin:hook:loop-error", { error, pluginName });
266
293
  }
267
294
  }
268
295
  });
269
296
  }
270
297
 
271
- registerPluginPipe (event, handler) {
272
- if (! this.pluginPipes.has(event)) {
298
+ registerPluginPipe(event, handler) {
299
+ if (!this.pluginPipes.has(event)) {
273
300
  this.pluginPipes.set(event, []);
274
301
  }
275
302
 
@@ -282,19 +309,18 @@ class KuzzleEventEmitter extends EventEmitter {
282
309
  return definition.pipeId;
283
310
  }
284
311
 
285
- unregisterPluginPipe (pipeId) {
312
+ unregisterPluginPipe(pipeId) {
286
313
  const definition = this.pluginPipeDefinitions.get(pipeId);
287
314
 
288
- if (! definition) {
289
- throw kerror.get('plugin', 'runtime', 'unknown_pipe', pipeId);
315
+ if (!definition) {
316
+ throw kerror.get("plugin", "runtime", "unknown_pipe", pipeId);
290
317
  }
291
318
 
292
319
  const handlers = this.pluginPipes.get(definition.event);
293
320
  handlers.splice(handlers.indexOf(definition.handler), 1);
294
321
  if (handlers.length > 0) {
295
322
  this.pluginPipes.set(definition.event, handlers);
296
- }
297
- else {
323
+ } else {
298
324
  this.pluginPipes.delete(definition.event);
299
325
  }
300
326
 
@@ -307,7 +333,7 @@ class KuzzleEventEmitter extends EventEmitter {
307
333
  * @param {string} event
308
334
  * @return {Boolean} [description]
309
335
  */
310
- hasAskAnswerer (event) {
336
+ hasAskAnswerer(event) {
311
337
  return this.coreAnswerers.has(event);
312
338
  }
313
339
  }
@@ -321,7 +347,7 @@ class KuzzleEventEmitter extends EventEmitter {
321
347
  *
322
348
  * @warning Critical section of code
323
349
  */
324
- async function pipeCallback (error, ...updated) {
350
+ async function pipeCallback(error, ...updated) {
325
351
  /* eslint-disable no-invalid-this */
326
352
  if (error) {
327
353
  this.promback.reject(error);
@@ -331,7 +357,7 @@ async function pipeCallback (error, ...updated) {
331
357
  const corePipes = this.instance.corePipes.get(this.targetEvent);
332
358
 
333
359
  if (corePipes) {
334
- await Bluebird.map(corePipes, fn => fn(...updated));
360
+ await Bluebird.map(corePipes, (fn) => fn(...updated));
335
361
  }
336
362
 
337
363
  for (let i = 0; i < this.events.length; i++) {
@@ -354,9 +380,9 @@ async function pipeCallback (error, ...updated) {
354
380
  * @param {String} event
355
381
  * @returns {Array<String>} wildcard events
356
382
  */
357
- const getWildcardEvents = memoize(event => {
383
+ const getWildcardEvents = memoize((event) => {
358
384
  const events = [event];
359
- const delimIndex = event.lastIndexOf(':');
385
+ const delimIndex = event.lastIndexOf(":");
360
386
 
361
387
  if (delimIndex === -1) {
362
388
  return events;
@@ -365,7 +391,7 @@ const getWildcardEvents = memoize(event => {
365
391
  const scope = event.slice(0, delimIndex);
366
392
  const name = event.slice(delimIndex + 1);
367
393
 
368
- ['before', 'after'].forEach(prefix => {
394
+ ["before", "after"].forEach((prefix) => {
369
395
  if (name.startsWith(prefix)) {
370
396
  events.push(`${scope}:${prefix}*`);
371
397
  }
@@ -19,15 +19,15 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const assert = require('assert');
25
- const Denque = require('denque');
24
+ const assert = require("assert");
25
+ const Denque = require("denque");
26
26
 
27
- const { KuzzleError } = require('../../kerror/errors');
28
- const waterfall = require('./waterfall');
27
+ const { KuzzleError } = require("../../kerror/errors");
28
+ const waterfall = require("./waterfall");
29
29
 
30
- const kerror = require('../../kerror').wrap('plugin', 'runtime');
30
+ const kerror = require("../../kerror").wrap("plugin", "runtime");
31
31
 
32
32
  /**
33
33
  * We declare the callback used by waterfall one time instead
@@ -37,22 +37,22 @@ const kerror = require('../../kerror').wrap('plugin', 'runtime');
37
37
  * { instance: (pipeRunner instance), callback: (callback after pipes execution) }
38
38
  */
39
39
  /* eslint-disable no-invalid-this */
40
- function waterfallCallback (error, result) {
40
+ function waterfallCallback(error, ...result) {
41
41
  this.instance.running--;
42
42
 
43
- if (! this.instance.buffer.isEmpty()) {
43
+ if (!this.instance.buffer.isEmpty()) {
44
44
  setImmediate(this.instance._boundRunNext);
45
45
  }
46
46
 
47
47
  if (error) {
48
- const cbError = error instanceof KuzzleError
49
- ? error
50
- : kerror.getFrom(error, 'unexpected_error', error.message);
48
+ const cbError =
49
+ error instanceof KuzzleError
50
+ ? error
51
+ : kerror.getFrom(error, "unexpected_error", error.message);
51
52
 
52
53
  this.callback.call(this.callbackContext, cbError);
53
- }
54
- else {
55
- this.callback.call(this.callbackContext, null, result);
54
+ } else {
55
+ this.callback.call(this.callbackContext, null, ...result);
56
56
  }
57
57
  }
58
58
  /* eslint-enable no-invalid-this */
@@ -62,7 +62,7 @@ function waterfallCallback (error, result) {
62
62
  * @class PipeChain
63
63
  */
64
64
  class PipeChain {
65
- constructor (chain, args, callback, callbackContext) {
65
+ constructor(chain, args, callback, callbackContext) {
66
66
  this.chain = chain;
67
67
  this.args = args;
68
68
  this.callback = callback;
@@ -80,13 +80,15 @@ class PipeChain {
80
80
  * @param {Number} bufferSize - max number of delayed pipe chains
81
81
  */
82
82
  class PipeRunner {
83
- constructor (concurrent, bufferSize) {
83
+ constructor(concurrent, bufferSize) {
84
84
  assert(
85
- typeof concurrent === 'number' && concurrent > 0,
86
- 'Cannot instantiate pipes executor: invalid maxConcurrentPipes parameter value');
85
+ typeof concurrent === "number" && concurrent > 0,
86
+ "Cannot instantiate pipes executor: invalid maxConcurrentPipes parameter value"
87
+ );
87
88
  assert(
88
- typeof bufferSize === 'number' && bufferSize > 0,
89
- 'Cannot instantiate pipes executor: invalid pipesBufferSize parameter value');
89
+ typeof bufferSize === "number" && bufferSize > 0,
90
+ "Cannot instantiate pipes executor: invalid pipesBufferSize parameter value"
91
+ );
90
92
 
91
93
  this.maxConcurrent = concurrent;
92
94
  this.running = 0;
@@ -105,12 +107,11 @@ class PipeRunner {
105
107
  * @param {Function} callback - end-of-chain callback
106
108
  * @param {Object} callbackContext - functions/callback context
107
109
  */
108
- run (chain, args, callback, callbackContext) {
110
+ run(chain, args, callback, callbackContext) {
109
111
  if (this.running >= this.maxConcurrent) {
110
112
  if (this.buffer.length >= this.maxBufferSize) {
111
- callback.call(callbackContext, kerror.get('too_many_pipes'));
112
- }
113
- else {
113
+ callback.call(callbackContext, kerror.get("too_many_pipes"));
114
+ } else {
114
115
  this.buffer.push(new PipeChain(chain, args, callback, callbackContext));
115
116
  }
116
117
 
@@ -129,7 +130,7 @@ class PipeRunner {
129
130
  waterfall(chain, args, waterfallCallback, waterfallCallbackCtx);
130
131
  }
131
132
 
132
- _runNext () {
133
+ _runNext() {
133
134
  if (this.buffer.isEmpty() || this.running >= this.maxConcurrent) {
134
135
  return;
135
136
  }
@@ -19,7 +19,7 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  class WaterfallContext {
25
25
  /**
@@ -28,7 +28,7 @@ class WaterfallContext {
28
28
  * @param {Function} cb - end of waterfall callback
29
29
  * @param {Object} cbCtx - functions context
30
30
  */
31
- constructor (chain, args, cb, cbCtx) {
31
+ constructor(chain, args, cb, cbCtx) {
32
32
  this.chain = chain;
33
33
  this.cb = cb;
34
34
  this.cbCtx = cbCtx;
@@ -41,7 +41,7 @@ class WaterfallContext {
41
41
  this.args = args.length ? args : [null];
42
42
  }
43
43
 
44
- hasNext () {
44
+ hasNext() {
45
45
  return this.index < this.chain.length;
46
46
  }
47
47
 
@@ -49,52 +49,50 @@ class WaterfallContext {
49
49
  * Each function in the waterfall chain returns a result. This result should
50
50
  * always be the 1st payload argument (updated or left intact, it matters not)
51
51
  */
52
- set result (result) {
52
+ set result(result) {
53
53
  this.args[0] = result;
54
54
  }
55
55
 
56
- next (cb) {
56
+ next(cb) {
57
57
  this.index++;
58
58
  this.chain[this.index - 1](...this.args, cb);
59
59
  }
60
60
 
61
- reject (error) {
61
+ reject(error) {
62
62
  this.cb.call(this.cbCtx, error);
63
63
  }
64
64
 
65
65
  // Resolves with the updated payload
66
- resolve () {
66
+ resolve() {
67
67
  this.cb.call(this.cbCtx, null, ...this.args);
68
68
  }
69
69
  }
70
70
 
71
71
  /* eslint-disable no-invalid-this */
72
- function waterfallCB (err, res) {
72
+ function waterfallCB(err, res) {
73
73
  if (err) {
74
74
  this.reject(err);
75
- }
76
- else {
75
+ } else {
77
76
  this.result = res;
78
77
  waterfallNext(this);
79
78
  }
80
79
  }
81
80
  /* eslint-enable no-invalid-this */
82
81
 
83
- function waterfallNext (ctx) {
84
- if (! ctx.hasNext()) {
82
+ function waterfallNext(ctx) {
83
+ if (!ctx.hasNext()) {
85
84
  ctx.resolve();
86
85
  return;
87
86
  }
88
87
 
89
88
  try {
90
89
  ctx.next(waterfallCB.bind(ctx));
91
- }
92
- catch (error) {
90
+ } catch (error) {
93
91
  ctx.reject(error);
94
92
  }
95
93
  }
96
94
 
97
- function waterfall (chain, args, cb, context) {
95
+ function waterfall(chain, args, cb, context) {
98
96
  const ctx = new WaterfallContext(chain, args, cb, context);
99
97
 
100
98
  waterfallNext(ctx);
@@ -19,6 +19,6 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- module.exports = require('./kuzzle');
24
+ module.exports = require("./kuzzle");