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
@@ -21,140 +21,149 @@
21
21
 
22
22
  /* eslint sort-keys: 0 */
23
23
 
24
- 'use strict';
24
+ "use strict";
25
25
 
26
- const Bluebird = require('bluebird');
27
- const _ = require('lodash');
28
- const es = require('@elastic/elasticsearch');
26
+ const Bluebird = require("bluebird");
27
+ const _ = require("lodash");
28
+ const es = require("@elastic/elasticsearch");
29
29
 
30
- const { KuzzleError } = require('../../kerror/errors');
31
- const debug = require('../../util/debug')('kuzzle:services:storage:ESCommon');
32
- const kerror = require('../../kerror').wrap('services', 'storage');
30
+ const { KuzzleError } = require("../../kerror/errors");
31
+ const debug = require("../../util/debug")("kuzzle:services:storage:ESCommon");
32
+ const kerror = require("../../kerror").wrap("services", "storage");
33
33
 
34
34
  const errorMessagesMapping = [
35
35
  {
36
- regex: /^\[es_rejected_execution_exception] rejected execution .*? on EsThreadPoolExecutor\[(.*?), .*$/,
37
- subCode: 'too_many_operations',
38
- getPlaceholders: (esError, matches) => [matches[1]]
36
+ regex:
37
+ /^\[es_rejected_execution_exception] rejected execution .*? on EsThreadPoolExecutor\[(.*?), .*$/,
38
+ subCode: "too_many_operations",
39
+ getPlaceholders: (esError, matches) => [matches[1]],
39
40
  },
40
41
  {
41
42
  // [illegal_argument_exception] object mapping [titi] can't be changed from nested to non-nested
42
- regex: /^\[illegal_argument_exception] object mapping \[(.*?)] can't be changed from nested to non-nested$/,
43
- subcode: 'cannot_change_mapping',
44
- getPlaceholders: (esError, matches) => [matches[1]]
43
+ regex:
44
+ /^\[illegal_argument_exception] object mapping \[(.*?)] can't be changed from nested to non-nested$/,
45
+ subcode: "cannot_change_mapping",
46
+ getPlaceholders: (esError, matches) => [matches[1]],
45
47
  },
46
48
  {
47
49
  // [illegal_argument_exception] object mapping [baz] can't be changed from non-nested to nested
48
- regex: /^\[illegal_argument_exception] object mapping \[(.*?)] can't be changed from non-nested to nested$/,
49
- subcode: 'cannot_change_mapping',
50
- getPlaceholders: (esError, matches) => [matches[1]]
50
+ regex:
51
+ /^\[illegal_argument_exception] object mapping \[(.*?)] can't be changed from non-nested to nested$/,
52
+ subcode: "cannot_change_mapping",
53
+ getPlaceholders: (esError, matches) => [matches[1]],
51
54
  },
52
55
  {
53
56
  // [illegal_argument_exception] Can't merge a non object mapping [aeaze] with an object mapping [aeaze]
54
- regex: /^\[illegal_argument_exception] Can't merge a non object mapping \[(.*?)] with an object mapping \[(.*?)]$/,
55
- subcode: 'cannot_change_mapping',
56
- getPlaceholders: (esError, matches) => [matches[1]]
57
+ regex:
58
+ /^\[illegal_argument_exception] Can't merge a non object mapping \[(.*?)] with an object mapping \[(.*?)]$/,
59
+ subcode: "cannot_change_mapping",
60
+ getPlaceholders: (esError, matches) => [matches[1]],
57
61
  },
58
62
  {
59
63
  // [illegal_argument_exception] [tutu.tutu] is defined as an object in mapping [aze] but this name is already used for a field in other types
60
- regex: /^\[illegal_argument_exception] \[(.*?)] is defined as an object in mapping \[(.*?)] but this name is already used for a field in other types$/,
61
- subcode: 'duplicate_field_mapping',
62
- getPlaceholders: (esError, matches) => [matches[1], matches[2]]
64
+ regex:
65
+ /^\[illegal_argument_exception] \[(.*?)] is defined as an object in mapping \[(.*?)] but this name is already used for a field in other types$/,
66
+ subcode: "duplicate_field_mapping",
67
+ getPlaceholders: (esError, matches) => [matches[1], matches[2]],
63
68
  },
64
69
  {
65
70
  // [illegal_argument_exception] mapper [source.flags] of different type, current_type [string], merged_type [long]
66
- regex: /^mapper \[(.*?)] of different type, current_type \[(.*?)], merged_type \[(.*?)]$/,
67
- subcode: 'cannot_change_mapping',
68
- getPlaceholders: (esError, matches) => [matches[1]]
71
+ regex:
72
+ /^mapper \[(.*?)] of different type, current_type \[(.*?)], merged_type \[(.*?)]$/,
73
+ subcode: "cannot_change_mapping",
74
+ getPlaceholders: (esError, matches) => [matches[1]],
69
75
  },
70
76
  {
71
77
  // [mapper_parsing_exception] Mapping definition for [flags] has unsupported parameters: [index : not_analyzed]
72
78
  // eslint-disable-next-line no-regex-spaces
73
- regex: /^\[mapper_parsing_exception] Mapping definition for \[(.*?)] has unsupported parameters: \[(.*?)]$/,
74
- subcode: 'unexpected_properties',
75
- getPlaceholders: (esError, matches) => [matches[2], matches[1]]
79
+ regex:
80
+ /^\[mapper_parsing_exception] Mapping definition for \[(.*?)] has unsupported parameters: \[(.*?)]$/,
81
+ subcode: "unexpected_properties",
82
+ getPlaceholders: (esError, matches) => [matches[2], matches[1]],
76
83
  },
77
84
  {
78
85
  // [mapper_parsing_exception] No handler for type [boolean] declared on field [not]
79
- regex: /^\[mapper_parsing_exception] No handler for type \[(.*?)] declared on field \[(.*?)]$/,
80
- subcode: 'invalid_mapping_type',
81
- getPlaceholders: (esError, matches) => [matches[2], matches[1]]
86
+ regex:
87
+ /^\[mapper_parsing_exception] No handler for type \[(.*?)] declared on field \[(.*?)]$/,
88
+ subcode: "invalid_mapping_type",
89
+ getPlaceholders: (esError, matches) => [matches[2], matches[1]],
82
90
  },
83
91
  {
84
92
  // [mapper_parsing_exception] failed to parse [conditions.host.flags]
85
93
  regex: /^\[mapper_parsing_exception] failed to parse \[(.*?)]$/,
86
- subcode: 'wrong_mapping_property',
87
- getPlaceholders: (esError, matches) => [matches[1]]
94
+ subcode: "wrong_mapping_property",
95
+ getPlaceholders: (esError, matches) => [matches[1]],
88
96
  },
89
97
  {
90
98
  // Failed to parse mapping [_doc]: Expected map for property [fields] on field [enabled] but got a class java.lang.String
91
- regex: /^Failed to parse mapping \[.*\]: Expected \w+ for property \[(.*)\] on field \[(.*)\]/,
92
- subcode: 'wrong_mapping_property',
93
- getPlaceholders: (esError, matches) => [`${matches[2]}.${matches[1]}`]
99
+ regex:
100
+ /^Failed to parse mapping \[.*\]: Expected \w+ for property \[(.*)\] on field \[(.*)\]/,
101
+ subcode: "wrong_mapping_property",
102
+ getPlaceholders: (esError, matches) => [`${matches[2]}.${matches[1]}`],
94
103
  },
95
104
  {
96
105
  // [index_not_found_exception] no such index, with { resource.type=index_or_alias & resource.id=foso & index=foso }
97
106
  regex: /^no such index \[([%&])(.*)\.(.*)\]$/,
98
- subcode: 'unknown_collection',
99
- getPlaceholders: (esError, matches) => [
100
- matches[2],
101
- matches[3]
102
- ]
107
+ subcode: "unknown_collection",
108
+ getPlaceholders: (esError, matches) => [matches[2], matches[3]],
103
109
  },
104
110
  {
105
111
  // [mapper_parsing_exception] Expected map for property [fields] on field [foo] but got a class java.lang.String
106
- regex: /^\[mapper_parsing_exception] Expected map for property \[(.*?)] on field \[(.*?)] but got a class java\.lang\.String$/,
107
- subcode: 'wrong_mapping_property',
108
- getPlaceholders: (esError, matches) => [`${matches[2]}.${matches[1]}`]
112
+ regex:
113
+ /^\[mapper_parsing_exception] Expected map for property \[(.*?)] on field \[(.*?)] but got a class java\.lang\.String$/,
114
+ subcode: "wrong_mapping_property",
115
+ getPlaceholders: (esError, matches) => [`${matches[2]}.${matches[1]}`],
109
116
  },
110
117
  {
111
- regex: /^\[version_conflict_engine_exception] \[data]\[(.*?)]: version conflict.*$/,
112
- subcode: 'too_many_changes',
113
- getPlaceholders: (esError, matches) => [matches[1]]
118
+ regex:
119
+ /^\[version_conflict_engine_exception] \[data]\[(.*?)]: version conflict.*$/,
120
+ subcode: "too_many_changes",
121
+ getPlaceholders: (esError, matches) => [matches[1]],
114
122
  },
115
123
  {
116
124
  //[liia]: version conflict, document already exists (current version [2])
117
125
  regex: /^\[(.*)\]: version conflict, document already exists.*/,
118
- subcode: 'document_already_exists',
119
- getPlaceholders: () => []
126
+ subcode: "document_already_exists",
127
+ getPlaceholders: () => [],
120
128
  },
121
129
  {
122
130
  // Unknown key for a START_OBJECT in [term].
123
131
  regex: /^Unknown key for a START_OBJECT in \[(.*)\].*/,
124
- subcode: 'invalid_search_query',
125
- getPlaceholders: (esError, matches) => [matches[1]]
132
+ subcode: "invalid_search_query",
133
+ getPlaceholders: (esError, matches) => [matches[1]],
126
134
  },
127
135
  {
128
136
  // mapping set to strict, dynamic introduction of [lehuong] within [_doc] is not allowed
129
- regex: /^mapping set to strict, dynamic introduction of \[(.+)\] within \[.+\] is not allowed/,
130
- subcode: 'strict_mapping_rejection',
137
+ regex:
138
+ /^mapping set to strict, dynamic introduction of \[(.+)\] within \[.+\] is not allowed/,
139
+ subcode: "strict_mapping_rejection",
131
140
  getPlaceholders: (esError, matches) => {
132
141
  // "/%26index.collection/_doc"
133
142
  const esPath = esError.meta.meta.request.params.path;
134
143
  // keep only "index"
135
- const index = esPath.split('.')[0].split('%26')[1];
144
+ const index = esPath.split(".")[0].split("%26")[1];
136
145
  // keep only "collection"
137
- const collection = esPath.substr(esPath.indexOf('.') + 1).split('/')[0];
146
+ const collection = esPath.substr(esPath.indexOf(".") + 1).split("/")[0];
138
147
 
139
148
  return [matches[1], index, collection];
140
- }
149
+ },
141
150
  },
142
151
  {
143
152
  // [and] query malformed, no start_object after query name
144
153
  regex: /^\[(.*)\] query malformed, no start_object after query name/,
145
- subcode: 'unknown_query_keyword',
146
- getPlaceholders: (esError, matches) => [matches[1]]
154
+ subcode: "unknown_query_keyword",
155
+ getPlaceholders: (esError, matches) => [matches[1]],
147
156
  },
148
157
  {
149
158
  // no [query] registered for [equals]
150
159
  regex: /^no \[query\] registered for \[(.*)\]/,
151
- subcode: 'unknown_query_keyword',
152
- getPlaceholders: (esError, matches) => [matches[1]]
160
+ subcode: "unknown_query_keyword",
161
+ getPlaceholders: (esError, matches) => [matches[1]],
153
162
  },
154
163
  ];
155
164
 
156
165
  class ESWrapper {
157
- constructor (client) {
166
+ constructor(client) {
158
167
  this.client = client;
159
168
  }
160
169
 
@@ -164,12 +173,12 @@ class ESWrapper {
164
173
  * @param {Error} error
165
174
  * @returns {KuzzleError}
166
175
  */
167
- formatESError (error) {
176
+ formatESError(error) {
168
177
  if (error instanceof KuzzleError) {
169
178
  return error;
170
179
  }
171
180
 
172
- global.kuzzle.emit('services:storage:error', {
181
+ global.kuzzle.emit("services:storage:error", {
173
182
  message: `Elasticsearch Client error: ${error.message}`,
174
183
  // /!\ not all ES error classes have a "meta" property
175
184
  meta: error.meta || null,
@@ -177,9 +186,9 @@ class ESWrapper {
177
186
  });
178
187
 
179
188
  if (error instanceof es.errors.NoLivingConnectionsError) {
180
- throw kerror.get('not_connected');
189
+ throw kerror.get("not_connected");
181
190
  }
182
- const message = _.get(error, 'meta.body.error.reason', error.message);
191
+ const message = _.get(error, "meta.body.error.reason", error.message);
183
192
 
184
193
  // Try to match a known elasticsearch error
185
194
  for (const betterError of errorMessagesMapping) {
@@ -188,7 +197,8 @@ class ESWrapper {
188
197
  if (matches) {
189
198
  return kerror.get(
190
199
  betterError.subcode,
191
- ...betterError.getPlaceholders(error, matches));
200
+ ...betterError.getPlaceholders(error, matches)
201
+ );
192
202
  }
193
203
  }
194
204
 
@@ -209,45 +219,45 @@ class ESWrapper {
209
219
  return this._handleUnknownError(error, message);
210
220
  }
211
221
 
212
- reject (error) {
222
+ reject(error) {
213
223
  return Bluebird.reject(this.formatESError(error));
214
224
  }
215
225
 
216
- _handleConflictError (error, message) {
226
+ _handleConflictError(error, message) {
217
227
  debug('unhandled "Conflict" elasticsearch error: %a', error);
218
228
 
219
- return kerror.get('unexpected_error', message);
229
+ return kerror.get("unexpected_error", message);
220
230
  }
221
231
 
222
- _handleNotFoundError (error, message) {
232
+ _handleNotFoundError(error, message) {
223
233
  let errorMessage = message;
224
234
 
225
235
  // _index= "&nyc-open-data.yellow-taxi"
226
- const index = error.body._index.split('.')[0].slice(1);
227
- const collection = error.body._index.split('.')[1];
236
+ const index = error.body._index.split(".")[0].slice(1);
237
+ const collection = error.body._index.split(".")[1];
228
238
 
229
239
  // 404 on a GET document
230
240
  if (error.body.found === false) {
231
- return kerror.get('not_found', error.body._id, index, collection);
241
+ return kerror.get("not_found", error.body._id, index, collection);
232
242
  }
233
243
 
234
244
  // 404 on DELETE document (ES error payloads are so cool!)
235
245
  if (error.meta.body._id) {
236
- return kerror.get('not_found', error.meta.body._id, index, collection);
246
+ return kerror.get("not_found", error.meta.body._id, index, collection);
237
247
  }
238
248
 
239
249
  if (error.meta.body && error.meta.body.error) {
240
250
  errorMessage = error.meta.body.error
241
- ? `${error.meta.body.error.reason}: ${error.meta.body.error['resource.id']}`
251
+ ? `${error.meta.body.error.reason}: ${error.meta.body.error["resource.id"]}`
242
252
  : `${error.message}: ${error.body._id}`;
243
253
  }
244
254
 
245
255
  debug('unhandled "NotFound" elasticsearch error: %a', error);
246
256
 
247
- return kerror.get('unexpected_not_found', errorMessage);
257
+ return kerror.get("unexpected_not_found", errorMessage);
248
258
  }
249
259
 
250
- _handleBadRequestError (error, message) {
260
+ _handleBadRequestError(error, message) {
251
261
  let errorMessage = message;
252
262
 
253
263
  if (error.meta.body && error.meta.body.error) {
@@ -256,24 +266,31 @@ class ESWrapper {
256
266
  : error.meta.body.error.reason;
257
267
 
258
268
  // empty query throws exception with ES 7
259
- if ( error.meta.body.error.type === 'parsing_exception'
260
- && _.get(error, 'meta.body.error.caused_by.type') === 'illegal_argument_exception') {
269
+ if (
270
+ error.meta.body.error.type === "parsing_exception" &&
271
+ _.get(error, "meta.body.error.caused_by.type") ===
272
+ "illegal_argument_exception"
273
+ ) {
261
274
  errorMessage = error.meta.body.error.caused_by.reason;
262
275
  }
263
276
  }
264
277
 
265
- debug('unhandled "BadRequest" elasticsearch error: %a', _.get(error, 'meta.body.error.reason', error.message));
278
+ debug(
279
+ 'unhandled "BadRequest" elasticsearch error: %a',
280
+ _.get(error, "meta.body.error.reason", error.message)
281
+ );
266
282
 
267
- return kerror.get('unexpected_bad_request', errorMessage);
283
+ return kerror.get("unexpected_bad_request", errorMessage);
268
284
  }
269
285
 
270
- _handleUnknownError (error, message) {
286
+ _handleUnknownError(error, message) {
271
287
  debug(
272
- 'unhandled elasticsearch error (unhandled type: %s): %o',
273
- _.get(error, 'error.meta.statusCode', '<no status code>'),
274
- error);
288
+ "unhandled elasticsearch error (unhandled type: %s): %o",
289
+ _.get(error, "error.meta.statusCode", "<no status code>"),
290
+ error
291
+ );
275
292
 
276
- return kerror.get('unexpected_error', message);
293
+ return kerror.get("unexpected_error", message);
277
294
  }
278
295
  }
279
296
 
@@ -19,105 +19,99 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  class KeywordError extends Error {
25
- constructor (type, name) {
26
- super(`The ${type} "${name}" of Koncorde DSL is not supported for search queries.`);
25
+ constructor(type, name) {
26
+ super(
27
+ `The ${type} "${name}" of Koncorde DSL is not supported for search queries.`
28
+ );
27
29
 
28
30
  this.keyword = { name, type };
29
31
  }
30
32
  }
31
33
 
32
- const KONCORDE_OPERATORS = ['and', 'or', 'not', 'bool'];
34
+ const KONCORDE_OPERATORS = ["and", "or", "not", "bool"];
33
35
 
34
36
  const KONCORDE_CLAUSES_TO_ES = {
35
- equals: content => ({
37
+ equals: (content) => ({
36
38
  term: {
37
- ...content
38
- }
39
+ ...content,
40
+ },
39
41
  }),
40
- exists: field => ({
42
+ exists: (field) => ({
41
43
  exists: {
42
- field
43
- }
44
+ field,
45
+ },
44
46
  }),
45
- geoBoundingBox: content => ({
47
+ geoBoundingBox: (content) => ({
46
48
  geo_bounding_box: {
47
- ...content
48
- }
49
+ ...content,
50
+ },
49
51
  }),
50
- geoDistance: content => ({
52
+ geoDistance: (content) => ({
51
53
  geo_distance: {
52
- ...content
53
- }
54
+ ...content,
55
+ },
54
56
  }),
55
- geoDistanceRange: content => ({
57
+ geoDistanceRange: (content) => ({
56
58
  geo_distance_range: {
57
- ...content
58
- }
59
+ ...content,
60
+ },
59
61
  }),
60
- geoPolygon: content => ({
62
+ geoPolygon: (content) => ({
61
63
  geo_polygon: {
62
- ...content
63
- }
64
+ ...content,
65
+ },
64
66
  }),
65
- ids: content => ({
67
+ ids: (content) => ({
66
68
  ids: {
67
- ...content
68
- }
69
+ ...content,
70
+ },
69
71
  }),
70
- in: content => ({
72
+ in: (content) => ({
71
73
  terms: {
72
- ...content
73
- }
74
+ ...content,
75
+ },
74
76
  }),
75
- missing: field => ({
77
+ missing: (field) => ({
76
78
  bool: {
77
- must_not: [
78
- { exists: { field } }
79
- ]
80
- }
79
+ must_not: [{ exists: { field } }],
80
+ },
81
81
  }),
82
- range: content => ({
82
+ range: (content) => ({
83
83
  range: {
84
- ...content
85
- }
84
+ ...content,
85
+ },
86
86
  }),
87
87
  regexp: undefined,
88
88
  };
89
89
 
90
90
  const KONCORDE_OPERATORS_TO_ES = {
91
- and: content => ({
91
+ and: (content) => ({
92
92
  bool: {
93
- filter: [
94
- ...content
95
- ]
96
- }
93
+ filter: [...content],
94
+ },
97
95
  }),
98
96
  bool: undefined,
99
- not: content => {
97
+ not: (content) => {
100
98
  const [name, value] = Object.entries(content[0])[0];
101
99
 
102
100
  return {
103
101
  bool: {
104
- must_not: [
105
- { [name]: value }
106
- ]
107
- }
102
+ must_not: [{ [name]: value }],
103
+ },
108
104
  };
109
105
  },
110
- or: content => ({
106
+ or: (content) => ({
111
107
  bool: {
112
- should: [
113
- ...content
114
- ]
115
- }
108
+ should: [...content],
109
+ },
116
110
  }),
117
111
  };
118
112
 
119
113
  class QueryTranslator {
120
- translate (filters) {
114
+ translate(filters) {
121
115
  const [name, value] = Object.entries(filters)[0];
122
116
 
123
117
  if (KONCORDE_OPERATORS.includes(name)) {
@@ -127,19 +121,18 @@ class QueryTranslator {
127
121
  return this._translateClause(name, value);
128
122
  }
129
123
 
130
- _translateOperator (operator, operands) {
124
+ _translateOperator(operator, operands) {
131
125
  const converter = KONCORDE_OPERATORS_TO_ES[operator];
132
126
 
133
127
  if (converter === undefined) {
134
- throw new KeywordError('operator', operator);
128
+ throw new KeywordError("operator", operator);
135
129
  }
136
130
 
137
131
  const esOperands = [];
138
132
 
139
- if (operator === 'not') {
133
+ if (operator === "not") {
140
134
  esOperands.push(this.translate(operands));
141
- }
142
- else {
135
+ } else {
143
136
  for (const operand of operands) {
144
137
  esOperands.push(this.translate(operand));
145
138
  }
@@ -148,11 +141,11 @@ class QueryTranslator {
148
141
  return converter(esOperands);
149
142
  }
150
143
 
151
- _translateClause (clause, content) {
144
+ _translateClause(clause, content) {
152
145
  const converter = KONCORDE_CLAUSES_TO_ES[clause];
153
146
 
154
147
  if (converter === undefined) {
155
- throw new KeywordError('clause', clause);
148
+ throw new KeywordError("clause", clause);
156
149
  }
157
150
 
158
151
  return converter(content);
@@ -1,6 +1,6 @@
1
- import { Backend } from '../core/backend';
2
- import { ControllerDefinition } from './ControllerDefinition';
3
- import { EmbeddedSDK } from '../core/shared/sdk/embeddedSdk';
1
+ import { Backend } from "../core/backend";
2
+ import { ControllerDefinition } from "./ControllerDefinition";
3
+ import { EmbeddedSDK } from "../core/shared/sdk/embeddedSdk";
4
4
  /**
5
5
  * Base class to declare a controller class
6
6
  */
@@ -1,5 +1,5 @@
1
- import { JSONObject } from 'kuzzle-sdk';
2
- import { KuzzleRequest } from '../api/request';
1
+ import { JSONObject } from "kuzzle-sdk";
2
+ import { KuzzleRequest } from "../api/request";
3
3
  /**
4
4
  * API controller definition.
5
5
  *
@@ -68,7 +68,7 @@ export declare type HttpRoute = {
68
68
  /**
69
69
  * HTTP verb.
70
70
  */
71
- verb: 'get' | 'head' | 'post' | 'put' | 'delete' | 'patch' | 'options';
71
+ verb: "get" | "head" | "post" | "put" | "delete" | "patch" | "options";
72
72
  /**
73
73
  * Route path.
74
74
  * A route starting with `/` will be prefixed by `/_` otherwise the route
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
- import EventEmitter from 'events';
3
- import Inspector from 'inspector';
2
+ import EventEmitter from "events";
3
+ import Inspector from "inspector";
4
4
  export declare type DebugModuleOptions = {
5
5
  methods?: string[];
6
6
  events?: string[];
@@ -12,7 +12,7 @@ class DebugModule extends events_1.default {
12
12
  this.methods = options.methods || [];
13
13
  this.events = options.events || [];
14
14
  if (!this.name || this.name.length === 0) {
15
- throw new Error('DebugModule should have a name');
15
+ throw new Error("DebugModule should have a name");
16
16
  }
17
17
  if (this.name.charAt(0) !== this.name.charAt(0).toUpperCase()) {
18
18
  throw new Error(`Debug Module name "${name}" should start with an uppercase letter`);
@@ -1,4 +1,4 @@
1
- import { Backend } from '../core/backend';
1
+ import { Backend } from "../core/backend";
2
2
  declare global {
3
3
  namespace NodeJS {
4
4
  interface Global {
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import { Readable } from 'stream';
2
+ import { Readable } from "stream";
3
3
  export declare type HttpStreamProperties = {
4
4
  totalBytes?: number;
5
5
  };
@@ -11,6 +11,7 @@ export declare class HttpStream {
11
11
  readonly stream: Readable;
12
12
  readonly totalBytes: number;
13
13
  private _destroyed;
14
+ private get readableState();
14
15
  constructor(readableStream: Readable, { totalBytes }?: HttpStreamProperties);
15
16
  /**
16
17
  * Returns if the stream is errored
@@ -32,20 +32,22 @@ class HttpStream {
32
32
  this.totalBytes = totalBytes;
33
33
  this._destroyed = readableStream.destroyed;
34
34
  }
35
+ get readableState() {
36
+ // @ts-ignore
37
+ return this.stream._readableState;
38
+ }
35
39
  /**
36
40
  * Returns if the stream is errored
37
41
  */
38
42
  get errored() {
39
- // @ts-ignore
40
- return this.stream._readableState.errored !== null // @ts-ignore
41
- && this.stream._readableState.errored !== undefined;
43
+ return (this.readableState.errored !== null &&
44
+ this.readableState.errored !== undefined);
42
45
  }
43
46
  /**
44
47
  * Get the error
45
48
  */
46
49
  get error() {
47
- // @ts-ignore
48
- return this.stream._readableState.errored;
50
+ return this.readableState.errored;
49
51
  }
50
52
  /**
51
53
  * Returns if the stream has been destroyed
@@ -1,4 +1,4 @@
1
- import { JSONObject } from '../../index';
1
+ import { JSONObject } from "../../index";
2
2
  export declare type InstallationConfig = {
3
3
  id: string;
4
4
  handler: () => Promise<void>;
@@ -1,4 +1,4 @@
1
- import { JSONObject } from 'kuzzle-sdk';
1
+ import { JSONObject } from "kuzzle-sdk";
2
2
  /**
3
3
  * @deprecated Use KDocument instead (See https://docs.kuzzle.io/sdk/js/7/essentials/strong-typing/)
4
4
  */
@@ -1,4 +1,4 @@
1
- import { JSONObject } from 'kuzzle-sdk';
1
+ import { JSONObject } from "kuzzle-sdk";
2
2
  export declare type OpenApiDefinition = {
3
3
  swagger?: string;
4
4
  openapi?: string;