kuzzle 2.56.0 → 2.57.0-beta.2

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 (408) hide show
  1. package/dist/bin/copy-binaries.js +71 -4
  2. package/dist/bin/start-kuzzle-server +191 -97
  3. package/dist/index.d.ts +31 -1
  4. package/dist/index.js +45 -2
  5. package/dist/lib/api/controllers/adminController.d.ts +4 -3
  6. package/dist/lib/api/controllers/adminController.js +1 -2
  7. package/dist/lib/api/controllers/authController.d.ts +37 -16
  8. package/dist/lib/api/controllers/authController.js +88 -39
  9. package/dist/lib/api/controllers/baseController.d.ts +10 -5
  10. package/dist/lib/api/controllers/baseController.js +36 -15
  11. package/dist/lib/api/controllers/bulkController.d.ts +11 -7
  12. package/dist/lib/api/controllers/bulkController.js +28 -5
  13. package/dist/lib/api/controllers/clusterController.d.ts +2 -2
  14. package/dist/lib/api/controllers/clusterController.js +3 -3
  15. package/dist/lib/api/controllers/collectionController.d.ts +57 -21
  16. package/dist/lib/api/controllers/collectionController.js +40 -11
  17. package/dist/lib/api/controllers/debugController.d.ts +1 -1
  18. package/dist/lib/api/controllers/documentController.d.ts +137 -28
  19. package/dist/lib/api/controllers/documentController.js +156 -125
  20. package/dist/lib/api/controllers/index.d.ts +27 -12
  21. package/dist/lib/api/controllers/index.js +28 -13
  22. package/dist/lib/api/controllers/indexController.d.ts +17 -10
  23. package/dist/lib/api/controllers/indexController.js +13 -11
  24. package/dist/lib/api/controllers/memoryStorageController.d.ts +2 -5
  25. package/dist/lib/api/controllers/memoryStorageController.js +199 -127
  26. package/dist/lib/api/controllers/realtimeController.d.ts +19 -9
  27. package/dist/lib/api/controllers/realtimeController.js +8 -4
  28. package/dist/lib/api/controllers/securityController.d.ts +42 -29
  29. package/dist/lib/api/controllers/securityController.js +35 -19
  30. package/dist/lib/api/controllers/serverController.d.ts +114 -19
  31. package/dist/lib/api/controllers/serverController.js +69 -29
  32. package/dist/lib/api/documentExtractor.d.ts +9 -7
  33. package/dist/lib/api/documentExtractor.js +105 -41
  34. package/dist/lib/api/funnel.d.ts +131 -29
  35. package/dist/lib/api/funnel.js +436 -225
  36. package/dist/lib/api/httpRoutes.d.ts +16 -11
  37. package/dist/lib/api/httpRoutes.js +272 -2
  38. package/dist/lib/api/openapi/OpenApiManager.d.ts +1 -1
  39. package/dist/lib/api/openapi/openApiGenerator.d.ts +1 -1
  40. package/dist/lib/api/rateLimiter.d.ts +15 -5
  41. package/dist/lib/api/rateLimiter.js +42 -14
  42. package/dist/lib/api/request/kuzzleRequest.d.ts +83 -12
  43. package/dist/lib/api/request/kuzzleRequest.js +88 -23
  44. package/dist/lib/api/request/requestContext.d.ts +20 -5
  45. package/dist/lib/api/request/requestContext.js +14 -4
  46. package/dist/lib/api/request/requestInput.d.ts +37 -6
  47. package/dist/lib/api/request/requestInput.js +22 -9
  48. package/dist/lib/api/request/requestResponse.d.ts +45 -9
  49. package/dist/lib/api/request/requestResponse.js +34 -3
  50. package/dist/lib/cluster/command.d.ts +131 -37
  51. package/dist/lib/cluster/command.js +243 -71
  52. package/dist/lib/cluster/idCardHandler.d.ts +18 -5
  53. package/dist/lib/cluster/idCardHandler.js +52 -19
  54. package/dist/lib/cluster/index.d.ts +8 -2
  55. package/dist/lib/cluster/index.js +6 -2
  56. package/dist/lib/cluster/node.d.ts +127 -49
  57. package/dist/lib/cluster/node.js +412 -179
  58. package/dist/lib/cluster/protobuf/command.proto +18 -0
  59. package/dist/lib/cluster/protobuf/commandMessages.d.ts +104 -0
  60. package/dist/lib/cluster/protobuf/commandMessages.js +30 -0
  61. package/dist/lib/cluster/protobuf/syncMessages.d.ts +184 -0
  62. package/dist/lib/cluster/protobuf/syncMessages.js +23 -0
  63. package/dist/lib/cluster/publisher.d.ts +118 -78
  64. package/dist/lib/cluster/publisher.js +174 -72
  65. package/dist/lib/cluster/state.d.ts +15 -9
  66. package/dist/lib/cluster/state.js +12 -8
  67. package/dist/lib/cluster/subscriber.d.ts +185 -131
  68. package/dist/lib/cluster/subscriber.js +357 -95
  69. package/dist/lib/cluster/workers/IDCardRenewer.d.ts +39 -8
  70. package/dist/lib/cluster/workers/IDCardRenewer.js +88 -23
  71. package/dist/lib/config/default.config.d.ts +2 -2
  72. package/dist/lib/config/default.config.js +10 -3
  73. package/dist/lib/config/documentEventAliases.d.ts +1 -1
  74. package/dist/lib/config/index.d.ts +2 -5
  75. package/dist/lib/config/index.js +30 -17
  76. package/dist/lib/core/auth/formatProcessing.d.ts +3 -3
  77. package/dist/lib/core/auth/passportResponse.d.ts +1 -1
  78. package/dist/lib/core/auth/passportWrapper.d.ts +1 -1
  79. package/dist/lib/core/auth/passportWrapper.js +14 -13
  80. package/dist/lib/core/auth/tokenManager.d.ts +24 -3
  81. package/dist/lib/core/auth/tokenManager.js +47 -19
  82. package/dist/lib/core/backend/applicationManager.d.ts +2 -2
  83. package/dist/lib/core/backend/backend.d.ts +16 -5
  84. package/dist/lib/core/backend/backend.js +14 -6
  85. package/dist/lib/core/backend/backendCluster.d.ts +1 -1
  86. package/dist/lib/core/backend/backendConfig.d.ts +17 -5
  87. package/dist/lib/core/backend/backendConfig.js +1 -0
  88. package/dist/lib/core/backend/backendController.d.ts +1 -1
  89. package/dist/lib/core/backend/backendController.js +8 -1
  90. package/dist/lib/core/backend/backendErrors.d.ts +15 -8
  91. package/dist/lib/core/backend/backendErrors.js +5 -0
  92. package/dist/lib/core/backend/backendHook.d.ts +1 -1
  93. package/dist/lib/core/backend/backendImport.d.ts +1 -1
  94. package/dist/lib/core/backend/backendOpenApi.d.ts +3 -2
  95. package/dist/lib/core/backend/backendPipe.d.ts +1 -1
  96. package/dist/lib/core/backend/backendPipe.js +9 -1
  97. package/dist/lib/core/backend/backendPlugin.d.ts +2 -2
  98. package/dist/lib/core/backend/backendSubscription.d.ts +2 -2
  99. package/dist/lib/core/backend/backendVault.d.ts +1 -1
  100. package/dist/lib/core/backend/backendVault.js +8 -1
  101. package/dist/lib/core/cache/cacheEngine.d.ts +7 -4
  102. package/dist/lib/core/cache/cacheEngine.js +25 -8
  103. package/dist/lib/core/debug/kuzzleDebugger.d.ts +2 -1
  104. package/dist/lib/core/debug/kuzzleDebugger.js +31 -17
  105. package/dist/lib/core/network/accessLogger.d.ts +33 -18
  106. package/dist/lib/core/network/accessLogger.js +135 -73
  107. package/dist/lib/core/network/clientConnection.d.ts +13 -11
  108. package/dist/lib/core/network/clientConnection.js +33 -9
  109. package/dist/lib/core/network/context.d.ts +17 -22
  110. package/dist/lib/core/network/context.js +43 -26
  111. package/dist/lib/core/network/entryPoint.d.ts +38 -16
  112. package/dist/lib/core/network/entryPoint.js +119 -48
  113. package/dist/lib/core/network/httpRouter/index.d.ts +20 -50
  114. package/dist/lib/core/network/httpRouter/index.js +61 -75
  115. package/dist/lib/core/network/httpRouter/routeHandler.d.ts +17 -32
  116. package/dist/lib/core/network/httpRouter/routeHandler.js +26 -36
  117. package/dist/lib/core/network/httpRouter/routePart.d.ts +9 -18
  118. package/dist/lib/core/network/httpRouter/routePart.js +61 -43
  119. package/dist/lib/core/network/httpRouter/routeTypes.d.ts +3 -0
  120. package/dist/lib/core/network/httpRouter/routeTypes.js +23 -0
  121. package/dist/lib/core/network/networkEntryPoint.d.ts +20 -0
  122. package/dist/lib/core/network/networkEntryPoint.js +23 -0
  123. package/dist/lib/core/network/protocolManifest.d.ts +5 -4
  124. package/dist/lib/core/network/protocolManifest.js +6 -3
  125. package/dist/lib/core/network/protocols/httpMessage.d.ts +25 -18
  126. package/dist/lib/core/network/protocols/httpMessage.js +14 -11
  127. package/dist/lib/core/network/protocols/httpwsProtocol.d.ts +84 -93
  128. package/dist/lib/core/network/protocols/httpwsProtocol.js +284 -129
  129. package/dist/lib/core/network/protocols/internalProtocol.d.ts +26 -15
  130. package/dist/lib/core/network/protocols/internalProtocol.js +17 -16
  131. package/dist/lib/core/network/protocols/mqttProtocol.d.ts +56 -32
  132. package/dist/lib/core/network/protocols/mqttProtocol.js +91 -44
  133. package/dist/lib/core/network/protocols/protocol.d.ts +85 -21
  134. package/dist/lib/core/network/protocols/protocol.js +83 -27
  135. package/dist/lib/core/network/router.d.ts +13 -22
  136. package/dist/lib/core/network/router.js +59 -46
  137. package/dist/lib/core/plugin/plugin.d.ts +57 -51
  138. package/dist/lib/core/plugin/plugin.js +218 -103
  139. package/dist/lib/core/plugin/pluginContext.d.ts +54 -11
  140. package/dist/lib/core/plugin/pluginContext.js +99 -58
  141. package/dist/lib/core/plugin/pluginManifest.d.ts +6 -2
  142. package/dist/lib/core/plugin/pluginManifest.js +18 -11
  143. package/dist/lib/core/plugin/pluginRepository.d.ts +35 -44
  144. package/dist/lib/core/plugin/pluginRepository.js +35 -50
  145. package/dist/lib/core/plugin/pluginsManager.d.ts +128 -46
  146. package/dist/lib/core/plugin/pluginsManager.js +468 -231
  147. package/dist/lib/core/plugin/privilegedContext.d.ts +4 -9
  148. package/dist/lib/core/plugin/privilegedContext.js +5 -10
  149. package/dist/lib/core/realtime/actionEnum.d.ts +12 -21
  150. package/dist/lib/core/realtime/actionEnum.js +6 -7
  151. package/dist/lib/core/realtime/channel.d.ts +11 -5
  152. package/dist/lib/core/realtime/channel.js +17 -2
  153. package/dist/lib/core/realtime/connectionRooms.d.ts +2 -2
  154. package/dist/lib/core/realtime/hotelClerk.d.ts +12 -6
  155. package/dist/lib/core/realtime/hotelClerk.js +29 -11
  156. package/dist/lib/core/realtime/index.d.ts +8 -3
  157. package/dist/lib/core/realtime/index.js +12 -5
  158. package/dist/lib/core/realtime/notification/document.d.ts +54 -25
  159. package/dist/lib/core/realtime/notification/document.js +10 -13
  160. package/dist/lib/core/realtime/notification/index.d.ts +9 -3
  161. package/dist/lib/core/realtime/notification/index.js +10 -4
  162. package/dist/lib/core/realtime/notification/server.d.ts +7 -10
  163. package/dist/lib/core/realtime/notification/server.js +4 -7
  164. package/dist/lib/core/realtime/notification/user.d.ts +45 -21
  165. package/dist/lib/core/realtime/notification/user.js +8 -9
  166. package/dist/lib/core/realtime/notifier.d.ts +52 -40
  167. package/dist/lib/core/realtime/notifier.js +60 -25
  168. package/dist/lib/core/realtime/room.d.ts +1 -1
  169. package/dist/lib/core/realtime/subscription.d.ts +11 -6
  170. package/dist/lib/core/realtime/subscription.js +5 -1
  171. package/dist/lib/core/security/index.d.ts +14 -6
  172. package/dist/lib/core/security/index.js +27 -13
  173. package/dist/lib/core/security/profileRepository.d.ts +24 -19
  174. package/dist/lib/core/security/profileRepository.js +23 -10
  175. package/dist/lib/core/security/roleRepository.d.ts +60 -23
  176. package/dist/lib/core/security/roleRepository.js +122 -53
  177. package/dist/lib/core/security/securityLoader.d.ts +33 -18
  178. package/dist/lib/core/security/securityLoader.js +43 -16
  179. package/dist/lib/core/security/tokenRepository.d.ts +21 -7
  180. package/dist/lib/core/security/tokenRepository.js +50 -23
  181. package/dist/lib/core/security/userRepository.d.ts +44 -21
  182. package/dist/lib/core/security/userRepository.js +59 -19
  183. package/dist/lib/core/shared/KoncordeWrapper.d.ts +1 -1
  184. package/dist/lib/core/shared/ObjectRepository.d.ts +80 -18
  185. package/dist/lib/core/shared/ObjectRepository.js +57 -29
  186. package/dist/lib/core/shared/abstractManifest.d.ts +21 -8
  187. package/dist/lib/core/shared/abstractManifest.js +57 -17
  188. package/dist/lib/core/shared/sdk/embeddedSdk.d.ts +3 -1
  189. package/dist/lib/core/shared/sdk/embeddedSdk.js +8 -7
  190. package/dist/lib/core/shared/sdk/funnelProtocol.d.ts +2 -1
  191. package/dist/lib/core/shared/sdk/funnelProtocol.js +12 -3
  192. package/dist/lib/core/shared/sdk/impersonatedSdk.d.ts +11 -5
  193. package/dist/lib/core/shared/sdk/impersonatedSdk.js +22 -9
  194. package/dist/lib/core/shared/store.d.ts +45 -29
  195. package/dist/lib/core/shared/store.js +48 -27
  196. package/dist/lib/core/statistics/statistics.d.ts +1 -1
  197. package/dist/lib/core/storage/clientAdapter.d.ts +39 -21
  198. package/dist/lib/core/storage/clientAdapter.js +88 -48
  199. package/dist/lib/core/storage/indexCache.d.ts +8 -0
  200. package/dist/lib/core/storage/indexCache.js +16 -7
  201. package/dist/lib/core/storage/storageEngine.d.ts +7 -6
  202. package/dist/lib/core/storage/storageEngine.js +11 -8
  203. package/dist/lib/core/validation/baseType.d.ts +22 -22
  204. package/dist/lib/core/validation/baseType.js +11 -26
  205. package/dist/lib/core/validation/specification.d.ts +148 -0
  206. package/dist/lib/core/validation/specification.js +34 -0
  207. package/dist/lib/core/validation/typeOptions.d.ts +62 -0
  208. package/dist/lib/core/validation/typeOptions.js +23 -0
  209. package/dist/lib/core/validation/types/anything.d.ts +3 -6
  210. package/dist/lib/core/validation/types/anything.js +7 -7
  211. package/dist/lib/core/validation/types/boolean.d.ts +5 -12
  212. package/dist/lib/core/validation/types/boolean.js +7 -12
  213. package/dist/lib/core/validation/types/date.d.ts +19 -11
  214. package/dist/lib/core/validation/types/date.js +212 -161
  215. package/dist/lib/core/validation/types/email.d.ts +7 -11
  216. package/dist/lib/core/validation/types/email.js +13 -17
  217. package/dist/lib/core/validation/types/enum.d.ts +7 -11
  218. package/dist/lib/core/validation/types/enum.js +39 -20
  219. package/dist/lib/core/validation/types/geoPoint.d.ts +5 -13
  220. package/dist/lib/core/validation/types/geoPoint.js +10 -15
  221. package/dist/lib/core/validation/types/geoShape.d.ts +22 -21
  222. package/dist/lib/core/validation/types/geoShape.js +113 -129
  223. package/dist/lib/core/validation/types/geoShapeUtils.d.ts +15 -0
  224. package/dist/lib/core/validation/types/geoShapeUtils.js +75 -0
  225. package/dist/lib/core/validation/types/integer.d.ts +7 -5
  226. package/dist/lib/core/validation/types/integer.js +7 -13
  227. package/dist/lib/core/validation/types/ipAddress.d.ts +7 -11
  228. package/dist/lib/core/validation/types/ipAddress.js +13 -17
  229. package/dist/lib/core/validation/types/numeric.d.ts +7 -11
  230. package/dist/lib/core/validation/types/numeric.js +22 -29
  231. package/dist/lib/core/validation/types/object.d.ts +8 -15
  232. package/dist/lib/core/validation/types/object.js +12 -21
  233. package/dist/lib/core/validation/types/string.d.ts +7 -11
  234. package/dist/lib/core/validation/types/string.js +22 -29
  235. package/dist/lib/core/validation/types/url.d.ts +7 -11
  236. package/dist/lib/core/validation/types/url.js +14 -18
  237. package/dist/lib/core/validation/validation.d.ts +119 -80
  238. package/dist/lib/core/validation/validation.js +470 -412
  239. package/dist/lib/core/validation/validationUtils.d.ts +31 -0
  240. package/dist/lib/core/validation/validationUtils.js +190 -0
  241. package/dist/lib/kerror/codes/4-plugin.json +0 -12
  242. package/dist/lib/kerror/codes/index.d.ts +12 -2
  243. package/dist/lib/kerror/codes/index.js +5 -4
  244. package/dist/lib/kerror/errors/badRequestError.d.ts +1 -1
  245. package/dist/lib/kerror/errors/badRequestError.js +1 -1
  246. package/dist/lib/kerror/errors/externalServiceError.d.ts +1 -1
  247. package/dist/lib/kerror/errors/externalServiceError.js +1 -1
  248. package/dist/lib/kerror/errors/forbiddenError.d.ts +1 -1
  249. package/dist/lib/kerror/errors/forbiddenError.js +1 -1
  250. package/dist/lib/kerror/errors/gatewayTimeoutError.d.ts +1 -1
  251. package/dist/lib/kerror/errors/gatewayTimeoutError.js +1 -1
  252. package/dist/lib/kerror/errors/internalError.d.ts +1 -1
  253. package/dist/lib/kerror/errors/internalError.js +1 -1
  254. package/dist/lib/kerror/errors/kuzzleError.d.ts +32 -3
  255. package/dist/lib/kerror/errors/kuzzleError.js +21 -7
  256. package/dist/lib/kerror/errors/multipleErrorsError.d.ts +2 -2
  257. package/dist/lib/kerror/errors/multipleErrorsError.js +2 -2
  258. package/dist/lib/kerror/errors/notFoundError.d.ts +1 -1
  259. package/dist/lib/kerror/errors/notFoundError.js +1 -1
  260. package/dist/lib/kerror/errors/partialError.d.ts +8 -2
  261. package/dist/lib/kerror/errors/partialError.js +22 -9
  262. package/dist/lib/kerror/errors/pluginImplementationError.d.ts +9 -1
  263. package/dist/lib/kerror/errors/pluginImplementationError.js +9 -3
  264. package/dist/lib/kerror/errors/preconditionError.d.ts +1 -1
  265. package/dist/lib/kerror/errors/preconditionError.js +1 -1
  266. package/dist/lib/kerror/errors/serviceUnavailableError.d.ts +1 -1
  267. package/dist/lib/kerror/errors/serviceUnavailableError.js +1 -1
  268. package/dist/lib/kerror/errors/sizeLimitError.d.ts +1 -1
  269. package/dist/lib/kerror/errors/sizeLimitError.js +1 -1
  270. package/dist/lib/kerror/errors/tooManyRequestsError.d.ts +1 -1
  271. package/dist/lib/kerror/errors/tooManyRequestsError.js +1 -1
  272. package/dist/lib/kerror/errors/unauthorizedError.d.ts +1 -1
  273. package/dist/lib/kerror/errors/unauthorizedError.js +1 -1
  274. package/dist/lib/kerror/index.d.ts +19 -13
  275. package/dist/lib/kerror/index.js +60 -19
  276. package/dist/lib/kuzzle/Logger.d.ts +2 -2
  277. package/dist/lib/kuzzle/dumpGenerator.d.ts +12 -8
  278. package/dist/lib/kuzzle/dumpGenerator.js +130 -62
  279. package/dist/lib/kuzzle/event/KuzzleEventEmitter.d.ts +18 -9
  280. package/dist/lib/kuzzle/event/KuzzleEventEmitter.js +45 -18
  281. package/dist/lib/kuzzle/event/pipeRunner.d.ts +37 -16
  282. package/dist/lib/kuzzle/event/pipeRunner.js +73 -26
  283. package/dist/lib/kuzzle/event/waterfall.d.ts +11 -1
  284. package/dist/lib/kuzzle/event/waterfall.js +38 -13
  285. package/dist/lib/kuzzle/internalIndexHandler.d.ts +11 -174
  286. package/dist/lib/kuzzle/internalIndexHandler.js +58 -29
  287. package/dist/lib/kuzzle/kuzzle.d.ts +25 -10
  288. package/dist/lib/kuzzle/kuzzle.js +74 -17
  289. package/dist/lib/kuzzle/kuzzleStateEnum.d.ts +16 -12
  290. package/dist/lib/kuzzle/kuzzleStateEnum.js +5 -7
  291. package/dist/lib/kuzzle/vault.d.ts +5 -1
  292. package/dist/lib/kuzzle/vault.js +29 -17
  293. package/dist/lib/model/security/profile.d.ts +34 -5
  294. package/dist/lib/model/security/profile.js +6 -5
  295. package/dist/lib/model/security/rights.d.ts +12 -4
  296. package/dist/lib/model/security/rights.js +7 -6
  297. package/dist/lib/model/security/role.d.ts +8 -4
  298. package/dist/lib/model/security/role.js +12 -6
  299. package/dist/lib/model/security/token.d.ts +8 -0
  300. package/dist/lib/model/security/user.d.ts +8 -2
  301. package/dist/lib/model/security/user.js +7 -4
  302. package/dist/lib/model/storage/apiKey.d.ts +55 -26
  303. package/dist/lib/model/storage/apiKey.js +97 -24
  304. package/dist/lib/model/storage/baseModel.d.ts +77 -66
  305. package/dist/lib/model/storage/baseModel.js +21 -34
  306. package/dist/lib/service/cache/redis.d.ts +53 -36
  307. package/dist/lib/service/cache/redis.js +148 -71
  308. package/dist/lib/service/service.d.ts +14 -19
  309. package/dist/lib/service/service.js +41 -22
  310. package/dist/lib/service/storage/7/elasticsearch.d.ts +136 -93
  311. package/dist/lib/service/storage/7/elasticsearch.js +218 -165
  312. package/dist/lib/service/storage/7/esWrapper.d.ts +30 -13
  313. package/dist/lib/service/storage/7/esWrapper.js +58 -37
  314. package/dist/lib/service/storage/8/elasticsearch.d.ts +153 -119
  315. package/dist/lib/service/storage/8/elasticsearch.js +286 -213
  316. package/dist/lib/service/storage/8/esWrapper.d.ts +30 -13
  317. package/dist/lib/service/storage/8/esWrapper.js +59 -38
  318. package/dist/lib/service/storage/commons/queryTranslator.d.ts +3 -3
  319. package/dist/lib/service/storage/commons/queryTranslator.js +71 -35
  320. package/dist/lib/types/ApiRoute.d.ts +12 -0
  321. package/dist/lib/types/ApiRoute.js +23 -0
  322. package/dist/lib/types/ClientConnection.d.ts +1 -1
  323. package/dist/lib/types/EventHandler.d.ts +10 -0
  324. package/dist/lib/types/Global.d.ts +8 -3
  325. package/dist/lib/types/HttpMessage.d.ts +2 -2
  326. package/dist/lib/types/HttpStream.d.ts +1 -1
  327. package/dist/lib/types/HttpStream.js +3 -1
  328. package/dist/lib/types/JSONObject.d.ts +9 -0
  329. package/dist/lib/types/JSONObject.js +23 -0
  330. package/dist/lib/types/Kuzzle.d.ts +5 -3
  331. package/dist/lib/types/KuzzleDocument.d.ts +1 -1
  332. package/dist/lib/types/KuzzleWebSocket.d.ts +24 -0
  333. package/dist/lib/types/KuzzleWebSocket.js +23 -0
  334. package/dist/lib/types/OpenApiDefinition.d.ts +1 -1
  335. package/dist/lib/types/Plugin.d.ts +33 -8
  336. package/dist/lib/types/PluginInstance.d.ts +67 -0
  337. package/dist/lib/types/PluginInstance.js +23 -0
  338. package/dist/lib/types/Policy.d.ts +1 -1
  339. package/dist/lib/types/Target.d.ts +8 -0
  340. package/dist/lib/types/Token.d.ts +14 -2
  341. package/dist/lib/types/config/HttpConfiguration.d.ts +5 -0
  342. package/dist/lib/types/config/KuzzleConfiguration.d.ts +102 -1
  343. package/dist/lib/types/config/PluginsConfiguration.d.ts +3 -2
  344. package/dist/lib/types/config/SecurityConfiguration.d.ts +6 -2
  345. package/dist/lib/types/config/ServerConfiguration.d.ts +2 -2
  346. package/dist/lib/types/config/ServicesConfiguration.d.ts +1 -1
  347. package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.d.ts +131 -0
  348. package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.js +3 -0
  349. package/dist/lib/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +2 -106
  350. package/dist/lib/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +2 -26
  351. package/dist/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +3 -0
  352. package/dist/lib/types/controllers/Controller.d.ts +12 -3
  353. package/dist/lib/types/controllers/ControllerDefinition.d.ts +2 -2
  354. package/dist/lib/types/controllers/{adminControlller.type.js → adminController.type.js} +1 -1
  355. package/dist/lib/types/controllers/authController.type.d.ts +2 -2
  356. package/dist/lib/types/core/auth/formatProcessing.type.d.ts +7 -1
  357. package/dist/lib/types/errors/ErrorDomains.d.ts +1 -1
  358. package/dist/lib/types/events/EventGenericDocument.d.ts +10 -9
  359. package/dist/lib/types/events/EventProtocol.d.ts +4 -4
  360. package/dist/lib/types/index.d.ts +7 -0
  361. package/dist/lib/types/index.js +7 -0
  362. package/dist/lib/types/shared/StoreCollectionsDefinition.d.ts +1 -1
  363. package/dist/lib/types/storage/7/Elasticsearch.d.ts +62 -13
  364. package/dist/lib/types/storage/8/Elasticsearch.d.ts +62 -13
  365. package/dist/lib/util/Inflector.d.ts +4 -1
  366. package/dist/lib/util/Inflector.js +0 -3
  367. package/dist/lib/util/assertType.d.ts +24 -27
  368. package/dist/lib/util/assertType.js +28 -39
  369. package/dist/lib/util/async.js +19 -6
  370. package/dist/lib/util/asyncStore.js +1 -1
  371. package/dist/lib/util/bufferedPassThrough.d.ts +9 -0
  372. package/dist/lib/util/bufferedPassThrough.js +27 -13
  373. package/dist/lib/util/bytes.d.ts +1 -1
  374. package/dist/lib/util/bytes.js +6 -2
  375. package/dist/lib/util/debug.d.ts +3 -1
  376. package/dist/lib/util/debug.js +42 -10
  377. package/dist/lib/util/deprecate.d.ts +9 -1
  378. package/dist/lib/util/deprecate.js +10 -6
  379. package/dist/lib/util/didYouMean.d.ts +2 -1
  380. package/dist/lib/util/didYouMean.js +8 -4
  381. package/dist/lib/util/distributedLock.d.ts +56 -0
  382. package/dist/lib/util/distributedLock.js +166 -0
  383. package/dist/lib/util/dump-collection.d.ts +1 -1
  384. package/dist/lib/util/dump-collection.js +4 -5
  385. package/dist/lib/util/extractFields.d.ts +15 -11
  386. package/dist/lib/util/extractFields.js +8 -9
  387. package/dist/lib/util/koncordeCompat.d.ts +2 -2
  388. package/dist/lib/util/koncordeCompat.js +33 -0
  389. package/dist/lib/util/memoize.d.ts +7 -6
  390. package/dist/lib/util/memoize.js +3 -3
  391. package/dist/lib/util/mutex.d.ts +22 -2
  392. package/dist/lib/util/mutex.js +39 -1
  393. package/dist/lib/util/name-generator.js +14 -2
  394. package/dist/lib/util/promback.d.ts +20 -11
  395. package/dist/lib/util/promback.js +14 -7
  396. package/dist/lib/util/requestAssertions.d.ts +30 -10
  397. package/dist/lib/util/requestAssertions.js +125 -121
  398. package/dist/lib/util/safeObject.d.ts +3 -3
  399. package/dist/lib/util/safeObject.js +7 -3
  400. package/dist/lib/util/stackTrace.d.ts +13 -5
  401. package/dist/lib/util/stackTrace.js +17 -12
  402. package/dist/lib/util/thrown.d.ts +13 -0
  403. package/dist/lib/util/thrown.js +46 -0
  404. package/dist/package.json +26 -19
  405. package/package.json +26 -19
  406. package/dist/lib/util/wildcard.d.ts +0 -1
  407. package/dist/lib/util/wildcard.js +0 -46
  408. /package/dist/lib/types/controllers/{adminControlller.type.d.ts → adminController.type.d.ts} +0 -0
@@ -1,19 +1,36 @@
1
- export = ESWrapper;
1
+ import type { Client } from "sdk-es8";
2
+ import type { JSONObject } from "../../../types/JSONObject";
3
+ import { KuzzleError } from "../../../kerror/errors";
4
+ /**
5
+ * What the Elasticsearch client throws: an Error, carrying the server's
6
+ * response on `meta` for the ones that came back from the cluster. `catch`
7
+ * hands callers `unknown`, and this is the shape every reader below assumes.
8
+ */
9
+ type ThrownESError = Error & {
10
+ meta?: JSONObject;
11
+ body?: JSONObject;
12
+ };
13
+ /**
14
+ * One that came back from the cluster rather than from the client itself, so
15
+ * its `meta` is present — which is what `formatESError` checks before handing
16
+ * it to the handlers below.
17
+ */
18
+ type ThrownESResponseError = ThrownESError & {
19
+ meta: JSONObject;
20
+ };
2
21
  declare class ESWrapper {
3
- constructor(client: any);
4
- client: any;
22
+ client: Client;
23
+ constructor(client: Client);
5
24
  /**
6
25
  * Transforms raw ES errors into a normalized Kuzzle version
7
26
  *
8
- * @param {Error} error
9
- * @returns {KuzzleError}
27
+ * @param error
10
28
  */
11
- formatESError(error: Error): KuzzleError;
12
- reject(error: any): Bluebird<never>;
13
- _handleConflictError(error: any, message: any): KuzzleError;
14
- _handleNotFoundError(error: any, message: any): KuzzleError;
15
- _handleBadRequestError(error: any, message: any): KuzzleError;
16
- _handleUnknownError(error: any, message: any): KuzzleError;
29
+ formatESError(error: unknown): KuzzleError;
30
+ reject(error: unknown): Promise<never>;
31
+ _handleConflictError(error: ThrownESResponseError, message: string): KuzzleError;
32
+ _handleNotFoundError(error: ThrownESResponseError, message: string): KuzzleError;
33
+ _handleBadRequestError(error: ThrownESResponseError, message: string): KuzzleError;
34
+ _handleUnknownError(error: ThrownESError, message: string): KuzzleError;
17
35
  }
18
- import { KuzzleError } from "../../../kerror/errors/kuzzleError";
19
- import Bluebird = require("bluebird");
36
+ export = ESWrapper;
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /*
2
3
  * Kuzzle, a backend software, self-hostable and ready to use
3
4
  * to power modern apps
@@ -18,18 +19,26 @@
18
19
  * See the License for the specific language governing permissions and
19
20
  * limitations under the License.
20
21
  */
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
21
25
  /* eslint sort-keys: 0 */
22
- "use strict";
23
- const Bluebird = require("bluebird");
24
- const _ = require("lodash");
25
- const es = require("sdk-es8");
26
- const { KuzzleError } = require("../../../kerror/errors");
27
- const debug = require("../../../util/debug")("kuzzle:services:storage:ESCommon");
28
- const kerror = require("../../../kerror").wrap("services", "storage");
26
+ const node_util_1 = require("node:util");
27
+ const bluebird_1 = __importDefault(require("bluebird"));
28
+ const get_1 = __importDefault(require("lodash/get"));
29
+ const sdk_es8_1 = require("sdk-es8");
30
+ const errors_1 = require("../../../kerror/errors");
31
+ const debug_1 = __importDefault(require("../../../util/debug"));
32
+ const kerror_1 = require("../../../kerror");
33
+ const debug = (0, debug_1.default)("kuzzle:services:storage:ESCommon");
34
+ const kerror = (0, kerror_1.wrap)("services", "storage");
35
+ function isResponseError(error) {
36
+ return Boolean(error.meta);
37
+ }
29
38
  const errorMessagesMapping = [
30
39
  {
31
40
  regex: /^\[es_rejected_execution_exception] rejected execution .*? on EsThreadPoolExecutor\[(.*?), .*$/,
32
- subCode: "too_many_operations",
41
+ subcode: "too_many_operations",
33
42
  getPlaceholders: (esError, matches) => [matches[1]],
34
43
  },
35
44
  {
@@ -89,7 +98,7 @@ const errorMessagesMapping = [
89
98
  },
90
99
  {
91
100
  // [index_not_found_exception] no such index, with { resource.type=index_or_alias & resource.id=foso & index=foso }
92
- regex: /^no such index \[([%&])(.*)\.(.*)\]$/,
101
+ regex: /^no such index \[([%&])([^\]]*)\.([^.\]]*)\]$/,
93
102
  subcode: "unknown_collection",
94
103
  getPlaceholders: (esError, matches) => [matches[2], matches[3]],
95
104
  },
@@ -117,14 +126,14 @@ const errorMessagesMapping = [
117
126
  getPlaceholders: (esError, matches) => [matches[1]],
118
127
  },
119
128
  {
120
- // mapping set to strict, dynamic introduction of [lehuong] within [_doc] is not allowed
129
+ // [_doc] mapping set to strict, dynamic introduction of [lehuong] within [_doc] is not allowed
121
130
  regex: /^\[(.+)\] mapping set to strict, dynamic introduction of \[(.+)\] within \[.+\] is not allowed/,
122
131
  subcode: "strict_mapping_rejection",
123
132
  getPlaceholders: (esError, matches) => {
124
133
  // "/%26index.collection/_doc"
125
- const esPath = esError.meta.meta.request.params.path;
134
+ const esPath = (0, get_1.default)(esError, "meta.meta.request.params.path", "");
126
135
  // keep only "index"
127
- const index = esPath.split(".")[0].split("%26")[1];
136
+ const index = esPath.split(".")[0]?.split("%26")[1];
128
137
  // keep only "collection"
129
138
  const collection = esPath.substr(esPath.indexOf(".") + 1).split("/")[0];
130
139
  return [matches[2], index, collection];
@@ -150,47 +159,58 @@ class ESWrapper {
150
159
  /**
151
160
  * Transforms raw ES errors into a normalized Kuzzle version
152
161
  *
153
- * @param {Error} error
154
- * @returns {KuzzleError}
162
+ * @param error
155
163
  */
156
164
  formatESError(error) {
157
- if (error instanceof KuzzleError) {
165
+ if (error instanceof errors_1.KuzzleError) {
158
166
  return error;
159
167
  }
168
+ // `catch` answers `unknown`, and a rejected client promise can in principle
169
+ // carry anything. Everything below reads an Error's shape, so that is what
170
+ // it gets — without asserting that whatever arrived already was one.
171
+ // `inspect`, not `String`: a thrown object stringifies to "[object
172
+ // Object]", which is the one thing the message must not say.
173
+ const esError = error instanceof Error ? error : new Error((0, node_util_1.inspect)(error));
160
174
  global.kuzzle.emit("services:storage:error", {
161
- message: `Elasticsearch Client error: ${error.message}`,
175
+ message: `Elasticsearch Client error: ${esError.message}`,
162
176
  // /!\ not all ES error classes have a "meta" property
163
- meta: error.meta || null,
164
- stack: error.stack,
177
+ meta: esError.meta || null,
178
+ stack: esError.stack,
165
179
  });
166
- if (error instanceof es.errors.NoLivingConnectionsError) {
180
+ if (error instanceof sdk_es8_1.errors.NoLivingConnectionsError) {
167
181
  throw kerror.get("not_connected");
168
182
  }
169
- const message = _.get(error, "meta.body.error.reason", error.message);
183
+ const message = (0, get_1.default)(esError, "meta.body.error.reason", esError.message);
170
184
  // Try to match a known elasticsearch error
171
185
  for (const betterError of errorMessagesMapping) {
172
186
  const matches = message.match(betterError.regex);
173
187
  if (matches) {
174
- return kerror.get(betterError.subcode, ...betterError.getPlaceholders(error, matches));
188
+ return kerror.get(betterError.subcode, ...betterError.getPlaceholders(esError, matches));
175
189
  }
176
190
  }
177
191
  // Try to match using error codes
178
- if (error.meta) {
179
- switch (error.meta.statusCode) {
192
+ // `meta` is what tells a cluster response from a client-side failure, so
193
+ // the three handlers below are declared to require it rather than
194
+ // re-checking it four times each. The error itself is handed over, never a
195
+ // copy: the client's `ResponseError` exposes `body` as a prototype getter,
196
+ // which a spread does not carry — and without it every missing document
197
+ // answered `unexpected_not_found` instead of `not_found`.
198
+ if (isResponseError(esError)) {
199
+ switch (esError.meta.statusCode) {
180
200
  case 400:
181
- return this._handleBadRequestError(error, message);
201
+ return this._handleBadRequestError(esError, message);
182
202
  case 404:
183
- return this._handleNotFoundError(error, message);
203
+ return this._handleNotFoundError(esError, message);
184
204
  case 409:
185
- return this._handleConflictError(error, message);
205
+ return this._handleConflictError(esError, message);
186
206
  default:
187
207
  break;
188
208
  }
189
209
  }
190
- return this._handleUnknownError(error, message);
210
+ return this._handleUnknownError(esError, message);
191
211
  }
192
212
  reject(error) {
193
- return Bluebird.reject(this.formatESError(error));
213
+ return bluebird_1.default.reject(this.formatESError(error));
194
214
  }
195
215
  _handleConflictError(error, message) {
196
216
  debug('unhandled "Conflict" elasticsearch error: %a', error);
@@ -198,46 +218,47 @@ class ESWrapper {
198
218
  }
199
219
  _handleNotFoundError(error, message) {
200
220
  let errorMessage = message;
201
- if (!error.body._index) {
221
+ const indice = (0, get_1.default)(error, "body._index");
222
+ if (!indice) {
202
223
  return kerror.get("unexpected_not_found", errorMessage);
203
224
  }
204
225
  // _index= "&nyc-open-data.yellow-taxi"
205
- const index = error.body._index.split(".")[0].slice(1);
206
- const collection = error.body._index.split(".")[1];
226
+ const index = indice.split(".")[0]?.slice(1);
227
+ const collection = indice.split(".")[1];
207
228
  // 404 on a GET document
208
- if (error.body.found === false) {
229
+ if (error.body?.found === false) {
209
230
  return kerror.get("not_found", error.body._id, index, collection);
210
231
  }
211
232
  // 404 on DELETE document (ES error payloads are so cool!)
212
233
  if (error.meta.body._id) {
213
234
  return kerror.get("not_found", error.meta.body._id, index, collection);
214
235
  }
215
- if (error.meta.body && error.meta.body.error) {
236
+ if (error.meta.body?.error) {
216
237
  errorMessage = error.meta.body.error
217
238
  ? `${error.meta.body.error.reason}: ${error.meta.body.error["resource.id"]}`
218
- : `${error.message}: ${error.body._id}`;
239
+ : `${error.message}: ${error.body?._id}`;
219
240
  }
220
241
  debug('unhandled "NotFound" elasticsearch error: %a', error);
221
242
  return kerror.get("unexpected_not_found", errorMessage);
222
243
  }
223
244
  _handleBadRequestError(error, message) {
224
245
  let errorMessage = message;
225
- if (error.meta.body && error.meta.body.error) {
246
+ if (error.meta.body?.error) {
226
247
  errorMessage = error.meta.body.error.root_cause
227
248
  ? error.meta.body.error.root_cause[0].reason
228
249
  : error.meta.body.error.reason;
229
250
  // empty query throws exception with ES 7
230
251
  if (error.meta.body.error.type === "parsing_exception" &&
231
- _.get(error, "meta.body.error.caused_by.type") ===
252
+ (0, get_1.default)(error, "meta.body.error.caused_by.type") ===
232
253
  "illegal_argument_exception") {
233
254
  errorMessage = error.meta.body.error.caused_by.reason;
234
255
  }
235
256
  }
236
- debug('unhandled "BadRequest" elasticsearch error: %a', _.get(error, "meta.body.error.reason", error.message));
257
+ debug('unhandled "BadRequest" elasticsearch error: %a', (0, get_1.default)(error, "meta.body.error.reason", error.message));
237
258
  return kerror.get("unexpected_bad_request", errorMessage);
238
259
  }
239
260
  _handleUnknownError(error, message) {
240
- debug("unhandled elasticsearch error (unhandled type: %s): %o", _.get(error, "error.meta.statusCode", "<no status code>"), error);
261
+ debug("unhandled elasticsearch error (unhandled type: %s): %o", (0, get_1.default)(error, "error.meta.statusCode", "<no status code>"), error);
241
262
  return kerror.get("unexpected_error", message);
242
263
  }
243
264
  }
@@ -1,5 +1,5 @@
1
1
  export declare class QueryTranslator {
2
- translate(filters: any): any;
3
- _translateOperator(operator: any, operands: any): any;
4
- _translateClause(clause: any, content: any): any;
2
+ translate(filters: unknown): any;
3
+ _translateOperator(operator: unknown, operands: unknown): any;
4
+ _translateClause(clause: unknown, content: unknown): any;
5
5
  }
@@ -1,27 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.QueryTranslator = void 0;
4
- /*
5
- * Kuzzle, a backend software, self-hostable and ready to use
6
- * to power modern apps
7
- *
8
- * Copyright 2015-2022 Kuzzle
9
- * mailto: support AT kuzzle.io
10
- * website: http://kuzzle.io
11
- *
12
- * Licensed under the Apache License, Version 2.0 (the "License");
13
- * you may not use this file except in compliance with the License.
14
- * You may obtain a copy of the License at
15
- *
16
- * https://www.apache.org/licenses/LICENSE-2.0
17
- *
18
- * Unless required by applicable law or agreed to in writing, software
19
- * distributed under the License is distributed on an "AS IS" BASIS,
20
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- * See the License for the specific language governing permissions and
22
- * limitations under the License.
23
- */
24
4
  const kerror_1 = require("../../../kerror");
5
+ const safeObject_1 = require("../../../util/safeObject");
6
+ /**
7
+ * The payload of a clause that is the same Elasticsearch query under another
8
+ * name, and so is spread into it verbatim. Only `exists` and `missing` accept
9
+ * the string form.
10
+ */
11
+ function asClauseObject(content) {
12
+ if (!(0, safeObject_1.isPlainObject)(content)) {
13
+ throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", `Invalid clause payload: expected an object, got ${typeof content}`);
14
+ }
15
+ return content;
16
+ }
17
+ /**
18
+ * A Koncorde filter, as `translate` recurses over it: one keyword and its
19
+ * payload. Anything else is a malformed filter, and the translation error
20
+ * this module already raises for a malformed `exists` path says so.
21
+ */
22
+ function asFilter(value) {
23
+ if (!(0, safeObject_1.isPlainObject)(value)) {
24
+ throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", `Invalid operand: expected a filter object, got ${typeof value}`);
25
+ }
26
+ return value;
27
+ }
28
+ function asFilterList(value) {
29
+ if (!Array.isArray(value)) {
30
+ throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", `Invalid operands: expected a list of filters, got ${typeof value}`);
31
+ }
32
+ return value.map(asFilter);
33
+ }
25
34
  class KeywordError extends Error {
26
35
  constructor(type, name) {
27
36
  super(`The ${type} "${name}" of Koncorde DSL is not supported for search queries.`);
@@ -55,12 +64,16 @@ function parseKoncordePath(path) {
55
64
  const KONCORDE_CLAUSES_TO_ES = {
56
65
  equals: (content) => ({
57
66
  term: {
58
- ...content,
67
+ ...asClauseObject(content),
59
68
  },
60
69
  }),
61
70
  exists: (field) => {
62
71
  // Support old syntax { exists: { field: "path" } } and { exists: "path" }
63
- const parsedInfo = parseKoncordePath(field.field || field);
72
+ const declared = (0, safeObject_1.isPlainObject)(field) ? field.field : field;
73
+ if (typeof declared !== "string") {
74
+ throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", `Invalid exists path: expected a string, got ${typeof declared}`);
75
+ }
76
+ const parsedInfo = parseKoncordePath(declared);
64
77
  // If we have a value, we need to use a range query to be sure that the value is the same
65
78
  if (parsedInfo.value) {
66
79
  return {
@@ -91,32 +104,32 @@ const KONCORDE_CLAUSES_TO_ES = {
91
104
  },
92
105
  geoBoundingBox: (content) => ({
93
106
  geo_bounding_box: {
94
- ...content,
107
+ ...asClauseObject(content),
95
108
  },
96
109
  }),
97
110
  geoDistance: (content) => ({
98
111
  geo_distance: {
99
- ...content,
112
+ ...asClauseObject(content),
100
113
  },
101
114
  }),
102
115
  geoDistanceRange: (content) => ({
103
116
  geo_distance_range: {
104
- ...content,
117
+ ...asClauseObject(content),
105
118
  },
106
119
  }),
107
120
  geoPolygon: (content) => ({
108
121
  geo_polygon: {
109
- ...content,
122
+ ...asClauseObject(content),
110
123
  },
111
124
  }),
112
125
  ids: (content) => ({
113
126
  ids: {
114
- ...content,
127
+ ...asClauseObject(content),
115
128
  },
116
129
  }),
117
130
  in: (content) => ({
118
131
  terms: {
119
- ...content,
132
+ ...asClauseObject(content),
120
133
  },
121
134
  }),
122
135
  missing: (field) => ({
@@ -126,19 +139,26 @@ const KONCORDE_CLAUSES_TO_ES = {
126
139
  }),
127
140
  range: (content) => ({
128
141
  range: {
129
- ...content,
142
+ ...asClauseObject(content),
130
143
  },
131
144
  }),
132
145
  };
133
146
  const KONCORDE_OPERATORS_TO_ES = {
134
147
  and: (content) => ({
135
148
  bool: {
136
- filter: [...content],
149
+ filter: [...asFilterList(content)],
137
150
  },
138
151
  }),
139
152
  bool: undefined,
140
153
  not: (content) => {
141
- const [name, value] = Object.entries(content[0])[0];
154
+ // `not` is handed the single already-translated filter below, so its
155
+ // first entry is the ES clause to negate.
156
+ const [first] = asFilterList(content);
157
+ const [entry] = Object.entries(asFilter(first));
158
+ if (entry === undefined) {
159
+ throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", "Invalid not operand: the negated filter is empty");
160
+ }
161
+ const [name, value] = entry;
142
162
  return {
143
163
  bool: {
144
164
  must_not: [{ [name]: value }],
@@ -147,13 +167,26 @@ const KONCORDE_OPERATORS_TO_ES = {
147
167
  },
148
168
  or: (content) => ({
149
169
  bool: {
150
- should: [...content],
170
+ should: [...asFilterList(content)],
151
171
  },
152
172
  }),
153
173
  };
174
+ /*
175
+ * The three public methods below keep v2.56.0's declarations — untyped
176
+ * arguments, an `any` answer — as a public overload in front of the typed
177
+ * implementation: a `JSONObject` answer breaks code compiled against that
178
+ * which assigns it to its own query type.
179
+ */
154
180
  class QueryTranslator {
155
181
  translate(filters) {
156
- const [name, value] = Object.entries(filters)[0];
182
+ const [entry] = Object.entries(filters);
183
+ // An empty filter has no keyword to translate. `BaseController`'s
184
+ // `translateKoncorde` answers `{}` before reaching here; this is what
185
+ // destructuring `Object.entries(filters)[0]` raised a TypeError for.
186
+ if (entry === undefined) {
187
+ throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", "Invalid filter: no keyword to translate");
188
+ }
189
+ const [name, value] = entry;
157
190
  if (KONCORDE_OPERATORS.includes(name)) {
158
191
  return this._translateOperator(name, value);
159
192
  }
@@ -166,10 +199,10 @@ class QueryTranslator {
166
199
  }
167
200
  const esOperands = [];
168
201
  if (operator === "not") {
169
- esOperands.push(this.translate(operands));
202
+ esOperands.push(this.translate(asFilter(operands)));
170
203
  }
171
204
  else {
172
- for (const operand of operands) {
205
+ for (const operand of asFilterList(operands)) {
173
206
  esOperands.push(this.translate(operand));
174
207
  }
175
208
  }
@@ -182,6 +215,9 @@ class QueryTranslator {
182
215
  [clause]: content,
183
216
  };
184
217
  }
218
+ if (!(0, safeObject_1.isPlainObject)(content) && typeof content !== "string") {
219
+ throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", `Invalid "${clause}" clause: expected an object or a string, got ${typeof content}`);
220
+ }
185
221
  return converter(content);
186
222
  }
187
223
  }
@@ -0,0 +1,12 @@
1
+ import type { JSONObject } from "./JSONObject";
2
+ /**
3
+ * One entry of the HTTP route table the API exposes, native or plugin-provided.
4
+ */
5
+ export interface ApiRoute {
6
+ controller: string;
7
+ action: string;
8
+ path: string;
9
+ verb: string;
10
+ /** Attached by `PluginsManager` for a plugin route that declares one. */
11
+ openapi?: JSONObject;
12
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /*
3
+ * Kuzzle, a backend software, self-hostable and ready to use
4
+ * to power modern apps
5
+ *
6
+ * Copyright 2015-2022 Kuzzle
7
+ * mailto: support AT kuzzle.io
8
+ * website: http://kuzzle.io
9
+ *
10
+ * Licensed under the Apache License, Version 2.0 (the "License");
11
+ * you may not use this file except in compliance with the License.
12
+ * You may obtain a copy of the License at
13
+ *
14
+ * https://www.apache.org/licenses/LICENSE-2.0
15
+ *
16
+ * Unless required by applicable law or agreed to in writing, software
17
+ * distributed under the License is distributed on an "AS IS" BASIS,
18
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ * See the License for the specific language governing permissions and
20
+ * limitations under the License.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ //# sourceMappingURL=ApiRoute.js.map
@@ -1,4 +1,4 @@
1
- import { JSONObject } from "kuzzle-sdk";
1
+ import type { JSONObject } from "./JSONObject";
2
2
  export interface ClientConnection {
3
3
  id: string;
4
4
  protocol: string;
@@ -44,6 +44,16 @@ export type HookEventHandler<TEventDefinition extends EventDefinition = EventDef
44
44
  * It should return a promise resolving the first received argument.
45
45
  */
46
46
  export type PipeEventHandler<TEventDefinition extends EventDefinition = EventDefinition> = (...args: TEventDefinition["args"]) => Promise<TEventDefinition["args"][0]>;
47
+ /**
48
+ * A plugin pipe in its **callback** form: instead of answering a promise it
49
+ * takes a trailing `callback(error, result)`. The pipe runner supports both,
50
+ * and `PluginsManager.registerPipe` always hands over this one.
51
+ */
52
+ export type CallbackPipeHandler = (...args: unknown[]) => void;
53
+ /**
54
+ * What the emitter actually stores for a plugin pipe: either form.
55
+ */
56
+ export type RegisteredPipeHandler<TEventDefinition extends EventDefinition = EventDefinition> = PipeEventHandler<TEventDefinition> | CallbackPipeHandler;
47
57
  /**
48
58
  * Handler for cluster event.
49
59
  */
@@ -1,5 +1,5 @@
1
- import { Backend } from "../core/backend";
2
- import { Kuzzle } from "../kuzzle";
1
+ import type { Backend } from "../core/backend";
2
+ import type { Kuzzle } from "../kuzzle";
3
3
  /**
4
4
  * This file contains global type declarations for Kuzzle.
5
5
  * We need to use `var` so Typescript extends the globalThis type.
@@ -8,6 +8,11 @@ import { Kuzzle } from "../kuzzle";
8
8
  declare global {
9
9
  var app: Backend;
10
10
  var kuzzle: Kuzzle;
11
- var NODE_ENV: string;
11
+ var nodeId: string;
12
+ /**
13
+ * `process.env.NODE_ENV`, which is not guaranteed to be set — every reader
14
+ * compares it against a literal, so the absent case was already handled.
15
+ */
16
+ var NODE_ENV: string | undefined;
12
17
  }
13
18
  export {};
@@ -1,5 +1,5 @@
1
- import { JSONObject } from "kuzzle-sdk";
2
- import { ClientConnection } from "./ClientConnection";
1
+ import type { JSONObject } from "./JSONObject";
2
+ import type { ClientConnection } from "./ClientConnection";
3
3
  export interface HttpMessage {
4
4
  connection: ClientConnection;
5
5
  content: JSONObject;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import { Readable } from "stream";
2
+ import type { Readable } from "stream";
3
3
  export type HttpStreamProperties = {
4
4
  totalBytes?: number;
5
5
  };
@@ -27,7 +27,9 @@ exports.HttpStream = void 0;
27
27
  */
28
28
  class HttpStream {
29
29
  get readableState() {
30
- // @ts-ignore
30
+ // @ts-expect-error -- `_readableState` is Node's internal bookkeeping and
31
+ // is not declared by @types/node; it is where a destroyed stream's error
32
+ // lands, and `errored` is the only field read from it.
31
33
  return this.stream._readableState;
32
34
  }
33
35
  constructor(readableStream, { totalBytes = -1 } = {}) {
@@ -0,0 +1,9 @@
1
+ /**
2
+ * An object with any key and any value — a JSON document, a request body, a
3
+ * payload.
4
+ *
5
+ * Kuzzle's own definition (ADR-0002 step 02), declared exactly as kuzzle-sdk
6
+ * declares its `JSONObject`, so that a value of one is a value of the other,
7
+ * both ways: a plugin mixing the two imports sees no difference.
8
+ */
9
+ export type JSONObject = Record<PropertyKey, any>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /*
3
+ * Kuzzle, a backend software, self-hostable and ready to use
4
+ * to power modern apps
5
+ *
6
+ * Copyright 2015-2022 Kuzzle
7
+ * mailto: support AT kuzzle.io
8
+ * website: http://kuzzle.io
9
+ *
10
+ * Licensed under the Apache License, Version 2.0 (the "License");
11
+ * you may not use this file except in compliance with the License.
12
+ * You may obtain a copy of the License at
13
+ *
14
+ * https://www.apache.org/licenses/LICENSE-2.0
15
+ *
16
+ * Unless required by applicable law or agreed to in writing, software
17
+ * distributed under the License is distributed on an "AS IS" BASIS,
18
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ * See the License for the specific language governing permissions and
20
+ * limitations under the License.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ //# sourceMappingURL=JSONObject.js.map
@@ -1,4 +1,4 @@
1
- import { JSONObject } from "kuzzle-sdk";
1
+ import type { JSONObject } from "./JSONObject";
2
2
  export type InstallationConfig = {
3
3
  id: string;
4
4
  handler: () => Promise<void>;
@@ -7,9 +7,11 @@ export type InstallationConfig = {
7
7
  export type StartOptions = {
8
8
  import?: JSONObject;
9
9
  plugins?: JSONObject;
10
- secretsFile?: JSONObject;
10
+ /** Path to the encrypted secrets file — see `lib/kuzzle/vault.ts`. */
11
+ secretsFile?: string;
11
12
  support?: JSONObject;
12
- vaultKey?: JSONObject;
13
+ /** Key the encrypted secrets file is decrypted with. */
14
+ vaultKey?: string;
13
15
  installations?: Array<InstallationConfig>;
14
16
  };
15
17
  export type ImportConfig = {
@@ -1,4 +1,4 @@
1
- import { JSONObject } from "kuzzle-sdk";
1
+ import type { JSONObject } from "./JSONObject";
2
2
  /**
3
3
  * @deprecated Use KDocument instead (See https://docs.kuzzle.io/sdk/js/7/essentials/strong-typing/)
4
4
  */
@@ -0,0 +1,24 @@
1
+ import type { JSONObject } from "./JSONObject";
2
+ import type uWS from "uWebSockets.js";
3
+ /**
4
+ * What Kuzzle hands `res.upgrade()` as the socket's user data.
5
+ *
6
+ * uWebSockets merges it onto the socket object itself, which is why the code
7
+ * reads `socket.internal` rather than `socket.getUserData().internal` — the
8
+ * intersection below is what says so.
9
+ */
10
+ export interface KuzzleSocketData {
11
+ headers: JSONObject;
12
+ internal: {
13
+ debugSession?: boolean;
14
+ };
15
+ /**
16
+ * Rate-limiting bookkeeping. Seeded by `wsOnUpgradeHandler` along with the
17
+ * rest of this data, so the limiter can read `count` in the branch that did
18
+ * not just write it — which is what it always did.
19
+ */
20
+ last: number;
21
+ count: number;
22
+ }
23
+ /** A WebSocket carrying Kuzzle's own upgrade data. */
24
+ export type KuzzleWebSocket = uWS.WebSocket<unknown> & KuzzleSocketData;