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
@@ -131,7 +131,7 @@
131
131
  "message": "The \"_routing\" keyword is forbidden.",
132
132
  "class": "BadRequestError"
133
133
  },
134
- "not_connected":{
134
+ "not_connected": {
135
135
  "description": "Unable to connect to the storage instance",
136
136
  "code": 24,
137
137
  "message": "Elasticsearch service is not connected.",
@@ -287,6 +287,12 @@
287
287
  "message": "The %s (\"%s\") contains invalid characters \",+*\" or is equal to \"_all\" which is forbidden",
288
288
  "code": 50,
289
289
  "class": "BadRequestError"
290
+ },
291
+ "wrong_es_static_settings_for_collection_recreation": {
292
+ "description": "The ES static settings specified at the creation of an existing collection does not match existing settings",
293
+ "message": "Attempt to recreate an existing collection %s of index %s of scope %s with non matching static setting : %s at %s while existing one is at %s",
294
+ "code": 51,
295
+ "class": "BadRequestError"
290
296
  }
291
297
  }
292
298
  },
@@ -3,7 +3,7 @@
3
3
  "subDomains": {
4
4
  "assert": {
5
5
  "code": 1,
6
- "errors" : {
6
+ "errors": {
7
7
  "invalid_plugins_dir": {
8
8
  "description": "The enabled plugins directory cannot be opened",
9
9
  "code": 1,
@@ -164,7 +164,7 @@
164
164
  },
165
165
  "strategy": {
166
166
  "code": 3,
167
- "errors" : {
167
+ "errors": {
168
168
  "invalid_description": {
169
169
  "description": "The strategy.description field must be an object",
170
170
  "code": 1,
@@ -19,160 +19,182 @@
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 errors = require('../errors');
27
- const { has, isPlainObject } = require('../../util/safeObject');
26
+ const errors = require("../errors");
27
+ const { has, isPlainObject } = require("../../util/safeObject");
28
28
 
29
29
  // codes
30
30
  const domains = {
31
- api: require('./2-api'),
32
- cluster: require('./8-cluster.json'),
33
- core: require('./0-core'),
34
- network: require('./3-network'),
35
- plugin: require('./4-plugin'),
36
- protocol: require('./6-protocol'),
37
- security: require('./7-security'),
38
- services: require('./1-services'),
39
- validation: require('./5-validation'),
31
+ api: require("./2-api"),
32
+ cluster: require("./8-cluster.json"),
33
+ core: require("./0-core"),
34
+ network: require("./3-network"),
35
+ plugin: require("./4-plugin"),
36
+ protocol: require("./6-protocol"),
37
+ security: require("./7-security"),
38
+ services: require("./1-services"),
39
+ validation: require("./5-validation"),
40
40
  };
41
41
 
42
42
  /** Check the format of the error codes files
43
43
  * @param {object} - error config file domain
44
44
  */
45
45
 
46
- function checkErrors (subdomain, domain, options) {
46
+ function checkErrors(subdomain, domain, options) {
47
47
  const codes = new Set();
48
48
 
49
49
  for (const [name, error] of Object.entries(subdomain.errors)) {
50
50
  assert(
51
- has(error, 'code'),
52
- `Error configuration file : Missing required 'code' field (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`);
51
+ has(error, "code"),
52
+ `Error configuration file : Missing required 'code' field (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`
53
+ );
53
54
  assert(
54
55
  Number.isInteger(error.code),
55
- `Error configuration file : Field 'code' must be an integer (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`);
56
+ `Error configuration file : Field 'code' must be an integer (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`
57
+ );
56
58
  assert(
57
- error.code > 0x0000 && error.code <= 0xFFFF,
58
- `Error configuration file : Field 'code' must be between 1 and 65535 (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`);
59
+ error.code > 0x0000 && error.code <= 0xffff,
60
+ `Error configuration file : Field 'code' must be between 1 and 65535 (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`
61
+ );
59
62
  assert(
60
- ! codes.has(error.code),
61
- `Error configuration file : code ${error.code} for error '${name}' is not unique (domain: ${domain.code}, subdomain: ${subdomain.code}).`);
63
+ !codes.has(error.code),
64
+ `Error configuration file : code ${error.code} for error '${name}' is not unique (domain: ${domain.code}, subdomain: ${subdomain.code}).`
65
+ );
62
66
 
63
67
  codes.add(error.code);
64
68
 
65
69
  assert(
66
- has(error, 'message'),
67
- `Error configuration file : Missing required 'message' field (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`);
70
+ has(error, "message"),
71
+ `Error configuration file : Missing required 'message' field (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`
72
+ );
68
73
  assert(
69
- typeof error.message === 'string' && error.message.length > 0,
70
- `Error configuration file : Field 'message' must be a non-empty string (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`);
74
+ typeof error.message === "string" && error.message.length > 0,
75
+ `Error configuration file : Field 'message' must be a non-empty string (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`
76
+ );
71
77
 
72
78
  assert(
73
- has(error, 'class'),
74
- `Error configuration file : Missing required 'class' field (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`);
79
+ has(error, "class"),
80
+ `Error configuration file : Missing required 'class' field (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`
81
+ );
75
82
  assert(
76
- typeof error.class === 'string',
77
- `Error configuration file : Field 'class' must be a string (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`);
83
+ typeof error.class === "string",
84
+ `Error configuration file : Field 'class' must be a string (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`
85
+ );
78
86
  assert(
79
87
  has(errors, error.class),
80
- `Error configuration file : Field 'class' must target a known KuzzleError object (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}), '${name.class}' does not exist.`);
88
+ `Error configuration file : Field 'class' must target a known KuzzleError object (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}), '${name.class}' does not exist.`
89
+ );
81
90
 
82
91
  // plugin errors aren't required to have descriptions
83
- if (! options.plugin) {
92
+ if (!options.plugin) {
84
93
  assert(
85
- typeof error.description === 'string' && error.description.length > 0,
86
- `Error configuration file : Field 'description' must be a non-empty string (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`);
94
+ typeof error.description === "string" && error.description.length > 0,
95
+ `Error configuration file : Field 'description' must be a non-empty string (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`
96
+ );
87
97
  }
88
98
 
89
99
  if (error.deprecated !== undefined && error.deprecated !== null) {
90
100
  assert(
91
- typeof error.deprecated === 'string' && error.deprecated.length > 0,
92
- `Error configuration file : Field 'deprecated' must be a non-empty string (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`);
101
+ typeof error.deprecated === "string" && error.deprecated.length > 0,
102
+ `Error configuration file : Field 'deprecated' must be a non-empty string (domain: ${domain.code}, subdomain: ${subdomain.code}, error: ${name}).`
103
+ );
93
104
  }
94
105
  }
95
106
  }
96
107
 
97
- function checkSubdomains (domain, options) {
108
+ function checkSubdomains(domain, options) {
98
109
  const subdomainCodes = new Set();
99
110
 
100
111
  for (const subdomainName of Object.keys(domain.subDomains)) {
101
112
  const subdomain = domain.subDomains[subdomainName];
102
113
 
103
114
  // Subdomain code for plugins is not required and is automatically set to 0
104
- if (! options.plugin) {
115
+ if (!options.plugin) {
105
116
  assert(
106
- has(subdomain, 'code'),
107
- `Error configuration file : Missing required 'code' field (domain: ${domain.code}, subdomain: ${subdomainName}).`);
108
- }
109
- else if (! has(subdomain, 'code')) {
117
+ has(subdomain, "code"),
118
+ `Error configuration file : Missing required 'code' field (domain: ${domain.code}, subdomain: ${subdomainName}).`
119
+ );
120
+ } else if (!has(subdomain, "code")) {
110
121
  subdomain.code = 0;
111
122
  }
112
123
 
113
124
  assert(
114
125
  Number.isInteger(subdomain.code),
115
- `Error configuration file : Field 'code' must be an integer (domain: ${domain.code}, subdomain: ${subdomainName}).`);
126
+ `Error configuration file : Field 'code' must be an integer (domain: ${domain.code}, subdomain: ${subdomainName}).`
127
+ );
116
128
  assert(
117
- subdomain.code >= 0x00 && subdomain.code <= 0xFF,
118
- `Error configuration file : Field 'code' must be between 0 and 255 (domain: ${domain.code}, subdomain: ${subdomainName}).`);
129
+ subdomain.code >= 0x00 && subdomain.code <= 0xff,
130
+ `Error configuration file : Field 'code' must be between 0 and 255 (domain: ${domain.code}, subdomain: ${subdomainName}).`
131
+ );
119
132
  assert(
120
- ! subdomainCodes.has(subdomain.code),
121
- `Error configuration file : code ${subdomain.code} for subdomain '${subdomainName}' is not unique (domain: ${domain.code}).`);
133
+ !subdomainCodes.has(subdomain.code),
134
+ `Error configuration file : code ${subdomain.code} for subdomain '${subdomainName}' is not unique (domain: ${domain.code}).`
135
+ );
122
136
 
123
137
  // We don't allow duplicates, except for defaulted plugin subdomain codes
124
- if (! options.plugin || subdomain.code > 0) {
138
+ if (!options.plugin || subdomain.code > 0) {
125
139
  subdomainCodes.add(subdomain.code);
126
140
  }
127
141
 
128
142
  assert(
129
- has(subdomain, 'errors'),
130
- `Error configuration file : Missing required 'errors' field (domain: ${domain.code}, subdomain: ${subdomainName}).`);
143
+ has(subdomain, "errors"),
144
+ `Error configuration file : Missing required 'errors' field (domain: ${domain.code}, subdomain: ${subdomainName}).`
145
+ );
131
146
  assert(
132
147
  isPlainObject(subdomain.errors),
133
- `Error configuration file : Field 'errors' must be an object (domain: ${domain.code}, subdomain: ${subdomainName}).`);
148
+ `Error configuration file : Field 'errors' must be an object (domain: ${domain.code}, subdomain: ${subdomainName}).`
149
+ );
134
150
 
135
151
  checkErrors(subdomain, domain, options);
136
152
  }
137
153
  }
138
154
 
139
- function checkDomains (errorCodesFiles, options = { plugin: false }) {
155
+ function checkDomains(errorCodesFiles, options = { plugin: false }) {
140
156
  const domainCodes = new Set();
141
157
 
142
158
  for (const domainName of Object.keys(errorCodesFiles)) {
143
159
  const domain = errorCodesFiles[domainName];
144
160
 
145
161
  assert(
146
- has(domain, 'code'),
147
- `Error configuration file : Missing required 'code' field. (domain: '${domainName}').`);
162
+ has(domain, "code"),
163
+ `Error configuration file : Missing required 'code' field. (domain: '${domainName}').`
164
+ );
148
165
  assert(
149
166
  Number.isInteger(domain.code),
150
- `Error configuration file : Field 'code' must be an integer. (domain: '${domainName}').`);
167
+ `Error configuration file : Field 'code' must be an integer. (domain: '${domainName}').`
168
+ );
151
169
  assert(
152
- domain.code >= 0x00 && domain.code <= 0xFF,
153
- `Error configuration file : Field 'code' must be between 0 and 255. (domain: '${domainName}').`);
170
+ domain.code >= 0x00 && domain.code <= 0xff,
171
+ `Error configuration file : Field 'code' must be between 0 and 255. (domain: '${domainName}').`
172
+ );
154
173
  assert(
155
- ! domainCodes.has(domain.code),
156
- `Error configuration file : code ${domain.code} for domain ${domainName} is not unique.`);
174
+ !domainCodes.has(domain.code),
175
+ `Error configuration file : code ${domain.code} for domain ${domainName} is not unique.`
176
+ );
157
177
 
158
178
  domainCodes.add(domain.code);
159
179
 
160
180
  assert(
161
- has(domain, 'subDomains'),
162
- `Error configuration file : Missing required 'subDomains' field. (domain: '${domainName}').`);
181
+ has(domain, "subDomains"),
182
+ `Error configuration file : Missing required 'subDomains' field. (domain: '${domainName}').`
183
+ );
163
184
  assert(
164
185
  isPlainObject(domain.subDomains),
165
- `Error configuration file : Field 'subDomains' must be an object. (domain: '${domainName}').`);
186
+ `Error configuration file : Field 'subDomains' must be an object. (domain: '${domainName}').`
187
+ );
166
188
 
167
189
  checkSubdomains(domain, options);
168
190
  }
169
191
  }
170
192
 
171
- function loadPluginsErrors (pluginManifest, pluginCode) {
193
+ function loadPluginsErrors(pluginManifest, pluginCode) {
172
194
  // @todo this should be in its own, independant domain
173
195
  domains.plugin.subDomains[pluginManifest.name] = {
174
196
  code: pluginCode,
175
- errors: pluginManifest.errors
197
+ errors: pluginManifest.errors,
176
198
  };
177
199
  checkDomains({ plugin: domains.plugin }, { plugin: true });
178
200
  }
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class BadRequestError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class ExternalServiceError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class ForbiddenError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class GatewayTimeoutError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -1,15 +1,15 @@
1
- export * from './badRequestError';
2
- export * from './externalServiceError';
3
- export * from './forbiddenError';
4
- export * from './gatewayTimeoutError';
5
- export * from './internalError';
6
- export * from './kuzzleError';
7
- export * from './multipleErrorsError';
8
- export * from './notFoundError';
9
- export * from './partialError';
10
- export * from './pluginImplementationError';
11
- export * from './serviceUnavailableError';
12
- export * from './sizeLimitError';
13
- export * from './unauthorizedError';
14
- export * from './preconditionError';
15
- export * from './tooManyRequestsError';
1
+ export * from "./badRequestError";
2
+ export * from "./externalServiceError";
3
+ export * from "./forbiddenError";
4
+ export * from "./gatewayTimeoutError";
5
+ export * from "./internalError";
6
+ export * from "./kuzzleError";
7
+ export * from "./multipleErrorsError";
8
+ export * from "./notFoundError";
9
+ export * from "./partialError";
10
+ export * from "./pluginImplementationError";
11
+ export * from "./serviceUnavailableError";
12
+ export * from "./sizeLimitError";
13
+ export * from "./unauthorizedError";
14
+ export * from "./preconditionError";
15
+ export * from "./tooManyRequestsError";
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class InternalError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -1,4 +1,4 @@
1
- import { JSONObject } from 'kuzzle-sdk';
1
+ import { JSONObject } from "kuzzle-sdk";
2
2
  /**
3
3
  * API error are instances of this class.
4
4
  * See https://docs.kuzzle.io/core/2/api/errors/types/
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class MultipleErrorsError extends KuzzleError {
3
3
  errors: Array<KuzzleError>;
4
4
  count: number;
@@ -32,7 +32,7 @@ class MultipleErrorsError extends kuzzleError_1.KuzzleError {
32
32
  const serialized = super.toJSON();
33
33
  serialized.count = this.count;
34
34
  try {
35
- serialized.errors = this.errors.map(error => error.toJSON());
35
+ serialized.errors = this.errors.map((error) => error.toJSON());
36
36
  }
37
37
  catch (error) {
38
38
  serialized.errors = this.errors;
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class NotFoundError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class PartialError extends KuzzleError {
3
3
  errors: Array<KuzzleError>;
4
4
  count: number;
@@ -24,7 +24,7 @@ exports.PartialError = void 0;
24
24
  const kuzzleError_1 = require("./kuzzleError");
25
25
  class PartialError extends kuzzleError_1.KuzzleError {
26
26
  constructor(message, body, id, code) {
27
- if (code === undefined && typeof id === 'number') {
27
+ if (code === undefined && typeof id === "number") {
28
28
  code = id;
29
29
  id = body;
30
30
  body = [];
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class PluginImplementationError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -25,7 +25,8 @@ const kuzzleError_1 = require("./kuzzleError");
25
25
  class PluginImplementationError extends kuzzleError_1.KuzzleError {
26
26
  constructor(message, id, code) {
27
27
  super(message, 500, id, code);
28
- this.message += '\nThis is probably not a Kuzzle error, but a problem with a plugin implementation.';
28
+ this.message +=
29
+ "\nThis is probably not a Kuzzle error, but a problem with a plugin implementation.";
29
30
  }
30
31
  }
31
32
  exports.PluginImplementationError = PluginImplementationError;
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class PreconditionError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class ServiceUnavailableError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class SizeLimitError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class TooManyRequestsError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -1,4 +1,4 @@
1
- import { KuzzleError } from './kuzzleError';
1
+ import { KuzzleError } from "./kuzzleError";
2
2
  export declare class UnauthorizedError extends KuzzleError {
3
3
  constructor(message: any, id?: any, code?: any);
4
4
  }
@@ -1,6 +1,6 @@
1
- import * as errors from './errors';
2
- import { KuzzleError } from './errors';
3
- import { ErrorDomains } from '../types';
1
+ import * as errors from "./errors";
2
+ import { KuzzleError } from "./errors";
3
+ import { ErrorDomains } from "../types";
4
4
  /**
5
5
  * Construct and return the corresponding error
6
6
  *
@@ -81,22 +81,24 @@ function rawGet(domains, domain, subdomain, error, ...placeholders) {
81
81
  }
82
82
  const kuzzleError = lodash_1.default.get(domains, `${domain}.subDomains.${subdomain}.errors.${error}`);
83
83
  if (!kuzzleError) {
84
- return get('core', 'fatal', 'unexpected_error', `${domain}.${subdomain}.${error}`);
84
+ return get("core", "fatal", "unexpected_error", `${domain}.${subdomain}.${error}`);
85
85
  }
86
86
  let body = null;
87
- if (kuzzleError.class === 'PartialError' || kuzzleError.class === 'MultipleErrorsError') {
87
+ if (kuzzleError.class === "PartialError" ||
88
+ kuzzleError.class === "MultipleErrorsError") {
88
89
  body = placeholders.splice(-1)[0];
89
90
  }
90
91
  const message = options.message || (0, util_1.format)(kuzzleError.message, ...placeholders);
91
92
  const id = `${domain}.${subdomain}.${error}`;
92
- const code = domains[domain].code << 24
93
- | domains[domain].subDomains[subdomain].code << 16
94
- | domains[domain].subDomains[subdomain].errors[error].code;
93
+ const code = (domains[domain].code << 24) |
94
+ (domains[domain].subDomains[subdomain].code << 16) |
95
+ domains[domain].subDomains[subdomain].errors[error].code;
95
96
  let kerror;
96
- if (kuzzleError.class === 'PartialError' || kuzzleError.class === 'MultipleErrorsError') {
97
+ if (kuzzleError.class === "PartialError" ||
98
+ kuzzleError.class === "MultipleErrorsError") {
97
99
  kerror = new errors[kuzzleError.class](message, body, id, code);
98
100
  }
99
- else if (kuzzleError.class === 'KuzzleError') {
101
+ else if (kuzzleError.class === "KuzzleError") {
100
102
  const status = kuzzleError.status || 500;
101
103
  kerror = new errors.KuzzleError(message, status, id, code);
102
104
  }
@@ -104,7 +106,7 @@ function rawGet(domains, domain, subdomain, error, ...placeholders) {
104
106
  kerror = new errors[kuzzleError.class](message, id, code);
105
107
  }
106
108
  kerror.props = placeholders;
107
- if (kuzzleError.class !== 'InternalError') {
109
+ if (kuzzleError.class !== "InternalError") {
108
110
  cleanStackTrace(kerror);
109
111
  }
110
112
  return kerror;
@@ -123,13 +125,12 @@ exports.rawGet = rawGet;
123
125
  */
124
126
  function cleanStackTrace(error) {
125
127
  // Keep the original error message
126
- const messageLength = error.message.split('\n').length;
128
+ const messageLength = error.message.split("\n").length;
127
129
  const currentFileName = _getCurrentFileName();
128
130
  // we keep the new error instantiation line ("new ...Error (") on purpose:
129
131
  // this will allow us to replace it without inserting a new line in the array,
130
132
  // saving us from building a new array
131
- const newStack = error.stack.split('\n')
132
- .filter((line, index) => {
133
+ const newStack = error.stack.split("\n").filter((line, index) => {
133
134
  if (index < messageLength) {
134
135
  return true;
135
136
  }
@@ -137,8 +138,8 @@ function cleanStackTrace(error) {
137
138
  return !line.includes(currentFileName);
138
139
  });
139
140
  // insert a deletion message in place of the new error instantiation line
140
- newStack[messageLength] = ' [...Kuzzle internal calls deleted...]';
141
- error.stack = newStack.join('\n');
141
+ newStack[messageLength] = " [...Kuzzle internal calls deleted...]";
142
+ error.stack = newStack.join("\n");
142
143
  }
143
144
  /**
144
145
  * Returns a promise rejected with the corresponding error
@@ -169,12 +170,12 @@ function rawGetFrom(domains, source, domain, subdomain, error, ...placeholders)
169
170
  // If a stacktrace is present, we need to modify the first line because it
170
171
  // still contains the original error message
171
172
  if (derivedError.stack && derivedError.stack.length) {
172
- const stackArray = source.stack.split('\n');
173
+ const stackArray = source.stack.split("\n");
173
174
  stackArray.shift();
174
175
  derivedError.stack = [
175
176
  `${derivedError.constructor.name}: ${derivedError.message}`,
176
- ...stackArray
177
- ].join('\n');
177
+ ...stackArray,
178
+ ].join("\n");
178
179
  }
179
180
  return derivedError;
180
181
  }