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
@@ -59,7 +59,6 @@ const TIMEOUT_MAX = Math.pow(2, 31) - 1;
59
59
  */
60
60
  class TokenManager {
61
61
  constructor() {
62
- this.anonymousUserId = null;
63
62
  /**
64
63
  * Map<connectionId, ManagedToken>
65
64
  */
@@ -99,9 +98,21 @@ class TokenManager {
99
98
  this.removeConnection(connection.id).catch((err) => this.logger.info(err));
100
99
  });
101
100
  }
101
+ /**
102
+ * The managed token filed under `idx`, or undefined when none is.
103
+ *
104
+ * `search` answers a position or `-1`, and indexing `array` with it is
105
+ * `| undefined` for every position under `noUncheckedIndexedAccess` — so the
106
+ * callers test one value rather than a position and then an element.
107
+ */
108
+ find(idx) {
109
+ const pos = this.tokens.search({ idx });
110
+ return pos === -1 ? undefined : this.tokens.array[pos];
111
+ }
102
112
  runTimer() {
103
- if (this.tokens.array.length > 0) {
104
- const delay = Math.min(this.tokens.array[0].expiresAt - Date.now(), TIMEOUT_MAX);
113
+ const next = this.tokens.array[0];
114
+ if (next !== undefined) {
115
+ const delay = Math.min((next.expiresAt ?? 0) - Date.now(), TIMEOUT_MAX);
105
116
  if (this.timer) {
106
117
  clearTimeout(this.timer);
107
118
  }
@@ -127,13 +138,12 @@ class TokenManager {
127
138
  }
128
139
  this.removeConnectionLinkedToToken(connectionId, currentToken);
129
140
  }
130
- const pos = this.tokens.search({ idx });
131
- if (pos === -1) {
141
+ const managedToken = this.find(idx);
142
+ if (managedToken === undefined) {
132
143
  this.add(token, new Set([connectionId]));
133
144
  this.logger.trace(`connection "${connectionId}" from user "${token.userId}" linked to a new token`);
134
145
  }
135
146
  else {
136
- const managedToken = this.tokens.array[pos];
137
147
  managedToken.connectionIds.add(connectionId);
138
148
  this.tokensByConnection.set(connectionId, managedToken);
139
149
  this.logger.trace(`connection "${connectionId}" from user "${token.userId}" linked to existing token`);
@@ -145,6 +155,12 @@ class TokenManager {
145
155
  * @param token
146
156
  * @param connectionId
147
157
  */
158
+ /**
159
+ * `Token | null`: a request whose connection never authenticated carries no
160
+ * token, and the trace below is the deliberate answer to that. The
161
+ * non-nullable parameter made `authController.logout` — the one caller —
162
+ * look like it had checked.
163
+ */
148
164
  unlink(token, connectionId) {
149
165
  if (!token) {
150
166
  this.logger.trace(`tried to unlink connection "${connectionId}" with no token`);
@@ -155,12 +171,12 @@ class TokenManager {
155
171
  return;
156
172
  }
157
173
  const idx = ManagedToken.indexFor(token);
158
- const pos = this.tokens.search({ idx });
159
- if (pos === -1) {
174
+ const managedToken = this.find(idx);
175
+ if (managedToken === undefined) {
160
176
  this.logger.trace(`tried to unlink connection "${connectionId}" with no token associated`);
161
177
  return;
162
178
  }
163
- this.removeConnectionLinkedToToken(connectionId, this.tokens.array[pos]);
179
+ this.removeConnectionLinkedToToken(connectionId, managedToken);
164
180
  const currentToken = this.tokensByConnection.get(connectionId);
165
181
  if (currentToken && currentToken._id === token._id) {
166
182
  this.tokensByConnection.delete(connectionId);
@@ -194,8 +210,8 @@ class TokenManager {
194
210
  }
195
211
  const idx = ManagedToken.indexFor(token);
196
212
  const searchResult = this.tokens.search({ idx });
197
- if (searchResult > -1) {
198
- const managedToken = this.tokens.array[searchResult];
213
+ const managedToken = this.tokens.array[searchResult];
214
+ if (managedToken !== undefined) {
199
215
  for (const connectionId of managedToken.connectionIds) {
200
216
  this.tokensByConnection.delete(connectionId);
201
217
  await global.kuzzle.ask("core:realtime:connection:remove", connectionId);
@@ -220,8 +236,9 @@ class TokenManager {
220
236
  // within the same second) but, oh, well... it costs nothing to fix a
221
237
  // potentially very, very, very hard to debug random problem before it
222
238
  // occurs
223
- if (pos > -1 && oldToken._id !== newToken._id) {
224
- const connectionIds = this.tokens.array[pos].connectionIds;
239
+ const managedToken = pos === -1 ? undefined : this.tokens.array[pos];
240
+ if (managedToken !== undefined && oldToken._id !== newToken._id) {
241
+ const connectionIds = managedToken.connectionIds;
225
242
  this.add(newToken, connectionIds);
226
243
  // Delete old token
227
244
  this.deleteByIndex(pos);
@@ -230,11 +247,13 @@ class TokenManager {
230
247
  }
231
248
  async checkTokensValidity() {
232
249
  const arr = this.tokens.array;
250
+ const first = arr[0];
233
251
  // API key can never expire (-1)
234
- if (arr.length > 0 &&
235
- arr[0].expiresAt > 0 &&
236
- arr[0].expiresAt < Date.now()) {
237
- const managedToken = arr[0];
252
+ if (first !== undefined &&
253
+ first.expiresAt !== null &&
254
+ first.expiresAt > 0 &&
255
+ first.expiresAt < Date.now()) {
256
+ const managedToken = first;
238
257
  arr.shift();
239
258
  for (const connectionId of managedToken.connectionIds) {
240
259
  await global.kuzzle.ask("core:realtime:tokenExpired:notify", connectionId);
@@ -248,9 +267,18 @@ class TokenManager {
248
267
  }
249
268
  }
250
269
  /**
251
- * Gets the token matching user & connection if any
270
+ * Gets the token matching user & connection if any.
271
+ *
272
+ * `string | null` on both: this is a query, and a request that carries
273
+ * neither a connection nor a stored user is answered — `null` misses the
274
+ * map, and a null kuid matches no token's `userId` — rather than being a
275
+ * caller error. `authController.login` asks it of every login, including
276
+ * the ones where the strategy has not yet produced either.
252
277
  */
253
278
  getConnectedUserToken(userId, connectionId) {
279
+ if (connectionId === null) {
280
+ return null;
281
+ }
254
282
  const token = this.tokensByConnection.get(connectionId);
255
283
  return token && token.userId === userId ? token : null;
256
284
  }
@@ -279,7 +307,7 @@ class TokenManager {
279
307
  this.tokensByConnection.set(connectionId, orderedToken);
280
308
  }
281
309
  this.tokens.insert(orderedToken);
282
- if (this.tokens.array[0].idx === orderedToken.idx) {
310
+ if (this.tokens.array[0]?.idx === orderedToken.idx) {
283
311
  this.runTimer();
284
312
  }
285
313
  this.logger.trace(`token from user ${token.userId} linked to connections ${Array.from(connectionIds)}`);
@@ -1,5 +1,5 @@
1
- import Kuzzle from "../../kuzzle/kuzzle";
2
- import { Backend } from "./index";
1
+ import type Kuzzle from "../../kuzzle/kuzzle";
2
+ import type { Backend } from "./index";
3
3
  export declare class ApplicationManager {
4
4
  protected _application: any;
5
5
  constructor(application: Backend);
@@ -1,14 +1,20 @@
1
- import { JSONObject } from "kuzzle-sdk";
1
+ import type { JSONObject } from "../../types/JSONObject";
2
2
  import { EmbeddedSDK } from "../shared/sdk/embeddedSdk";
3
- import { EventDefinition } from "../../../index";
3
+ import type { EventDefinition } from "../../../index";
4
4
  import { BackendCluster, BackendConfig, BackendController, BackendHook, BackendImport, BackendPipe, BackendPlugin, BackendStorage, BackendVault, BackendOpenApi, BackendErrors, BackendSubscription } from "./index";
5
5
  import { Logger } from "../../kuzzle/Logger";
6
+ import Plugin from "../plugin/plugin";
6
7
  export declare class Backend {
7
8
  private _kuzzle;
8
9
  private _name;
10
+ /**
11
+ * Both are defined with `Reflect.defineProperty` in the constructor, so
12
+ * that they stay off the enumerable surface a plugin sees; the compiler
13
+ * does not read that as an initialisation.
14
+ */
9
15
  private _sdk;
10
16
  private _started;
11
- protected _pipes: {};
17
+ protected _pipes: Record<string, Array<() => Promise<void>>>;
12
18
  protected _hooks: {};
13
19
  protected _controllers: {};
14
20
  protected _plugins: {};
@@ -28,9 +34,14 @@ export declare class Backend {
28
34
  handler: () => void;
29
35
  }>;
30
36
  /**
31
- * Requiring the PluginObject on module top level creates cyclic dependency
37
+ * The `Plugin` wrapper class, held on the instance rather than imported at
38
+ * use site — see the `Reflect.defineProperty` in the constructor.
39
+ */
40
+ /**
41
+ * Defined with `Reflect.defineProperty` below, for the same reason as
42
+ * `_kuzzle` and `_sdk`.
32
43
  */
33
- protected PluginObject: any;
44
+ protected PluginObject: typeof Plugin;
34
45
  /**
35
46
  * Application version
36
47
  */
@@ -54,6 +54,7 @@ const kerror = __importStar(require("../../kerror"));
54
54
  const index_1 = require("../../../index");
55
55
  const index_2 = require("./index");
56
56
  const Logger_1 = require("../../kuzzle/Logger");
57
+ const plugin_1 = __importDefault(require("../plugin/plugin"));
57
58
  const assertionError = kerror.wrap("plugin", "assert");
58
59
  const runtimeError = kerror.wrap("plugin", "runtime");
59
60
  let _app = null;
@@ -80,6 +81,7 @@ class Backend {
80
81
  * @param name - Your application name
81
82
  */
82
83
  constructor(name) {
84
+ this._started = false;
83
85
  this._pipes = {};
84
86
  this._hooks = {};
85
87
  this._controllers = {};
@@ -93,6 +95,10 @@ class Backend {
93
95
  users: {},
94
96
  };
95
97
  this._installationsWaitingList = [];
98
+ /**
99
+ * Application version
100
+ */
101
+ this.version = "";
96
102
  /**
97
103
  * Current Git commit (if available)
98
104
  */
@@ -107,13 +113,10 @@ class Backend {
107
113
  *
108
114
  */
109
115
  this._support = {};
110
- /**
111
- * Requiring the PluginObject on module top level creates cyclic dependency
112
- */
113
116
  Reflect.defineProperty(this, "PluginObject", {
114
- value: require("../plugin/plugin"),
117
+ value: plugin_1.default,
115
118
  });
116
- if (!this.PluginObject.checkName(name)) {
119
+ if (!plugin_1.default.checkName(name)) {
117
120
  throw assertionError.get("invalid_application_name", name);
118
121
  }
119
122
  this._name = name;
@@ -145,7 +148,7 @@ class Backend {
145
148
  const info = JSON.parse(node_fs_1.default.readFileSync("./package.json", "utf8"));
146
149
  this.version = info.version;
147
150
  }
148
- catch (error) {
151
+ catch {
149
152
  // Silent if no version can be found
150
153
  }
151
154
  global.app = this;
@@ -286,7 +289,12 @@ class Backend {
286
289
  if (!node_fs_1.default.statSync(gitDir).isDirectory()) {
287
290
  return null;
288
291
  }
292
+ // A detached HEAD holds the hash itself, with no "ref: " prefix: there is
293
+ // no ref file to follow, and the split answered undefined for it.
289
294
  const ref = node_fs_1.default.readFileSync(`${dir}/.git/HEAD`, "utf8").split("ref: ")[1];
295
+ if (ref === undefined) {
296
+ return null;
297
+ }
290
298
  const refFile = `${dir}/.git/${ref}`.replace("\n", "");
291
299
  if (!node_fs_1.default.existsSync(refFile)) {
292
300
  return null;
@@ -1,4 +1,4 @@
1
- import { EventDefinition, ClusterEventHandler } from "../../../index";
1
+ import type { EventDefinition, ClusterEventHandler } from "../../../index";
2
2
  export declare class BackendCluster {
3
3
  /**
4
4
  * Broadcasts an event to listeners across all registered Kuzzle nodes
@@ -1,10 +1,22 @@
1
- import { ApplicationManager, Backend } from "./index";
2
- import { KuzzleConfiguration } from "../../types/config/KuzzleConfiguration";
3
- export declare class BackendConfig extends ApplicationManager {
1
+ import type { Backend } from "./index";
2
+ import { ApplicationManager } from "./index";
3
+ import type { IKuzzleConfiguration, KuzzleConfigurationOverrides } from "../../types/config/KuzzleConfiguration";
4
+ /**
5
+ * `content` is declared here, as an accessor pair, rather than as a field of
6
+ * the class: read, it is the whole configuration, which it is once loaded;
7
+ * assigned, it takes a `Partial` one, which is what v2.56.0 declared it as.
8
+ * Code compiled against that assigns one, and must still compile; reads no
9
+ * longer need `?.` at every level. At runtime it is the plain property the
10
+ * constructor assigns, as it always was — an interface adds no accessor.
11
+ */
12
+ export interface BackendConfig {
4
13
  /**
5
14
  * Configuration content.
6
15
  */
7
- content: KuzzleConfiguration;
16
+ get content(): IKuzzleConfiguration;
17
+ set content(content: Partial<IKuzzleConfiguration>);
18
+ }
19
+ export declare class BackendConfig extends ApplicationManager {
8
20
  constructor(application: Backend);
9
21
  /**
10
22
  * Sets a configuration value
@@ -22,5 +34,5 @@ export declare class BackendConfig extends ApplicationManager {
22
34
  *
23
35
  * @param config - Configuration object to merge
24
36
  */
25
- merge(config: KuzzleConfiguration): void;
37
+ merge(config: KuzzleConfigurationOverrides): void;
26
38
  }
@@ -52,6 +52,7 @@ const kerror = __importStar(require("../../kerror"));
52
52
  const index_1 = require("./index");
53
53
  const index_2 = require("../../config/index");
54
54
  const runtimeError = kerror.wrap("plugin", "runtime");
55
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging -- see the interface above
55
56
  class BackendConfig extends index_1.ApplicationManager {
56
57
  constructor(application) {
57
58
  super(application);
@@ -1,4 +1,4 @@
1
- import { ControllerDefinition, Controller } from "../../types";
1
+ import type { ControllerDefinition, Controller } from "../../types";
2
2
  import { ApplicationManager } from "./index";
3
3
  export declare class BackendController extends ApplicationManager {
4
4
  /**
@@ -159,7 +159,14 @@ class BackendController extends index_1.ApplicationManager {
159
159
  // if the function handler is an instance method,
160
160
  // bind the context to the controller instance
161
161
  const handlerName = definition.handler.name;
162
- if (handlerName && typeof controller[handlerName] === "function") {
162
+ // `Reflect.get`, not safeObject's `get`: a controller's actions are class
163
+ // methods and live on the prototype, which that helper deliberately does
164
+ // not read. Landed in an `unknown` so the reflective read's `any` goes no
165
+ // further than the `typeof` below.
166
+ const method = handlerName
167
+ ? Reflect.get(controller, handlerName)
168
+ : undefined;
169
+ if (typeof method === "function") {
163
170
  definition.handler = definition.handler.bind(controller);
164
171
  }
165
172
  }
@@ -1,6 +1,8 @@
1
- import { KuzzleError } from "../../kerror/errors";
2
- import { ApplicationManager, Backend } from "./index";
3
- import { CustomErrorDefinition } from "../../types";
1
+ import type { KuzzleError } from "../../kerror/errors";
2
+ import * as kerror from "../../kerror";
3
+ import type { Backend } from "./index";
4
+ import { ApplicationManager } from "./index";
5
+ import type { CustomErrorDefinition } from "../../types";
4
6
  export declare class BackendErrors extends ApplicationManager {
5
7
  private domains;
6
8
  constructor(application: Backend);
@@ -34,7 +36,7 @@ export declare class BackendErrors extends ApplicationManager {
34
36
  *
35
37
  * @returns Standardized KuzzleError
36
38
  */
37
- get(domain: string, subDomain: string, name: string, ...placeholders: any[]): KuzzleError;
39
+ get(domain: string, subDomain: string, name: string, ...placeholders: unknown[]): KuzzleError;
38
40
  /**
39
41
  * Get a standardized KuzzleError from an existing error to keep the stacktrace
40
42
  *
@@ -46,16 +48,21 @@ export declare class BackendErrors extends ApplicationManager {
46
48
  *
47
49
  * @returns Standardized KuzzleError
48
50
  */
49
- getFrom(source: Error, domain: string, subDomain: string, name: string, ...placeholders: any[]): KuzzleError;
51
+ getFrom(source: Error, domain: string, subDomain: string, name: string, ...placeholders: unknown[]): KuzzleError;
50
52
  /**
51
53
  * Wrap an error manager on the domain and subDomain
52
54
  *
53
55
  * @param domain Domain name
54
56
  * @param subDomain Subdomain to wrap to
57
+ *
58
+ * The error name is declared `unknown`, as v2.56.0's `any` accepted
59
+ * anything; one that is not a registered name gives
60
+ * `core.fatal.unexpected_error`, as it always has. Methods rather than
61
+ * function-typed properties, so that `kerror`'s `string`-typed ones fit.
55
62
  */
56
63
  wrap(domain: string, subDomain: string): {
57
- get: (error: any, ...placeholders: any[]) => KuzzleError;
58
- getFrom: (source: any, error: any, ...placeholders: any[]) => KuzzleError;
59
- reject: (error: any, ...placeholders: any[]) => Promise<any>;
64
+ get(error: unknown, ...placeholders: unknown[]): KuzzleError;
65
+ getFrom(source: unknown, error: unknown, ...placeholders: unknown[]): KuzzleError;
66
+ reject(error: unknown, ...placeholders: unknown[]): ReturnType<typeof kerror.reject>;
60
67
  };
61
68
  }
@@ -118,6 +118,11 @@ class BackendErrors extends index_1.ApplicationManager {
118
118
  *
119
119
  * @param domain Domain name
120
120
  * @param subDomain Subdomain to wrap to
121
+ *
122
+ * The error name is declared `unknown`, as v2.56.0's `any` accepted
123
+ * anything; one that is not a registered name gives
124
+ * `core.fatal.unexpected_error`, as it always has. Methods rather than
125
+ * function-typed properties, so that `kerror`'s `string`-typed ones fit.
121
126
  */
122
127
  wrap(domain, subDomain) {
123
128
  return kerror.rawWrap(this.domains, domain, subDomain);
@@ -1,4 +1,4 @@
1
- import { HookEventHandler, EventDefinition } from "../../types";
1
+ import type { HookEventHandler, EventDefinition } from "../../types";
2
2
  import { ApplicationManager } from "./index";
3
3
  export declare class BackendHook extends ApplicationManager {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { JSONObject } from "kuzzle-sdk";
1
+ import type { JSONObject } from "../../types/JSONObject";
2
2
  import { ApplicationManager } from "./index";
3
3
  export type DefaultMappings = {
4
4
  [index: string]: {
@@ -1,5 +1,6 @@
1
- import { ApplicationManager, Backend } from "./index";
2
- import { OpenApiDefinition } from "../../types";
1
+ import type { Backend } from "./index";
2
+ import { ApplicationManager } from "./index";
3
+ import type { OpenApiDefinition } from "../../types";
3
4
  export declare class BackendOpenApi extends ApplicationManager {
4
5
  /**
5
6
  * Application Open API definition
@@ -1,4 +1,4 @@
1
- import { EventDefinition, PipeEventHandler } from "../../types";
1
+ import type { EventDefinition, PipeEventHandler } from "../../types";
2
2
  import { ApplicationManager } from "./index";
3
3
  export declare class BackendPipe extends ApplicationManager {
4
4
  /**
@@ -63,7 +63,15 @@ class BackendPipe extends index_1.ApplicationManager {
63
63
  throw assertionError.get("invalid_pipe", event);
64
64
  }
65
65
  if (this._application.started) {
66
- return global.kuzzle.pluginsManager.registerPipe(global.kuzzle.pluginsManager.application, event, handler);
66
+ const application = global.kuzzle.pluginsManager.application;
67
+ // `started` is set by `kuzzle.start`, which registers the application
68
+ // with the plugins manager before it flips: an application that is
69
+ // running and unknown to the manager cannot happen, and the error says
70
+ // which half is missing rather than handing `undefined` on.
71
+ if (application === undefined) {
72
+ throw runtimeError.get("unavailable_before_start", "pipe.register");
73
+ }
74
+ return global.kuzzle.pluginsManager.registerPipe(application, event, handler);
67
75
  }
68
76
  if (!this._application._pipes[event]) {
69
77
  this._application._pipes[event] = [];
@@ -1,5 +1,5 @@
1
- import { JSONObject } from "kuzzle-sdk";
2
- import { Plugin } from "../../types";
1
+ import type { JSONObject } from "../../types/JSONObject";
2
+ import type { Plugin } from "../../types";
3
3
  import { ApplicationManager } from "./index";
4
4
  export declare class BackendPlugin extends ApplicationManager {
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { JSONObject } from "kuzzle-sdk";
2
- import { Connection } from "../../api/request";
1
+ import type { JSONObject } from "../../types/JSONObject";
2
+ import type { Connection } from "../../api/request";
3
3
  import { ApplicationManager } from "./index";
4
4
  export declare class BackendSubscription extends ApplicationManager {
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { JSONObject } from "kuzzle-sdk";
1
+ import type { JSONObject } from "../../types/JSONObject";
2
2
  import { ApplicationManager } from "./index";
3
3
  export declare class BackendVault extends ApplicationManager {
4
4
  private decrypted;
@@ -35,6 +35,9 @@ class BackendVault extends index_1.ApplicationManager {
35
35
  constructor() {
36
36
  super(...arguments);
37
37
  this.decrypted = false;
38
+ // Empty until `secrets` loads the vault. It is never read before that: the
39
+ // only `return this._secrets` is below the load.
40
+ this._secrets = {};
38
41
  }
39
42
  /**
40
43
  * Secret key to decrypt encrypted secrets.
@@ -61,8 +64,12 @@ class BackendVault extends index_1.ApplicationManager {
61
64
  // We need to load the secrets before Kuzzle start so we can use them
62
65
  // in the configuration (e.g. configure ES X-Pack credentials)
63
66
  if (!this._application.started && !this.decrypted) {
64
- const kuzzleVault = vault_1.default.load(this._application._vaultKey, this._application._secretsFile);
67
+ const kuzzleVault = vault_1.default.load(this._application._vaultKey, this._application._secretsFile, this._application.config.content.vault.newAlgorithm);
65
68
  this._secrets = kuzzleVault.secrets;
69
+ // `decrypted` was written once, at declaration, and never set — so this
70
+ // block re-decrypted the vault on every read before start, which is
71
+ // exactly what the flag exists to prevent.
72
+ this.decrypted = true;
66
73
  }
67
74
  if (this._application.started) {
68
75
  return this._kuzzle.vault.secrets;
@@ -1,15 +1,18 @@
1
- export = CacheEngine;
1
+ import Redis from "../../service/cache/redis";
2
+ import type { Logger } from "../../kuzzle/Logger";
3
+ import "../../types/Global";
2
4
  declare class CacheEngine {
3
5
  public: Redis;
4
6
  internal: Redis;
5
- logger: import("../../kuzzle/Logger").Logger;
7
+ logger: Logger;
8
+ constructor();
6
9
  /**
7
10
  * Initializes the redis clients
8
11
  *
9
12
  * @returns {Promise}
10
13
  */
11
- init(): Promise<any>;
14
+ init(): Promise<void>;
12
15
  registerInternalEvents(): void;
13
16
  registerPublicEvents(): void;
14
17
  }
15
- import Redis = require("../../service/cache/redis");
18
+ export = CacheEngine;
@@ -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,14 +19,17 @@
18
19
  * See the License for the specific language governing permissions and
19
20
  * limitations under the License.
20
21
  */
21
- "use strict";
22
- const Bluebird = require("bluebird");
23
- const Redis = require("../../service/cache/redis");
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ const bluebird_1 = __importDefault(require("bluebird"));
26
+ const redis_1 = __importDefault(require("../../service/cache/redis"));
27
+ require("../../types/Global");
24
28
  class CacheEngine {
25
29
  constructor() {
26
30
  const config = global.kuzzle.config.services;
27
- this.public = new Redis(config.memoryStorage, "public_adapter");
28
- this.internal = new Redis(config.internalCache, "internal_adapter");
31
+ this.public = new redis_1.default(config.memoryStorage, "public_adapter");
32
+ this.internal = new redis_1.default(config.internalCache, "internal_adapter");
29
33
  this.logger = global.kuzzle.log.child("core:cache:cacheEngine");
30
34
  }
31
35
  /**
@@ -34,7 +38,7 @@ class CacheEngine {
34
38
  * @returns {Promise}
35
39
  */
36
40
  async init() {
37
- await Bluebird.all([this.public.init(), this.internal.init()]);
41
+ await bluebird_1.default.all([this.public.init(), this.internal.init()]);
38
42
  this.registerInternalEvents();
39
43
  this.registerPublicEvents();
40
44
  this.logger.info("[✔] Cache initialized");
@@ -104,7 +108,7 @@ class CacheEngine {
104
108
  * @param {string} script
105
109
  */
106
110
  global.kuzzle.onAsk("core:cache:internal:script:define", (name, keys, script) => {
107
- return this.internal.client.defineCommand(name, {
111
+ return this.internal.connectedClient.defineCommand(name, {
108
112
  lua: script,
109
113
  numberOfKeys: keys,
110
114
  });
@@ -116,7 +120,14 @@ class CacheEngine {
116
120
  * @param {...string} args -- script arguments
117
121
  * @return {*} script result (if any)
118
122
  */
119
- global.kuzzle.onAsk("core:cache:internal:script:execute", (name, ...args) => this.internal.client[name](...args));
123
+ global.kuzzle.onAsk("core:cache:internal:script:execute", (name, ...args) => {
124
+ const client = this.internal.connectedClient;
125
+ // `defineCommand` attaches the script to the client INSTANCE, so it has
126
+ // to be invoked as a method: a detached reference loses `this` and
127
+ // ioredis' Commander throws on `this.options`. `Reflect.apply` keeps the
128
+ // receiver, which a plain `Reflect.get(...)(...)` does not.
129
+ return Reflect.apply(Reflect.get(client, name), client, args);
130
+ });
120
131
  /**
121
132
  * Convenience method for easy access to options NX and PX of the "set"
122
133
  * command.
@@ -139,6 +150,12 @@ class CacheEngine {
139
150
  * @param {Array} args -- command arguments
140
151
  */
141
152
  global.kuzzle.onAsk("core:cache:internal:execute", (command, ...args) => this.internal.exec(command, ...args));
153
+ /**
154
+ * Returns the raw ioredis client instance backing the internal cache.
155
+ * In-process only — never exposed over the network. Used by
156
+ * lib/util/distributedLock.ts to build its redis-semaphore mutexes.
157
+ */
158
+ global.kuzzle.onAsk("core:cache:internal:client:get", () => this.internal.client);
142
159
  }
143
160
  registerPublicEvents() {
144
161
  /**
@@ -1,5 +1,6 @@
1
- import { JSONObject } from "kuzzle-sdk";
1
+ import type { JSONObject } from "../../types/JSONObject";
2
2
  export declare class KuzzleDebugger {
3
+ /** Built by `init()`, which is called before anything can reach the API. */
3
4
  private inspector;
4
5
  private debuggerStatus;
5
6
  /**