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,29 +19,28 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const assert = require('assert');
24
+ const assert = require("assert");
25
25
 
26
- const rc = require('rc');
27
- const defaultConfig = require('./default.config');
28
- const packageJson = require('../../package.json');
29
- const kerror = require('../kerror').wrap('core', 'configuration');
30
- const { isPlainObject } = require('../util/safeObject');
31
- const bytes = require('../util/bytes');
26
+ const rc = require("rc");
27
+ const defaultConfig = require("./default.config");
28
+ const packageJson = require("../../package.json");
29
+ const kerror = require("../kerror").wrap("core", "configuration");
30
+ const { isPlainObject } = require("../util/safeObject");
31
+ const bytes = require("../util/bytes");
32
32
 
33
33
  /**
34
34
  * Loads, interprets and checks configuration files
35
35
  * @returns {object}
36
36
  */
37
- function loadConfig () {
37
+ function loadConfig() {
38
38
  let config;
39
39
 
40
40
  try {
41
- config = rc('kuzzle', defaultConfig.default);
42
- }
43
- catch (e) {
44
- throw kerror.get('cannot_parse', e.message);
41
+ config = rc("kuzzle", defaultConfig.default);
42
+ } catch (e) {
43
+ throw kerror.get("cannot_parse", e.message);
45
44
  }
46
45
 
47
46
  config = unstringify(config);
@@ -53,8 +52,8 @@ function loadConfig () {
53
52
 
54
53
  config.internal = {
55
54
  hash: {
56
- seed: Buffer.from('^m&mOISKBvb1xpl1mRsrylaQXpjb&IJX')
57
- }
55
+ seed: Buffer.from("^m&mOISKBvb1xpl1mRsrylaQXpjb&IJX"),
56
+ },
58
57
  };
59
58
 
60
59
  preprocessHttpOptions(config);
@@ -78,33 +77,34 @@ function loadConfig () {
78
77
  * @param {object} cfg - configuration loaded using RC
79
78
  * @returns {object} correctly typed configuration
80
79
  */
81
- function unstringify (cfg) {
80
+ function unstringify(cfg) {
82
81
  Object.keys(cfg)
83
- .filter(k => ! /version$/i.test(k) && (typeof cfg[k] === 'string' || cfg[k] instanceof Object))
84
- .forEach(k => {
85
- if (typeof cfg[k] === 'string') {
86
- if (cfg[k] === 'true') {
82
+ .filter(
83
+ (k) =>
84
+ !/version$/i.test(k) &&
85
+ (typeof cfg[k] === "string" || cfg[k] instanceof Object)
86
+ )
87
+ .forEach((k) => {
88
+ if (typeof cfg[k] === "string") {
89
+ if (cfg[k] === "true") {
87
90
  cfg[k] = true;
88
- }
89
- else if (cfg[k] === 'false') {
91
+ } else if (cfg[k] === "false") {
90
92
  cfg[k] = false;
91
- }
92
- else if (cfg[k].startsWith('*json:')) {
93
+ } else if (cfg[k].startsWith("*json:")) {
93
94
  try {
94
- cfg[k] = JSON.parse(cfg[k].replace(/^\*json:/, ''));
95
- }
96
- catch (e) {
97
- throw kerror.get('cannot_parse', `the key "${k}" does not contain a valid stringified JSON (${cfg[k]})`);
95
+ cfg[k] = JSON.parse(cfg[k].replace(/^\*json:/, ""));
96
+ } catch (e) {
97
+ throw kerror.get(
98
+ "cannot_parse",
99
+ `the key "${k}" does not contain a valid stringified JSON (${cfg[k]})`
100
+ );
98
101
  }
99
- }
100
- else if (/^(-|\+)?([0-9]+)$/.test(cfg[k])) {
102
+ } else if (/^(-|\+)?([0-9]+)$/.test(cfg[k])) {
101
103
  cfg[k] = Number.parseInt(cfg[k]);
102
- }
103
- else if (/^(-|\+)?([0-9]+(\.[0-9]+)?)$/.test(cfg[k])) {
104
+ } else if (/^(-|\+)?([0-9]+(\.[0-9]+)?)$/.test(cfg[k])) {
104
105
  cfg[k] = parseFloat(cfg[k]);
105
106
  }
106
- }
107
- else {
107
+ } else {
108
108
  cfg[k] = unstringify(cfg[k]);
109
109
  }
110
110
  });
@@ -119,139 +119,202 @@ function unstringify (cfg) {
119
119
  *
120
120
  * @param {object} cfg
121
121
  */
122
- function checkLimitsConfig (cfg) {
122
+ function checkLimitsConfig(cfg) {
123
123
  const limits = [
124
- 'concurrentRequests',
125
- 'documentsFetchCount',
126
- 'documentsWriteCount',
127
- 'loginsPerSecond',
128
- 'requestsBufferSize',
129
- 'requestsBufferWarningThreshold',
130
- 'subscriptionConditionsCount',
131
- 'subscriptionMinterms',
132
- 'subscriptionRooms',
133
- 'subscriptionDocumentTTL'
124
+ "concurrentRequests",
125
+ "documentsFetchCount",
126
+ "documentsWriteCount",
127
+ "loginsPerSecond",
128
+ "requestsBufferSize",
129
+ "requestsBufferWarningThreshold",
130
+ "subscriptionConditionsCount",
131
+ "subscriptionMinterms",
132
+ "subscriptionRooms",
133
+ "subscriptionDocumentTTL",
134
134
  ];
135
135
  const canBeZero = [
136
- 'subscriptionMinterms',
137
- 'subscriptionRooms',
138
- 'subscriptionDocumentTTL'
136
+ "subscriptionMinterms",
137
+ "subscriptionRooms",
138
+ "subscriptionDocumentTTL",
139
139
  ];
140
140
 
141
- if (! isPlainObject(cfg.limits)) {
142
- throw kerror.get('invalid_type', 'limits', 'object');
141
+ if (!isPlainObject(cfg.limits)) {
142
+ throw kerror.get("invalid_type", "limits", "object");
143
143
  }
144
144
 
145
145
  for (const opt of limits) {
146
- if (typeof cfg.limits[opt] !== 'number') {
147
- throw kerror.get('invalid_type', `limits.${opt}`, 'number');
146
+ if (typeof cfg.limits[opt] !== "number") {
147
+ throw kerror.get("invalid_type", `limits.${opt}`, "number");
148
148
  }
149
149
 
150
- if ( cfg.limits[opt] < 0
151
- || cfg.limits[opt] === 0 && ! canBeZero.includes(opt)
150
+ if (
151
+ cfg.limits[opt] < 0 ||
152
+ (cfg.limits[opt] === 0 && !canBeZero.includes(opt))
152
153
  ) {
153
- const allowed = `>= ${canBeZero.includes(opt) ? '0' : '1'}`;
154
- throw kerror.get('out_of_range', `limits.${opt}`, allowed);
154
+ const allowed = `>= ${canBeZero.includes(opt) ? "0" : "1"}`;
155
+ throw kerror.get("out_of_range", `limits.${opt}`, allowed);
155
156
  }
156
157
  }
157
158
 
158
159
  if (cfg.limits.concurrentRequests >= cfg.limits.requestsBufferSize) {
159
- throw kerror.get('out_of_range', 'limits.concurrentRequests', 'lower than "limits.requestsBufferSize"');
160
+ throw kerror.get(
161
+ "out_of_range",
162
+ "limits.concurrentRequests",
163
+ 'lower than "limits.requestsBufferSize"'
164
+ );
160
165
  }
161
166
 
162
- if ( cfg.limits.requestsBufferWarningThreshold < cfg.limits.concurrentRequests
163
- || cfg.limits.requestsBufferWarningThreshold > cfg.limits.requestsBufferSize
167
+ if (
168
+ cfg.limits.requestsBufferWarningThreshold < cfg.limits.concurrentRequests ||
169
+ cfg.limits.requestsBufferWarningThreshold > cfg.limits.requestsBufferSize
164
170
  ) {
165
171
  throw kerror.get(
166
- 'out_of_range',
167
- 'limits.requestsBufferWarningThreshold',
168
- '[limits.concurrentRequests, limits.requestsBufferSize]');
172
+ "out_of_range",
173
+ "limits.requestsBufferWarningThreshold",
174
+ "[limits.concurrentRequests, limits.requestsBufferSize]"
175
+ );
169
176
  }
170
177
  }
171
178
 
172
- function checkWebSocketOptions (config) {
179
+ function checkWebSocketOptions(config) {
173
180
  const cfg = config.server.protocols.websocket;
174
181
 
175
182
  if (cfg === undefined) {
176
183
  return;
177
184
  }
178
185
 
179
- assert(typeof cfg.enabled === 'boolean', `[websocket] "enabled" parameter: invalid value "${cfg.enabled}" (boolean expected)`);
180
- assert(Number.isInteger(cfg.idleTimeout) && cfg.idleTimeout >= 0, `[websocket] "idleTimeout" parameter: invalid value "${cfg.idleTimeout}" (integer >= 1000 expected)`);
181
- assert(Number.isInteger(cfg.rateLimit) && cfg.rateLimit >= 0, `[websocket] "rateLimit" parameter: invalid value "${cfg.rateLimit}" (integer >= 0 expected)`);
182
- assert(typeof cfg.compression === 'boolean', `[websocket] "compression" parameter: invalid value "${cfg.compression}" (boolean value expected)`);
186
+ assert(
187
+ typeof cfg.enabled === "boolean",
188
+ `[websocket] "enabled" parameter: invalid value "${cfg.enabled}" (boolean expected)`
189
+ );
190
+ assert(
191
+ Number.isInteger(cfg.idleTimeout) && cfg.idleTimeout >= 0,
192
+ `[websocket] "idleTimeout" parameter: invalid value "${cfg.idleTimeout}" (integer >= 1000 expected)`
193
+ );
194
+ assert(
195
+ Number.isInteger(cfg.rateLimit) && cfg.rateLimit >= 0,
196
+ `[websocket] "rateLimit" parameter: invalid value "${cfg.rateLimit}" (integer >= 0 expected)`
197
+ );
198
+ assert(
199
+ typeof cfg.compression === "boolean",
200
+ `[websocket] "compression" parameter: invalid value "${cfg.compression}" (boolean value expected)`
201
+ );
183
202
  }
184
203
 
185
- function checkHttpOptions (config) {
204
+ function checkHttpOptions(config) {
186
205
  const cfg = config.server.protocols.http;
187
206
 
188
207
  if (cfg === undefined) {
189
208
  return;
190
209
  }
191
210
 
192
- assert(typeof config.http.accessControlAllowOrigin === 'string' || Array.isArray(config.http.accessControlAllowOrigin), `[http] "accessControlAllowOrigin" parameter: invalid value "${config.http.accessControlAllowOrigin}" (array or string expected)`);
193
- assert(typeof config.http.accessControlAllowOriginUseRegExp === 'boolean', `[http] "accessControlAllowOriginUseRegExp" parameter: invalid value "${cfg.accessControlAllowOriginUseRegExp}" (boolean expected)`);
194
- assert(typeof cfg.enabled === 'boolean', `[http] "enabled" parameter: invalid value "${cfg.enabled}" (boolean expected)`);
195
- assert(typeof cfg.allowCompression === 'boolean', `[http] "allowCompression" parameter: invalid value "${cfg.allowCompression}" (boolean expected)`);
196
- assert(Number.isInteger(cfg.maxEncodingLayers) && cfg.maxEncodingLayers >= 1, `[http] "maxEncodingLayers" parameter: invalid value "${cfg.maxEncodingLayers}" (integer >= 1 expected)`);
211
+ assert(
212
+ typeof config.http.accessControlAllowOrigin === "string" ||
213
+ Array.isArray(config.http.accessControlAllowOrigin),
214
+ `[http] "accessControlAllowOrigin" parameter: invalid value "${config.http.accessControlAllowOrigin}" (array or string expected)`
215
+ );
216
+ assert(
217
+ typeof config.http.accessControlAllowOriginUseRegExp === "boolean",
218
+ `[http] "accessControlAllowOriginUseRegExp" parameter: invalid value "${cfg.accessControlAllowOriginUseRegExp}" (boolean expected)`
219
+ );
220
+ assert(
221
+ typeof cfg.enabled === "boolean",
222
+ `[http] "enabled" parameter: invalid value "${cfg.enabled}" (boolean expected)`
223
+ );
224
+ assert(
225
+ typeof cfg.allowCompression === "boolean",
226
+ `[http] "allowCompression" parameter: invalid value "${cfg.allowCompression}" (boolean expected)`
227
+ );
228
+ assert(
229
+ Number.isInteger(cfg.maxEncodingLayers) && cfg.maxEncodingLayers >= 1,
230
+ `[http] "maxEncodingLayers" parameter: invalid value "${cfg.maxEncodingLayers}" (integer >= 1 expected)`
231
+ );
197
232
 
198
233
  const maxFormFileSize = bytes(cfg.maxFormFileSize);
199
- assert(Number.isInteger(maxFormFileSize) && maxFormFileSize >= 0, `[http] "maxFormFileSize" parameter: cannot parse "${cfg.maxFormFileSize}"`);
234
+ assert(
235
+ Number.isInteger(maxFormFileSize) && maxFormFileSize >= 0,
236
+ `[http] "maxFormFileSize" parameter: cannot parse "${cfg.maxFormFileSize}"`
237
+ );
200
238
  cfg.maxFormFileSize = maxFormFileSize;
201
- assert(typeof config.http.cookieAuthentication === 'boolean', `[http] "cookieAuthentication" parameter: invalid value "${config.http.cookieAuthentication }" (boolean expected)`);
239
+ assert(
240
+ typeof config.http.cookieAuthentication === "boolean",
241
+ `[http] "cookieAuthentication" parameter: invalid value "${config.http.cookieAuthentication}" (boolean expected)`
242
+ );
202
243
  }
203
244
 
204
-
205
- function checkClusterOptions (config) {
245
+ function checkClusterOptions(config) {
206
246
  const cfg = config.cluster;
207
247
 
208
- for (const prop of ['heartbeat', 'joinTimeout', 'minimumNodes', 'activityDepth', 'syncTimeout']) {
209
- assert(typeof cfg[prop] === 'number' && cfg[prop] > 0, `[CONFIG] kuzzlerc.cluster.${prop}: value must be a number greater than 0`);
248
+ for (const prop of [
249
+ "heartbeat",
250
+ "joinTimeout",
251
+ "minimumNodes",
252
+ "activityDepth",
253
+ "syncTimeout",
254
+ ]) {
255
+ assert(
256
+ typeof cfg[prop] === "number" && cfg[prop] > 0,
257
+ `[CONFIG] kuzzlerc.cluster.${prop}: value must be a number greater than 0`
258
+ );
210
259
  }
211
260
 
212
- assert(cfg.syncTimeout < cfg.joinTimeout, '[CONFIG] kuzzlerc.cluster.syncTimeout: value must be lower than kuzzlerc.cluster.joinTimeout');
261
+ assert(
262
+ cfg.syncTimeout < cfg.joinTimeout,
263
+ "[CONFIG] kuzzlerc.cluster.syncTimeout: value must be lower than kuzzlerc.cluster.joinTimeout"
264
+ );
213
265
 
214
- for (const prop of ['command', 'sync']) {
215
- assert(typeof cfg.ports[prop] === 'number' && cfg.ports[prop] > 0, `[CONFIG] kuzzlerc.cluster.ports.${prop}: value must be a number greater than 0`);
266
+ for (const prop of ["command", "sync"]) {
267
+ assert(
268
+ typeof cfg.ports[prop] === "number" && cfg.ports[prop] > 0,
269
+ `[CONFIG] kuzzlerc.cluster.ports.${prop}: value must be a number greater than 0`
270
+ );
216
271
  }
217
272
 
218
- assert(typeof cfg.ipv6 === 'boolean', '[CONFIG] kuzzlerc.cluster.ipv6: boolean expected');
273
+ assert(
274
+ typeof cfg.ipv6 === "boolean",
275
+ "[CONFIG] kuzzlerc.cluster.ipv6: boolean expected"
276
+ );
219
277
  // If config is passed with env variable, ip cannot be the value null
220
278
  // but only blank string or the string "null"
221
- if (`${cfg.ip}`.length === 0 || cfg.ip === 'null') {
279
+ if (`${cfg.ip}`.length === 0 || cfg.ip === "null") {
222
280
  cfg.ip = null;
223
281
  }
224
- assert(! cfg.ip || ['private', 'public'].includes(cfg.ip), '[CONFIG] kuzzlerc.cluster.ip: invalid value (accepted values: public, private)');
225
-
226
- assert(! cfg.interface || typeof cfg.interface === 'string', '[CONFIG] kuzzlerc.cluster.interface: value must be either null, or a string');
282
+ assert(
283
+ !cfg.ip || ["private", "public"].includes(cfg.ip),
284
+ "[CONFIG] kuzzlerc.cluster.ip: invalid value (accepted values: public, private)"
285
+ );
286
+
287
+ assert(
288
+ !cfg.interface || typeof cfg.interface === "string",
289
+ "[CONFIG] kuzzlerc.cluster.interface: value must be either null, or a string"
290
+ );
227
291
  }
228
292
 
229
- function preprocessHttpOptions (config) {
293
+ function preprocessHttpOptions(config) {
230
294
  const httpConfig = config.http;
231
295
 
232
296
  if (httpConfig === undefined) {
233
297
  return;
234
298
  }
235
299
 
236
- if (typeof httpConfig.accessControlAllowOrigin === 'string') {
237
- httpConfig.accessControlAllowOrigin =
238
- httpConfig.accessControlAllowOrigin
239
- .split(',')
240
- .map(value => value.trim());
300
+ if (typeof httpConfig.accessControlAllowOrigin === "string") {
301
+ httpConfig.accessControlAllowOrigin = httpConfig.accessControlAllowOrigin
302
+ .split(",")
303
+ .map((value) => value.trim());
241
304
  }
242
305
 
243
306
  // Stored to avoid doing includes multiple times later
244
- config.internal.allowAllOrigins = httpConfig.accessControlAllowOrigin.includes('*');
307
+ config.internal.allowAllOrigins =
308
+ httpConfig.accessControlAllowOrigin.includes("*");
245
309
 
246
310
  // If Regular Expression is enabled for accessControlAllowOrigin header we convert every string to a RegExp
247
311
  if (httpConfig.accessControlAllowOriginUseRegExp) {
248
312
  httpConfig.accessControlAllowOrigin =
249
- httpConfig.accessControlAllowOrigin
250
- .map(pattern => new RegExp(pattern));
313
+ httpConfig.accessControlAllowOrigin.map((pattern) => new RegExp(pattern));
251
314
  }
252
315
  }
253
316
 
254
- function preprocessProtocolsOptions (config) {
317
+ function preprocessProtocolsOptions(config) {
255
318
  const protocols = config.server.protocols;
256
319
 
257
320
  config.internal.notifiableProtocols = [];
@@ -263,7 +326,7 @@ function preprocessProtocolsOptions (config) {
263
326
  }
264
327
  }
265
328
 
266
- function preprocessRedisOptions (redisConfig) {
329
+ function preprocessRedisOptions(redisConfig) {
267
330
  // @deprecated Remove those lines for Kuzzle v3 then
268
331
  // remove also 'database' from .kuzzlerc.sample and default.config
269
332
  if (redisConfig.database) {
@@ -1,9 +1,9 @@
1
1
  {
2
- "js": { "min": 7 },
3
- "csharp": { "min": 2 },
4
- "cpp": { "min": 2 },
5
- "java": { "min": 3 },
6
- "android": { "min": 5 },
7
- "go": { "min": 3 },
8
- "php": { "min": 4 }
9
- }
2
+ "js": { "min": 7 },
3
+ "csharp": { "min": 2 },
4
+ "cpp": { "min": 2 },
5
+ "java": { "min": 3 },
6
+ "android": { "min": 5 },
7
+ "go": { "min": 3 },
8
+ "php": { "min": 4 }
9
+ }
@@ -19,7 +19,7 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  module.exports = {
25
25
  /**
@@ -28,7 +28,7 @@ module.exports = {
28
28
  * @param {Role} role
29
29
  * @returns {object}
30
30
  */
31
- serializeProfile: profile => {
31
+ serializeProfile: (profile) => {
32
32
  const { _id, ..._source } = profile;
33
33
 
34
34
  return { _id, _source };
@@ -40,11 +40,11 @@ module.exports = {
40
40
  * @param {Profile} profile
41
41
  * @returns {Object}
42
42
  */
43
- serializeRole: role => {
43
+ serializeRole: (role) => {
44
44
  const _source = {};
45
45
 
46
- Object.keys(role).forEach(key => {
47
- if (key !== '_id' && key !== 'restrictedTo') {
46
+ Object.keys(role).forEach((key) => {
47
+ if (key !== "_id" && key !== "restrictedTo") {
48
48
  _source[key] = role[key];
49
49
  }
50
50
  });
@@ -58,9 +58,9 @@ module.exports = {
58
58
  * @param {User} user
59
59
  * @returns {Object}
60
60
  */
61
- serializeUser: user => {
61
+ serializeUser: (user) => {
62
62
  const { _id, ..._source } = user;
63
63
 
64
64
  return { _id, _source };
65
- }
65
+ },
66
66
  };
@@ -19,7 +19,7 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  /*
25
25
  HTTP Response Mockup to emulate response objects for Passport Authentication
@@ -31,30 +31,30 @@ HTTP Response Mockup to emulate response objects for Passport Authentication
31
31
  * @class PassportResponse
32
32
  */
33
33
  class PassportResponse {
34
- constructor () {
34
+ constructor() {
35
35
  this.headers = {};
36
36
  this.statusCode = 200;
37
37
  this.onEndListener = null;
38
38
  }
39
39
 
40
- setHeader (field, value) {
40
+ setHeader(field, value) {
41
41
  this.headers[field] = value;
42
42
  }
43
43
 
44
- end (statusCode) {
44
+ end(statusCode) {
45
45
  if (statusCode) {
46
46
  this.statusCode = statusCode;
47
47
  }
48
- if (typeof this.onEndListener === 'function') {
48
+ if (typeof this.onEndListener === "function") {
49
49
  this.onEndListener();
50
50
  }
51
51
  }
52
52
 
53
- getHeader (key) {
53
+ getHeader(key) {
54
54
  return this.headers[key];
55
55
  }
56
56
 
57
- addEndListener (listener) {
57
+ addEndListener(listener) {
58
58
  this.onEndListener = listener;
59
59
  }
60
60
  }
@@ -19,20 +19,20 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const Bluebird = require('bluebird');
25
- const passport = require('passport');
24
+ const Bluebird = require("bluebird");
25
+ const passport = require("passport");
26
26
 
27
- const { KuzzleError } = require('../../kerror/errors');
28
- const kerror = require('../../kerror');
29
- const PassportResponse = require('./passportResponse');
27
+ const { KuzzleError } = require("../../kerror/errors");
28
+ const kerror = require("../../kerror");
29
+ const PassportResponse = require("./passportResponse");
30
30
 
31
31
  /**
32
32
  * @class PassportWrapper
33
33
  */
34
34
  class PassportWrapper {
35
- constructor () {
35
+ constructor() {
36
36
  this.options = {};
37
37
  }
38
38
 
@@ -41,7 +41,7 @@ class PassportWrapper {
41
41
  * @param strategyName
42
42
  * @returns {Promise.<*>}
43
43
  */
44
- authenticate (request, strategyName) {
44
+ authenticate(request, strategyName) {
45
45
  const response = new PassportResponse();
46
46
 
47
47
  return new Bluebird((resolve, reject) => {
@@ -56,41 +56,45 @@ class PassportWrapper {
56
56
  if (err !== null) {
57
57
  if (err instanceof KuzzleError) {
58
58
  reject(err);
59
- }
60
- else {
59
+ } else {
61
60
  reject(
62
61
  kerror.getFrom(
63
62
  err,
64
- 'plugin',
65
- 'runtime',
66
- 'unexpected_error',
67
- err.message));
63
+ "plugin",
64
+ "runtime",
65
+ "unexpected_error",
66
+ err.message
67
+ )
68
+ );
68
69
  }
69
- }
70
- else if (! user) {
70
+ } else if (!user) {
71
71
  reject(
72
- kerror.get('plugin', 'strategy', 'missing_user', info.message));
73
- }
74
- else {
72
+ kerror.get("plugin", "strategy", "missing_user", info.message)
73
+ );
74
+ } else {
75
75
  resolve(user);
76
76
  }
77
77
  };
78
78
 
79
79
  try {
80
- passport.authenticate(strategyName, this.options[strategyName] || {}, authCB)(request, response);
81
- }
82
- catch (e) {
80
+ passport.authenticate(
81
+ strategyName,
82
+ this.options[strategyName] || {},
83
+ authCB
84
+ )(request, response);
85
+ } catch (e) {
83
86
  if (e instanceof KuzzleError) {
84
87
  reject(e);
85
- }
86
- else {
88
+ } else {
87
89
  reject(
88
90
  kerror.getFrom(
89
91
  e,
90
- 'plugin',
91
- 'runtime',
92
- 'unexpected_error',
93
- e.message));
92
+ "plugin",
93
+ "runtime",
94
+ "unexpected_error",
95
+ e.message
96
+ )
97
+ );
94
98
  }
95
99
  }
96
100
  });
@@ -103,7 +107,7 @@ class PassportWrapper {
103
107
  * @param {object} strategy - instantiated strategy object
104
108
  * @param {object} opts - options to provide to authenticate with the strategy
105
109
  */
106
- use (name, strategy, opts = {}) {
110
+ use(name, strategy, opts = {}) {
107
111
  passport.use(name, strategy);
108
112
  this.options[name] = opts;
109
113
  }
@@ -113,7 +117,7 @@ class PassportWrapper {
113
117
  *
114
118
  * @param {string} name - name of the strategy to unregister
115
119
  */
116
- unuse (name) {
120
+ unuse(name) {
117
121
  passport.unuse(name);
118
122
  delete this.options[name];
119
123
  }
@@ -1,5 +1,5 @@
1
- import '../../types/Global';
2
- import { Token } from '../../model/security/token';
1
+ import "../../types/Global";
2
+ import { Token } from "../../model/security/token";
3
3
  /**
4
4
  * Maintains a list of valid tokens used by connected protocols.
5
5
  *