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,26 +19,26 @@
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 kerror = require('../../kerror');
27
- const { get } = require('../../util/safeObject');
26
+ const kerror = require("../../kerror");
27
+ const { get } = require("../../util/safeObject");
28
28
 
29
- const assertionError = kerror.wrap('api', 'assert');
29
+ const assertionError = kerror.wrap("api", "assert");
30
30
 
31
31
  // Base class for all controllers
32
32
  class BaseController {
33
- constructor () {
33
+ constructor() {
34
34
  this.__actions = new Set();
35
35
  }
36
36
 
37
- get _actions () {
37
+ get _actions() {
38
38
  return this.__actions;
39
39
  }
40
40
 
41
- _addAction (name, fn) {
41
+ _addAction(name, fn) {
42
42
  this.__actions.add(name);
43
43
  this[name] = fn;
44
44
  }
@@ -51,13 +51,13 @@ class BaseController {
51
51
  * @param {string} name
52
52
  * @returns {boolean}
53
53
  */
54
- _isAction (name) {
54
+ _isAction(name) {
55
55
  return this.__actions.has(name);
56
56
  }
57
57
  }
58
58
 
59
59
  class NativeController extends BaseController {
60
- constructor (actions = []) {
60
+ constructor(actions = []) {
61
61
  super();
62
62
 
63
63
  this.ask = global.kuzzle.ask.bind(global.kuzzle);
@@ -72,38 +72,37 @@ class NativeController extends BaseController {
72
72
  *
73
73
  * @returns {Promise}
74
74
  */
75
- init () {
75
+ init() {
76
76
  return Bluebird.resolve();
77
77
  }
78
78
 
79
- async translateKoncorde (koncordeFilters) {
79
+ async translateKoncorde(koncordeFilters) {
80
80
  if (Object.keys(koncordeFilters).length === 0) {
81
81
  return {};
82
82
  }
83
83
 
84
- if (typeof koncordeFilters !== 'object') {
85
- throw assertionError.get('invalid_type', 'body.query', 'object');
84
+ if (typeof koncordeFilters !== "object") {
85
+ throw assertionError.get("invalid_type", "body.query", "object");
86
86
  }
87
87
 
88
88
  try {
89
89
  global.kuzzle.koncorde.validate(koncordeFilters);
90
- }
91
- catch (error) {
92
- throw assertionError.getFrom(error, 'koncorde_dsl_error', error.message);
90
+ } catch (error) {
91
+ throw assertionError.getFrom(error, "koncorde_dsl_error", error.message);
93
92
  }
94
93
 
95
94
  try {
96
- return await this.ask('core:storage:public:translate', koncordeFilters);
97
- }
98
- catch (error) {
99
- if (! error.keyword) {
95
+ return await this.ask("core:storage:public:translate", koncordeFilters);
96
+ } catch (error) {
97
+ if (!error.keyword) {
100
98
  throw error;
101
99
  }
102
100
 
103
101
  throw assertionError.get(
104
- 'koncorde_restricted_keyword',
102
+ "koncorde_restricted_keyword",
105
103
  error.keyword.type,
106
- error.keyword.name);
104
+ error.keyword.name
105
+ );
107
106
  }
108
107
  }
109
108
 
@@ -113,11 +112,11 @@ class NativeController extends BaseController {
113
112
  * @param {Request} request
114
113
  * @param {...any} paths
115
114
  */
116
- assertBodyHasNotAttributes (request, ...paths) {
115
+ assertBodyHasNotAttributes(request, ...paths) {
117
116
  if (request.input.body !== null) {
118
117
  for (const path of paths) {
119
118
  if (get(request.input.body, path)) {
120
- throw assertionError.get('forbidden_argument', `body.${path}`);
119
+ throw assertionError.get("forbidden_argument", `body.${path}`);
121
120
  }
122
121
  }
123
122
  }
@@ -129,9 +128,9 @@ class NativeController extends BaseController {
129
128
  * @todo move this method in some kind of "Security" class
130
129
  * @param {String} strategy
131
130
  */
132
- assertIsStrategyRegistered (strategy) {
133
- if (! global.kuzzle.pluginsManager.listStrategies().includes(strategy)) {
134
- throw kerror.get('security', 'credentials', 'unknown_strategy', strategy);
131
+ assertIsStrategyRegistered(strategy) {
132
+ if (!global.kuzzle.pluginsManager.listStrategies().includes(strategy)) {
133
+ throw kerror.get("security", "credentials", "unknown_strategy", strategy);
135
134
  }
136
135
  }
137
136
 
@@ -140,36 +139,63 @@ class NativeController extends BaseController {
140
139
  * - missing properties
141
140
  * - invalid types
142
141
  * - unauthorized values
143
- *
142
+ *
144
143
  * @param {Array<{index:string, collections?: string[]}>} targets Array of targets
145
144
  * @param {*} options
146
145
  */
147
- assertTargetsAreValid (targets, { allowEmptyCollections } = {}) {
146
+ assertTargetsAreValid(targets, { allowEmptyCollections } = {}) {
148
147
  for (let i = 0; i < targets.length; i++) {
149
148
  const target = targets[i];
150
149
 
151
- if (! target.index) {
152
- throw kerror.get('api', 'assert', 'missing_argument', `targets[${i}].index`);
150
+ if (!target.index) {
151
+ throw kerror.get(
152
+ "api",
153
+ "assert",
154
+ "missing_argument",
155
+ `targets[${i}].index`
156
+ );
153
157
  }
154
158
  if (this._hasMultiTargets(target.index)) {
155
- throw kerror.get('services', 'storage', 'invalid_target_format', `targets[${i}].index`, target.index);
159
+ throw kerror.get(
160
+ "services",
161
+ "storage",
162
+ "invalid_target_format",
163
+ `targets[${i}].index`,
164
+ target.index
165
+ );
156
166
  }
157
167
 
158
- if (! allowEmptyCollections && ! target.collections) {
159
- throw kerror.get('api', 'assert', 'missing_argument', `targets[${i}].collections`);
168
+ if (!allowEmptyCollections && !target.collections) {
169
+ throw kerror.get(
170
+ "api",
171
+ "assert",
172
+ "missing_argument",
173
+ `targets[${i}].collections`
174
+ );
160
175
  }
161
176
 
162
- if (target.collections && ! Array.isArray(target.collections)) {
163
- throw kerror.get('api', 'assert', 'invalid_type', `targets[${i}].collections`, 'array');
177
+ if (target.collections && !Array.isArray(target.collections)) {
178
+ throw kerror.get(
179
+ "api",
180
+ "assert",
181
+ "invalid_type",
182
+ `targets[${i}].collections`,
183
+ "array"
184
+ );
164
185
  }
165
186
 
166
- if (! allowEmptyCollections && target.collections.length === 0) {
167
- throw kerror.get('api', 'assert', 'empty_argument', `targets[${i}].collections`);
187
+ if (!allowEmptyCollections && target.collections.length === 0) {
188
+ throw kerror.get(
189
+ "api",
190
+ "assert",
191
+ "empty_argument",
192
+ `targets[${i}].collections`
193
+ );
168
194
  }
169
195
 
170
- if (allowEmptyCollections
171
- && (! target.collections
172
- || target.collections.length === 0)
196
+ if (
197
+ allowEmptyCollections &&
198
+ (!target.collections || target.collections.length === 0)
173
199
  ) {
174
200
  continue;
175
201
  }
@@ -177,19 +203,31 @@ class NativeController extends BaseController {
177
203
  for (let j = 0; j < target.collections.length; j++) {
178
204
  const collection = target.collections[j];
179
205
 
180
- if (typeof collection !== 'string') {
181
- throw kerror.get('api', 'assert', 'invalid_type', `targets[${i}].collections[${j}]`, 'string');
206
+ if (typeof collection !== "string") {
207
+ throw kerror.get(
208
+ "api",
209
+ "assert",
210
+ "invalid_type",
211
+ `targets[${i}].collections[${j}]`,
212
+ "string"
213
+ );
182
214
  }
183
215
 
184
216
  if (this._hasMultiTargets(collection)) {
185
- throw kerror.get('services', 'storage', 'invalid_target_format', `targets[${i}].collections[${j}]`, collection);
217
+ throw kerror.get(
218
+ "services",
219
+ "storage",
220
+ "invalid_target_format",
221
+ `targets[${i}].collections[${j}]`,
222
+ collection
223
+ );
186
224
  }
187
225
  }
188
226
  }
189
227
  }
190
228
 
191
- _hasMultiTargets (str) {
192
- return [',', '*', '+'].some(chr => str.includes(chr)) || str === '_all';
229
+ _hasMultiTargets(str) {
230
+ return [",", "*", "+"].some((chr) => str.includes(chr)) || str === "_all";
193
231
  }
194
232
 
195
233
  /**
@@ -198,11 +236,11 @@ class NativeController extends BaseController {
198
236
  * @param {Number} asked
199
237
  * @throws
200
238
  */
201
- assertNotExceedMaxFetch (asked) {
239
+ assertNotExceedMaxFetch(asked) {
202
240
  const limit = global.kuzzle.config.limits.documentsFetchCount;
203
241
 
204
242
  if (asked > limit) {
205
- throw kerror.get('services', 'storage', 'get_limit_exceeded');
243
+ throw kerror.get("services", "storage", "get_limit_exceeded");
206
244
  }
207
245
  }
208
246
 
@@ -212,11 +250,11 @@ class NativeController extends BaseController {
212
250
  * @param {Number} asked
213
251
  * @throws
214
252
  */
215
- assertNotExceedMaxWrite (asked) {
253
+ assertNotExceedMaxWrite(asked) {
216
254
  const limit = global.kuzzle.config.limits.documentsWriteCount;
217
255
 
218
256
  if (asked > limit) {
219
- throw kerror.get('services', 'storage', 'write_limit_exceeded');
257
+ throw kerror.get("services", "storage", "write_limit_exceeded");
220
258
  }
221
259
  }
222
260
  }
@@ -19,24 +19,18 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const { NativeController } = require('./baseController');
25
- const actionEnum = require('../../core/realtime/actionEnum');
26
- const kerror = require('../../kerror');
24
+ const { NativeController } = require("./baseController");
25
+ const actionEnum = require("../../core/realtime/actionEnum");
26
+ const kerror = require("../../kerror");
27
27
 
28
28
  /**
29
29
  * @class BulkController
30
30
  */
31
31
  class BulkController extends NativeController {
32
- constructor () {
33
- super([
34
- 'import',
35
- 'write',
36
- 'mWrite',
37
- 'deleteByQuery',
38
- 'updateByQuery',
39
- ]);
32
+ constructor() {
33
+ super(["import", "write", "mWrite", "deleteByQuery", "updateByQuery"]);
40
34
  }
41
35
 
42
36
  /**
@@ -45,109 +39,126 @@ class BulkController extends NativeController {
45
39
  * @param {Request} request
46
40
  * @returns {Promise}
47
41
  */
48
- async import (request) {
42
+ async import(request) {
49
43
  const userId = request.getKuid();
50
44
  const { index, collection } = request.getIndexAndCollection();
51
- const strict = request.getBoolean('strict');
45
+ const strict = request.getBoolean("strict");
52
46
  const refresh = request.getRefresh();
53
- const bulkData = request.getBodyArray('bulkData');
47
+ const bulkData = request.getBodyArray("bulkData");
54
48
  const options = {
55
49
  refresh,
56
- userId
50
+ userId,
57
51
  };
58
52
 
59
53
  const { items, errors } = await this.ask(
60
- 'core:storage:public:document:bulk',
54
+ "core:storage:public:document:bulk",
61
55
  index,
62
56
  collection,
63
57
  bulkData,
64
- options);
58
+ options
59
+ );
65
60
 
66
61
  if (strict && errors.length) {
67
- throw kerror.get('api', 'process', 'incomplete_multiple_request', 'import', errors);
62
+ throw kerror.get(
63
+ "api",
64
+ "process",
65
+ "incomplete_multiple_request",
66
+ "import",
67
+ errors
68
+ );
68
69
  }
69
70
 
70
71
  // @todo next major release: if (successes.length === 0) then throw (no matter strict value)
71
72
 
72
73
  return {
73
74
  errors,
74
- successes: items
75
+ successes: items,
75
76
  };
76
77
  }
77
78
 
78
79
  /**
79
80
  * Write a document without adding metadata or performing data validation.
80
81
  */
81
- async write (request) {
82
+ async write(request) {
82
83
  const { index, collection } = request.getIndexAndCollection();
83
- const id = request.getId({ ifMissing: 'ignore' });
84
+ const id = request.getId({ ifMissing: "ignore" });
84
85
  const content = request.getBody();
85
86
  const refresh = request.getRefresh();
86
- const notify = request.getBoolean('notify');
87
+ const notify = request.getBoolean("notify");
87
88
 
88
89
  const result = await this.ask(
89
- 'core:storage:public:document:createOrReplace',
90
+ "core:storage:public:document:createOrReplace",
90
91
  index,
91
92
  collection,
92
93
  id,
93
94
  content,
94
- { injectKuzzleMeta: false, refresh });
95
+ { injectKuzzleMeta: false, refresh }
96
+ );
95
97
 
96
98
  if (notify) {
97
99
  await this.ask(
98
- 'core:realtime:document:notify',
100
+ "core:realtime:document:notify",
99
101
  request,
100
102
  actionEnum.WRITE,
101
- result);
103
+ result
104
+ );
102
105
  }
103
106
 
104
107
  return {
105
108
  _id: result._id,
106
109
  _source: result._source,
107
- _version: result._version
110
+ _version: result._version,
108
111
  };
109
112
  }
110
113
 
111
114
  /**
112
115
  * Write several documents without adding metadata or performing data validation.
113
116
  */
114
- async mWrite (request) {
117
+ async mWrite(request) {
115
118
  const { index, collection } = request.getIndexAndCollection();
116
- const documents = request.getBodyArray('documents');
117
- const strict = request.getBoolean('strict');
119
+ const documents = request.getBodyArray("documents");
120
+ const strict = request.getBoolean("strict");
118
121
  const refresh = request.getRefresh();
119
- const notify = request.getBoolean('notify');
122
+ const notify = request.getBoolean("notify");
120
123
 
121
124
  const { items, errors } = await this.ask(
122
- 'core:storage:public:document:mCreateOrReplace',
125
+ "core:storage:public:document:mCreateOrReplace",
123
126
  index,
124
127
  collection,
125
128
  documents,
126
- { injectKuzzleMeta: false, limits: false, refresh });
129
+ { injectKuzzleMeta: false, limits: false, refresh }
130
+ );
127
131
 
128
132
  if (strict && errors.length) {
129
- throw kerror.get('api', 'process', 'incomplete_multiple_request', 'write', errors);
133
+ throw kerror.get(
134
+ "api",
135
+ "process",
136
+ "incomplete_multiple_request",
137
+ "write",
138
+ errors
139
+ );
130
140
  }
131
141
 
132
142
  // @todo next major release: if (successes.length === 0) then throw (no matter strict value)
133
143
 
134
144
  if (notify) {
135
145
  await global.kuzzle.ask(
136
- 'core:realtime:document:mNotify',
146
+ "core:realtime:document:mNotify",
137
147
  request,
138
148
  actionEnum.WRITE,
139
- items);
149
+ items
150
+ );
140
151
  }
141
152
 
142
- const successes = items.map(item => ({
153
+ const successes = items.map((item) => ({
143
154
  _id: item._id,
144
155
  _source: item._source,
145
- _version: item._version
156
+ _version: item._version,
146
157
  }));
147
158
 
148
159
  return {
149
160
  errors,
150
- successes
161
+ successes,
151
162
  };
152
163
  }
153
164
 
@@ -157,17 +168,18 @@ class BulkController extends NativeController {
157
168
  * - fetching deleted documents
158
169
  * - triggering realtime notifications
159
170
  */
160
- async deleteByQuery (request) {
171
+ async deleteByQuery(request) {
161
172
  const { index, collection } = request.getIndexAndCollection();
162
- const query = request.getBodyObject('query');
173
+ const query = request.getBodyObject("query");
163
174
  const refresh = request.getRefresh();
164
175
 
165
176
  const { deleted } = await this.ask(
166
- 'core:storage:public:document:deleteByQuery',
177
+ "core:storage:public:document:deleteByQuery",
167
178
  index,
168
179
  collection,
169
180
  query,
170
- { fetch: false, refresh, size: -1 });
181
+ { fetch: false, refresh, size: -1 }
182
+ );
171
183
 
172
184
  return { deleted };
173
185
  }
@@ -178,19 +190,20 @@ class BulkController extends NativeController {
178
190
  * - Injecting Kuzzle metadata
179
191
  * - Triggering realtime notifications
180
192
  */
181
- async updateByQuery (request) {
193
+ async updateByQuery(request) {
182
194
  const { index, collection } = request.getIndexAndCollection();
183
- const query = request.getBodyObject('query');
184
- const changes = request.getBodyObject('changes');
195
+ const query = request.getBodyObject("query");
196
+ const changes = request.getBodyObject("changes");
185
197
  const refresh = request.getRefresh();
186
198
 
187
199
  return this.ask(
188
- 'core:storage:public:bulk:updateByQuery',
200
+ "core:storage:public:bulk:updateByQuery",
189
201
  index,
190
202
  collection,
191
203
  query,
192
204
  changes,
193
- { refresh });
205
+ { refresh }
206
+ );
194
207
  }
195
208
  }
196
209
 
@@ -19,19 +19,17 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const { NativeController } = require('./baseController');
24
+ const { NativeController } = require("./baseController");
25
25
 
26
26
  class ClusterController extends NativeController {
27
- constructor () {
28
- super([
29
- 'status',
30
- ]);
27
+ constructor() {
28
+ super(["status"]);
31
29
  }
32
30
 
33
- async status () {
34
- return global.kuzzle.ask('cluster:status:get');
31
+ async status() {
32
+ return global.kuzzle.ask("cluster:status:get");
35
33
  }
36
34
  }
37
35