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,27 +19,27 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const path = require('path');
25
- const fs = require('fs');
26
- const semver = require('semver');
24
+ const path = require("path");
25
+ const fs = require("fs");
26
+ const semver = require("semver");
27
27
 
28
- const { PluginContext } = require('./pluginContext');
29
- const PrivilegedPluginContext = require('./privilegedContext');
30
- const kerror = require('../../kerror');
31
- const errorCodes = require('../../kerror/codes');
32
- const Manifest = require('./pluginManifest');
33
- const { has, isPlainObject } = require('../../util/safeObject');
28
+ const { PluginContext } = require("./pluginContext");
29
+ const PrivilegedPluginContext = require("./privilegedContext");
30
+ const kerror = require("../../kerror");
31
+ const errorCodes = require("../../kerror/codes");
32
+ const Manifest = require("./pluginManifest");
33
+ const { has, isPlainObject } = require("../../util/safeObject");
34
34
 
35
- const assertionError = kerror.wrap('plugin', 'assert');
36
- const runtimeError = kerror.wrap('plugin', 'runtime');
35
+ const assertionError = kerror.wrap("plugin", "assert");
36
+ const runtimeError = kerror.wrap("plugin", "runtime");
37
37
 
38
38
  const PLUGIN_NAME_REGEX = /^[a-z-\d]+$/;
39
- const HTTP_VERBS = ['get', 'head', 'post', 'put', 'delete', 'patch', 'options'];
39
+ const HTTP_VERBS = ["get", "head", "post", "put", "delete", "patch", "options"];
40
40
 
41
41
  class Plugin {
42
- constructor (
42
+ constructor(
43
43
  instance,
44
44
  { name, application = false, deprecationWarning = true } = {}
45
45
  ) {
@@ -50,8 +50,8 @@ class Plugin {
50
50
  this._initCalled = false;
51
51
  this._config = {};
52
52
  this._context = null;
53
- this._version = instance.version || '';
54
- this._name = '';
53
+ this._version = instance.version || "";
54
+ this._name = "";
55
55
  this._manifest = instance._manifest || null;
56
56
  this._deprecationWarning = deprecationWarning;
57
57
 
@@ -60,33 +60,40 @@ class Plugin {
60
60
  }
61
61
  }
62
62
 
63
- init (name) {
63
+ init(name) {
64
64
  this.name = name;
65
65
 
66
66
  if (global.kuzzle.config.plugins[this.name]) {
67
- this.config = JSON.parse(JSON.stringify(global.kuzzle.config.plugins[this.name]));
67
+ this.config = JSON.parse(
68
+ JSON.stringify(global.kuzzle.config.plugins[this.name])
69
+ );
68
70
  }
69
71
 
70
72
  // check plugin privileged prerequisites
71
73
  // user need to acknowledge privileged mode in plugin configuration
72
74
  if (this.config.privileged) {
73
- if (! this.manifest || ! this.manifest.privileged) {
74
- throw assertionError.get('privileged_not_supported', this.name);
75
+ if (!this.manifest || !this.manifest.privileged) {
76
+ throw assertionError.get("privileged_not_supported", this.name);
75
77
  }
76
- }
77
- else if (this.manifest && this.manifest.privileged) {
78
- throw assertionError.get('privileged_not_set', this.name);
78
+ } else if (this.manifest && this.manifest.privileged) {
79
+ throw assertionError.get("privileged_not_set", this.name);
79
80
  }
80
81
 
81
82
  if (this.manifest && this.manifest.kuzzleVersion) {
82
- if (! semver.satisfies(global.kuzzle.config.version, this.manifest.kuzzleVersion)) {
83
+ if (
84
+ !semver.satisfies(
85
+ global.kuzzle.config.version,
86
+ this.manifest.kuzzleVersion
87
+ )
88
+ ) {
83
89
  throw kerror.get(
84
- 'plugin',
85
- 'manifest',
86
- 'version_mismatch',
90
+ "plugin",
91
+ "manifest",
92
+ "version_mismatch",
87
93
  this.name,
88
94
  global.kuzzle.config.version,
89
- this.manifest.kuzzleVersion);
95
+ this.manifest.kuzzleVersion
96
+ );
90
97
  }
91
98
  }
92
99
 
@@ -95,7 +102,7 @@ class Plugin {
95
102
  : new PluginContext(this.name);
96
103
  }
97
104
 
98
- info () {
105
+ info() {
99
106
  /* eslint-disable sort-keys */
100
107
  if (this.application) {
101
108
  return {
@@ -115,36 +122,36 @@ class Plugin {
115
122
  pipes: [],
116
123
  routes: [],
117
124
  strategies: [],
118
- version: this.version
125
+ version: this.version,
119
126
  };
120
127
  /* eslint-enable sort-keys */
121
128
 
122
- if (has(this.instance, 'hooks')) {
129
+ if (has(this.instance, "hooks")) {
123
130
  description.hooks = Object.keys(this.instance.hooks);
124
131
  }
125
132
 
126
- if (has(this.instance, 'pipes')) {
133
+ if (has(this.instance, "pipes")) {
127
134
  description.pipes = Object.keys(this.instance.pipes);
128
135
  }
129
136
 
130
- if (has(this.instance, 'controllers')) {
131
- description.controllers = Object
132
- .keys(this.instance.controllers)
133
- .map(controller => `${this.name}/${controller}`);
137
+ if (has(this.instance, "controllers")) {
138
+ description.controllers = Object.keys(this.instance.controllers).map(
139
+ (controller) => `${this.name}/${controller}`
140
+ );
134
141
  }
135
142
 
136
- if (has(this.instance, 'routes')) {
143
+ if (has(this.instance, "routes")) {
137
144
  description.routes = this.instance.routes;
138
145
  }
139
146
 
140
- if (has(this.instance, 'strategies')) {
147
+ if (has(this.instance, "strategies")) {
141
148
  description.strategies = Object.keys(this.instance.strategies);
142
149
  }
143
150
 
144
151
  return description;
145
152
  }
146
153
 
147
- printDeprecation (message) {
154
+ printDeprecation(message) {
148
155
  if (this.deprecationWarning) {
149
156
  global.kuzzle.log.warn(`${this.logPrefix} ${message}`);
150
157
  }
@@ -152,66 +159,68 @@ class Plugin {
152
159
 
153
160
  // getters/setters ===========================================================
154
161
 
155
- get instance () {
162
+ get instance() {
156
163
  return this._instance;
157
164
  }
158
165
 
159
- get context () {
166
+ get context() {
160
167
  return this._context;
161
168
  }
162
169
 
163
- get application () {
170
+ get application() {
164
171
  return this._application;
165
172
  }
166
173
 
167
- get logPrefix () {
174
+ get logPrefix() {
168
175
  return `[${this.name}]`;
169
176
  }
170
177
 
171
- get config () {
178
+ get config() {
172
179
  return this._config;
173
180
  }
174
- set config (config) {
181
+ set config(config) {
175
182
  this._config = config;
176
183
  }
177
184
 
178
- get version () {
185
+ get version() {
179
186
  return this._version;
180
187
  }
181
- set version (version) {
188
+ set version(version) {
182
189
  this._version = version;
183
190
  }
184
191
 
185
- get deprecationWarning () {
192
+ get deprecationWarning() {
186
193
  return this._deprecationWarning;
187
194
  }
188
- set deprecationWarning (value) {
195
+ set deprecationWarning(value) {
189
196
  this._deprecationWarning = value;
190
197
  }
191
198
 
192
- get name () {
199
+ get name() {
193
200
  return this._name;
194
201
  }
195
- set name (name) {
196
- if (! this.constructor.checkName(name)) {
197
- this.printDeprecation('Plugin names should be in kebab-case. This behavior will be enforced in futur versions of Kuzzle.');
202
+ set name(name) {
203
+ if (!this.constructor.checkName(name)) {
204
+ this.printDeprecation(
205
+ "Plugin names should be in kebab-case. This behavior will be enforced in futur versions of Kuzzle."
206
+ );
198
207
  }
199
208
 
200
209
  this._name = name;
201
210
  }
202
211
 
203
- get manifest () {
212
+ get manifest() {
204
213
  return this._manifest;
205
214
  }
206
- set manifest (manifest) {
215
+ set manifest(manifest) {
207
216
  this._manifest = manifest;
208
217
  }
209
218
 
210
219
  // static methods ============================================================
211
220
 
212
- static loadFromDirectory (pluginPath) {
213
- if (! fs.statSync(pluginPath).isDirectory()) {
214
- throw assertionError.get('cannot_load', pluginPath, 'Not a directory.');
221
+ static loadFromDirectory(pluginPath) {
222
+ if (!fs.statSync(pluginPath).isDirectory()) {
223
+ throw assertionError.get("cannot_load", pluginPath, "Not a directory.");
215
224
  }
216
225
 
217
226
  let plugin;
@@ -222,13 +231,12 @@ class Plugin {
222
231
  const pluginInstance = new PluginClass();
223
232
 
224
233
  plugin = new Plugin(pluginInstance);
225
- }
226
- catch (error) {
234
+ } catch (error) {
227
235
  if (error.message.match(/not a constructor/i)) {
228
- throw assertionError.get('not_a_constructor', PluginClass.name);
236
+ throw assertionError.get("not_a_constructor", PluginClass.name);
229
237
  }
230
238
 
231
- throw runtimeError.getFrom(error, 'unexpected_error', error.message);
239
+ throw runtimeError.getFrom(error, "unexpected_error", error.message);
232
240
  }
233
241
 
234
242
  // load manifest
@@ -238,8 +246,8 @@ class Plugin {
238
246
  plugin.name = plugin.manifest.name;
239
247
 
240
248
  // load plugin version if exists
241
- const packageJsonPath = path.join(pluginPath, 'package.json');
242
- if (fs.existsSync(packageJsonPath) && ! plugin.version) {
249
+ const packageJsonPath = path.join(pluginPath, "package.json");
250
+ if (fs.existsSync(packageJsonPath) && !plugin.version) {
243
251
  plugin.version = require(packageJsonPath).version;
244
252
  }
245
253
 
@@ -249,25 +257,27 @@ class Plugin {
249
257
  // we use the manifest name instead of the lowerCased plugin name
250
258
  // to ensure to match the plugin original name in the configuration
251
259
  const config = global.kuzzle.config[plugin.manifest.name];
252
- const pluginCode = config && config._pluginCode
253
- ? config._pluginCode
254
- : 0x00;
260
+ const pluginCode =
261
+ config && config._pluginCode ? config._pluginCode : 0x00;
255
262
 
256
263
  errorCodes.loadPluginsErrors(plugin.manifest.raw, pluginCode);
257
264
 
258
- global.kuzzle.log.info(`${plugin.logPrefix} Custom errors successfully loaded.`);
259
- }
260
- catch (err) {
261
- if ( err.message.match(/Error configuration file/i)
262
- || err instanceof SyntaxError
265
+ global.kuzzle.log.info(
266
+ `${plugin.logPrefix} Custom errors successfully loaded.`
267
+ );
268
+ } catch (err) {
269
+ if (
270
+ err.message.match(/Error configuration file/i) ||
271
+ err instanceof SyntaxError
263
272
  ) {
264
273
  throw kerror.getFrom(
265
274
  err,
266
- 'plugin',
267
- 'manifest',
268
- 'invalid_errors',
275
+ "plugin",
276
+ "manifest",
277
+ "invalid_errors",
269
278
  plugin.manifest.name,
270
- err.message);
279
+ err.message
280
+ );
271
281
  }
272
282
 
273
283
  throw err;
@@ -275,101 +285,121 @@ class Plugin {
275
285
  }
276
286
 
277
287
  // check if the plugin exposes a "init" method
278
- if (typeof plugin.instance.init !== 'function') {
279
- throw assertionError.get('init_not_found', plugin.name);
288
+ if (typeof plugin.instance.init !== "function") {
289
+ throw assertionError.get("init_not_found", plugin.name);
280
290
  }
281
291
 
282
292
  return plugin;
283
293
  }
284
294
 
285
- static checkName (name) {
295
+ static checkName(name) {
286
296
  return PLUGIN_NAME_REGEX.test(name);
287
297
  }
288
298
 
289
- static checkControllerDefinition (name, definition, { application = false } = {}) {
290
- if (typeof name !== 'string') {
299
+ static checkControllerDefinition(
300
+ name,
301
+ definition,
302
+ { application = false } = {}
303
+ ) {
304
+ if (typeof name !== "string") {
291
305
  throw assertionError.get(
292
- 'invalid_controller_definition',
293
- 'Controller name must be a string');
306
+ "invalid_controller_definition",
307
+ "Controller name must be a string"
308
+ );
294
309
  }
295
310
 
296
- if (! isPlainObject(definition)) {
311
+ if (!isPlainObject(definition)) {
297
312
  throw assertionError.get(
298
- 'invalid_controller_definition',
313
+ "invalid_controller_definition",
299
314
  name,
300
- 'Controller definition must be an object');
315
+ "Controller definition must be an object"
316
+ );
301
317
  }
302
318
 
303
- if (! isPlainObject(definition.actions)) {
319
+ if (!isPlainObject(definition.actions)) {
304
320
  throw assertionError.get(
305
- 'invalid_controller_definition',
321
+ "invalid_controller_definition",
306
322
  name,
307
- 'Controller definition "actions" property must be an object');
323
+ 'Controller definition "actions" property must be an object'
324
+ );
308
325
  }
309
326
 
310
- for (const [action, actionDefinition] of Object.entries(definition.actions)) {
327
+ for (const [action, actionDefinition] of Object.entries(
328
+ definition.actions
329
+ )) {
311
330
  const actionProperties = Object.keys(actionDefinition);
312
331
 
313
332
  if (actionProperties.length > 2) {
314
- actionProperties.splice(actionProperties.indexOf('handler'), 1);
315
- actionProperties.splice(actionProperties.indexOf('http'), 1);
333
+ actionProperties.splice(actionProperties.indexOf("handler"), 1);
334
+ actionProperties.splice(actionProperties.indexOf("http"), 1);
316
335
 
317
336
  throw assertionError.get(
318
- 'invalid_controller_definition',
337
+ "invalid_controller_definition",
319
338
  name,
320
- `action "${action}" has invalid properties: ${actionProperties.join(', ')}`);
339
+ `action "${action}" has invalid properties: ${actionProperties.join(
340
+ ", "
341
+ )}`
342
+ );
321
343
  }
322
344
 
323
- if (typeof action !== 'string') {
345
+ if (typeof action !== "string") {
324
346
  throw assertionError.get(
325
- 'invalid_controller_definition',
347
+ "invalid_controller_definition",
326
348
  name,
327
- 'action names must be strings');
349
+ "action names must be strings"
350
+ );
328
351
  }
329
352
 
330
- if (typeof actionDefinition.handler !== 'function') {
353
+ if (typeof actionDefinition.handler !== "function") {
331
354
  throw assertionError.get(
332
- 'invalid_controller_definition',
355
+ "invalid_controller_definition",
333
356
  name,
334
- `action "${action}" handler must be a function`);
357
+ `action "${action}" handler must be a function`
358
+ );
335
359
  }
336
360
 
337
361
  if (actionDefinition.http) {
338
- if (! Array.isArray(actionDefinition.http)) {
362
+ if (!Array.isArray(actionDefinition.http)) {
339
363
  throw assertionError.get(
340
- 'invalid_controller_definition',
364
+ "invalid_controller_definition",
341
365
  name,
342
- `action "${action}" http definition must be an array`);
366
+ `action "${action}" http definition must be an array`
367
+ );
343
368
  }
344
369
 
345
370
  for (const route of actionDefinition.http) {
346
- if (typeof route.verb !== 'string' || route.verb.length === 0) {
371
+ if (typeof route.verb !== "string" || route.verb.length === 0) {
347
372
  throw assertionError.get(
348
- 'invalid_controller_definition',
373
+ "invalid_controller_definition",
349
374
  name,
350
- `action "${action}" http "verb" property must be a non-empty string`);
375
+ `action "${action}" http "verb" property must be a non-empty string`
376
+ );
351
377
  }
352
378
 
353
- if (! HTTP_VERBS.includes(route.verb.toLowerCase())) {
379
+ if (!HTTP_VERBS.includes(route.verb.toLowerCase())) {
354
380
  throw assertionError.get(
355
- 'invalid_controller_definition',
381
+ "invalid_controller_definition",
356
382
  name,
357
- `action "${action}" http verb "${route.verb}" is not a valid http verb`);
383
+ `action "${action}" http verb "${route.verb}" is not a valid http verb`
384
+ );
358
385
  }
359
386
 
360
387
  checkHttpRouteProperties(route, action, name, application);
361
388
 
362
389
  const routeProperties = Object.keys(route);
363
390
  if (routeProperties.length > 3) {
364
- routeProperties.splice(routeProperties.indexOf('url'), 1);
365
- routeProperties.splice(routeProperties.indexOf('path'), 1);
366
- routeProperties.splice(routeProperties.indexOf('verb'), 1);
367
- routeProperties.splice(routeProperties.indexOf('openapi'), 1);
391
+ routeProperties.splice(routeProperties.indexOf("url"), 1);
392
+ routeProperties.splice(routeProperties.indexOf("path"), 1);
393
+ routeProperties.splice(routeProperties.indexOf("verb"), 1);
394
+ routeProperties.splice(routeProperties.indexOf("openapi"), 1);
368
395
 
369
396
  throw assertionError.get(
370
- 'invalid_controller_definition',
397
+ "invalid_controller_definition",
371
398
  name,
372
- `action "${action}" has invalid http properties: ${routeProperties.join(', ')}`);
399
+ `action "${action}" has invalid http properties: ${routeProperties.join(
400
+ ", "
401
+ )}`
402
+ );
373
403
  }
374
404
  }
375
405
  }
@@ -377,16 +407,17 @@ class Plugin {
377
407
  }
378
408
  }
379
409
 
380
- function checkHttpRouteProperties (route, action, name, application) {
381
- if (typeof route.path !== 'string' || route.path.length === 0) {
382
- if (! application && (typeof route.url === 'string' && route.url.length > 0)) {
410
+ function checkHttpRouteProperties(route, action, name, application) {
411
+ if (typeof route.path !== "string" || route.path.length === 0) {
412
+ if (!application && typeof route.url === "string" && route.url.length > 0) {
383
413
  return;
384
414
  }
385
415
 
386
416
  throw assertionError.get(
387
- 'invalid_controller_definition',
417
+ "invalid_controller_definition",
388
418
  name,
389
- `action "${action}" http "path" property must be a non-empty string`);
419
+ `action "${action}" http "path" property must be a non-empty string`
420
+ );
390
421
  }
391
422
  }
392
423
 
@@ -1,10 +1,10 @@
1
- import { Koncorde } from '../shared/KoncordeWrapper';
2
- import { Client } from '@elastic/elasticsearch';
3
- import { JSONObject } from 'kuzzle-sdk';
4
- import { EmbeddedSDK } from '../shared/sdk/embeddedSdk';
5
- import { Mutex } from '../../util/mutex';
6
- import { RequestContext, RequestInput, KuzzleRequest } from '../../../index';
7
- import { BackendCluster } from '../backend';
1
+ import { Koncorde } from "../shared/KoncordeWrapper";
2
+ import { Client } from "@elastic/elasticsearch";
3
+ import { JSONObject } from "kuzzle-sdk";
4
+ import { EmbeddedSDK } from "../shared/sdk/embeddedSdk";
5
+ import { Mutex } from "../../util/mutex";
6
+ import { RequestContext, RequestInput, KuzzleRequest } from "../../../index";
7
+ import { BackendCluster } from "../backend";
8
8
  export interface Repository {
9
9
  create(document: JSONObject, options: any): Promise<any>;
10
10
  createOrReplace(document: JSONObject, options: any): Promise<any>;