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,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,26 +19,68 @@
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 { flatten, uniq } = require("lodash");
23
- const Bluebird = require("bluebird");
24
- const IORedis = require("ioredis");
25
- const kerror = require("../../kerror").wrap("services", "cache");
26
- const Service = require("../service");
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ const node_util_1 = require("node:util");
49
+ const bluebird_1 = __importDefault(require("bluebird"));
50
+ const lodash_1 = require("lodash");
51
+ const ioredis_1 = __importStar(require("ioredis"));
52
+ const service_1 = __importDefault(require("../service"));
53
+ const kerrorLib = __importStar(require("../../kerror"));
54
+ require("../../types/Global");
55
+ const kerror = kerrorLib.wrap("services", "cache");
27
56
  /**
28
57
  * @class Redis
29
58
  * @extends Service
30
- * @param {object} config
31
- * @property service
32
59
  */
33
- class Redis extends Service {
60
+ class Redis extends service_1.default {
61
+ /**
62
+ * The connected client.
63
+ *
64
+ * `client` is null until `init()` builds it, and every consumer is wired up
65
+ * by `cacheEngine.init()` *after* that — so "not connected" is a programming
66
+ * error, stated once here where it can actually happen, rather than a null
67
+ * check at each call site where it cannot.
68
+ */
69
+ get connectedClient() {
70
+ if (this.client === null) {
71
+ throw kerrorLib.get("core", "fatal", "assertion_failed", `redis adapter "${this.adapterName}" is not connected`);
72
+ }
73
+ return this.client;
74
+ }
34
75
  constructor(config, name) {
35
76
  super("redis", config);
36
77
  this.connected = false;
37
78
  this.client = null;
79
+ // Populated by setCommands() once the client is built; empty until then,
80
+ // exactly like the plain object this field held before.
38
81
  this.commands = {};
39
- this.adapterName = name;
40
82
  this.pingIntervalID = null;
83
+ this.adapterName = name;
41
84
  this.logger = global.kuzzle.log.child // It means we're in the main Kuzzle process
42
85
  ? global.kuzzle.log.child("services:cache:redis")
43
86
  : global.kuzzle.log;
@@ -45,29 +88,32 @@ class Redis extends Service {
45
88
  /**
46
89
  * Initialize the redis client, select the service associated database and
47
90
  * flush it to make sure we start from a clean state
48
- *
49
- * @returns {Promise}
50
91
  */
51
92
  _initSequence() {
52
- const config = JSON.parse(JSON.stringify(this._config));
93
+ // A copy, so the DNS lookup override below does not leak into the
94
+ // service configuration. `cloneDeep` rather than `structuredClone`: a
95
+ // config set from code may hold functions (e.g. an ioredis
96
+ // `retryStrategy`), which `structuredClone` refuses to copy.
97
+ const config = (0, lodash_1.cloneDeep)(this._config); // NOSONAR structuredClone throws on functions, see above
53
98
  // Only way to connect to AWS ELastiCache
54
99
  // https://github.com/luin/ioredis#special-note-aws-elasticache-clusters-with-tls
55
100
  if (config.overrideDnsLookup) {
56
101
  config.clusterOptions.dnsLookup = (address, callback) => callback(null, address);
57
102
  }
58
- if (config.nodes) {
59
- this.client = this._buildClusterClient({
103
+ // Built into a local and then published: `this.client` is the nullable
104
+ // field the accessor guards, and reading it back seven times here is what
105
+ // made every one of those reads a null check.
106
+ const client = config.nodes
107
+ ? this._buildClusterClient({
60
108
  ...config.clusterOptions,
61
109
  redisOptions: config.options,
62
- });
63
- }
64
- else {
65
- this.client = this._buildClient(config.options);
66
- }
67
- this.client.on("ready", () => {
110
+ })
111
+ : this._buildClient(config.options ?? {});
112
+ this.client = client;
113
+ client.on("ready", () => {
68
114
  this.connected = true;
69
115
  });
70
- this.client.on("error", (error) => {
116
+ client.on("error", (error) => {
71
117
  if (this.connected) {
72
118
  global.kuzzle.log.error(`Redis service seem to be down, see original error for more info:\n${error.message}`);
73
119
  }
@@ -78,12 +124,12 @@ class Redis extends Service {
78
124
  if (config.pingKeepAlive && config.pingKeepAlive > 0) {
79
125
  this._setupKeepAlive(config.pingKeepAlive);
80
126
  }
81
- return new Bluebird((resolve, reject) => {
82
- this.client.once("ready", async () => {
83
- await this.client.client("SETNAME", `${this.adapterName}/${global.kuzzle.id}`);
127
+ return new bluebird_1.default((resolve, reject) => {
128
+ client.once("ready", async () => {
129
+ await client.client("SETNAME", `${this.adapterName}/${global.kuzzle.id}`);
84
130
  resolve();
85
131
  });
86
- this.client.once("error", (error) => {
132
+ client.once("error", (error) => {
87
133
  reject(error);
88
134
  });
89
135
  });
@@ -93,12 +139,12 @@ class Redis extends Service {
93
139
  * Every 60 seconds a ping is sent to Redis
94
140
  */
95
141
  _setupKeepAlive(delay) {
96
- this.client.on("ready", async () => {
142
+ this.connectedClient.on("ready", async () => {
97
143
  await this._ping();
98
144
  this.pingIntervalID = setInterval(this._ping.bind(this), delay);
99
145
  });
100
- this.client.on("error", () => {
101
- clearInterval(this.pingIntervalID);
146
+ this.connectedClient.on("error", () => {
147
+ clearInterval(this.pingIntervalID ?? undefined);
102
148
  this.pingIntervalID = null;
103
149
  });
104
150
  }
@@ -107,49 +153,78 @@ class Redis extends Service {
107
153
  */
108
154
  async _ping() {
109
155
  try {
110
- await this.client.ping();
156
+ await this.connectedClient.ping();
111
157
  }
112
158
  catch (error) {
113
- global.kuzzle.log.error(`Failed to PING Redis to keep connection alive:\n${error.message}`);
159
+ global.kuzzle.log.error(`Failed to PING Redis to keep connection alive:\n${error instanceof Error ? error.message : (0, node_util_1.inspect)(error)}`);
114
160
  }
115
161
  }
116
162
  /**
117
163
  * Initializes the Redis commands list, and add transformers when necessary
118
164
  */
119
165
  setCommands() {
120
- const commandsList = this.client.getBuiltinCommands();
166
+ const commandsList = this.connectedClient.getBuiltinCommands();
167
+ // Command names are only known at runtime (from getBuiltinCommands()),
168
+ // so this dispatch table can't be built against RedisCommander's named
169
+ // members directly -- this is the one place that bridges the two. Both
170
+ // this list and RedisCommander are generated from the same upstream
171
+ // ioredis command set, so the cast reflects a real guarantee, not a
172
+ // hand-wave.
173
+ const commands = this.commands;
174
+ const client = this.connectedClient;
121
175
  for (const command of commandsList) {
122
- this.commands[command] = async (...args) => {
176
+ const implementation = client[command];
177
+ // `getBuiltinCommands()` lists what the client exposes, so the lookup
178
+ // is the same object answering about itself — the indexed read was the
179
+ // only thing the compiler could not follow.
180
+ if (implementation === undefined) {
181
+ continue;
182
+ }
183
+ commands[command] = async (...args) => {
123
184
  if (!this.connected) {
124
- throw kerror.get("notconnected");
185
+ // `not_connected`, with the underscore the code is declared with.
186
+ // `notconnected` matches nothing, so every command issued while
187
+ // the adapter was down raised `core.fatal.unexpected_error`
188
+ // instead of "Unable to connect to the cache server".
189
+ throw kerror.get("not_connected");
125
190
  }
126
- return this.client[command](...args);
191
+ // `Reflect.apply`, not `implementation(...args)`: ioredis' commands
192
+ // live on the `Commander` prototype and read `this.options`, so
193
+ // calling the result of an indexed read drops the receiver and
194
+ // every command throws. This is the bug sprint 5's Build and Run
195
+ // job caught in `funnel.doAction`, reintroduced here by hoisting
196
+ // the lookup out of the call — see `pluginsManager`'s note on the
197
+ // same line.
198
+ return Reflect.apply(implementation, client, args);
127
199
  };
128
200
  }
129
201
  }
130
202
  /**
131
203
  * Return some basic information about this service
132
204
  * @override
133
- *
134
- * @returns {Promise} service informations
135
205
  */
136
206
  async info() {
137
207
  const result = await this.commands.info();
138
- const arr = result.replace(/\r\n/g, "\n").split("\n");
208
+ const arr = result.replaceAll("\r\n", "\n").split("\n");
139
209
  const info = {};
140
- arr.forEach((item) => {
141
- item = item.trim();
210
+ for (const rawItem of arr) {
211
+ const item = rawItem.trim();
142
212
  if (item.length > 0 && !item.startsWith("#")) {
143
- const keyValuePair = item.split(":");
144
- info[keyValuePair[0]] = keyValuePair[1];
213
+ const [key, value] = item.split(":");
214
+ // A line with no colon carries no value. It was stored as
215
+ // `info[key] = undefined`, which the five reads below then answered
216
+ // with while claiming `string`.
217
+ if (key !== undefined && value !== undefined) {
218
+ info[key] = value;
219
+ }
145
220
  }
146
- });
221
+ }
147
222
  return {
148
- memoryPeak: info.used_memory_peak_human,
149
- memoryUsed: info.used_memory_human,
150
- mode: info.redis_mode,
223
+ memoryPeak: info.used_memory_peak_human ?? "",
224
+ memoryUsed: info.used_memory_human ?? "",
225
+ mode: info.redis_mode ?? "",
151
226
  type: "redis",
152
- version: info.redis_version,
227
+ version: info.redis_version ?? "",
153
228
  };
154
229
  }
155
230
  /**
@@ -158,47 +233,45 @@ class Redis extends Service {
158
233
  * /!\ We don't use `keys` to avoid blocking Redis if using a big dataset
159
234
  * cf: http://redis.io/commands/keys
160
235
  * and http://redis.io/commands/scan
161
- *
162
- * @param pattern
163
- * @returns {Promise.<string[]>} promise resolving to an array of keys
164
236
  */
165
237
  async searchKeys(pattern) {
166
- if (this.client instanceof IORedis.Cluster) {
167
- const keys = await Bluebird.map(this.client.nodes("master"), (node) => {
238
+ const client = this.connectedClient;
239
+ if (client instanceof ioredis_1.Cluster) {
240
+ const keys = await bluebird_1.default.map(client.nodes("master"), (node) => {
168
241
  return this._searchNodeKeys(node, pattern);
169
242
  });
170
- return uniq(flatten(keys));
243
+ return [...new Set(keys.flat())];
171
244
  }
172
- return this._searchNodeKeys(this.client, pattern);
245
+ return this._searchNodeKeys(client, pattern);
173
246
  }
174
247
  /**
175
248
  * Executes multiple client commands in a single action
176
- *
177
- * @returns {Promise}
178
249
  */
179
250
  mExecute(commands) {
180
251
  if (!Array.isArray(commands) || commands.length === 0) {
181
- return Bluebird.resolve([]);
252
+ return bluebird_1.default.resolve([]);
182
253
  }
183
- return this.client.multi(commands).exec();
254
+ return this.connectedClient.multi(commands).exec();
184
255
  }
185
256
  _searchNodeKeys(node, pattern) {
186
- return new Bluebird((resolve) => {
257
+ return new bluebird_1.default((resolve) => {
187
258
  let keys = [];
188
259
  const stream = node.scanStream({ match: pattern });
189
260
  stream.on("data", (resultKeys) => {
190
261
  keys = keys.concat(resultKeys);
191
262
  });
192
263
  stream.on("end", () => {
193
- resolve(uniq(keys));
264
+ resolve([...new Set(keys)]);
194
265
  });
195
266
  });
196
267
  }
197
268
  _buildClient(options) {
198
- return new IORedis({ ...this._config.node, ...options });
269
+ return new ioredis_1.default({ ...this._config.node, ...options });
199
270
  }
200
271
  _buildClusterClient(options) {
201
- return new IORedis.Cluster(this._config.nodes, options);
272
+ // The caller only reaches here when `nodes` is set; `?? []` is what the
273
+ // Cluster constructor would have been handed otherwise.
274
+ return new ioredis_1.Cluster(this._config.nodes ?? [], options);
202
275
  }
203
276
  /**
204
277
  * Convenience method: set a key and its value
@@ -206,11 +279,6 @@ class Redis extends Service {
206
279
  * Options:
207
280
  * - onlyIfNew: if true, set the NX option
208
281
  * - ttl: if true, set the PX option
209
- *
210
- * @param {string} key
211
- * @param {string} value
212
- * @param {{onlyIfNew: boolean, ttl: number}} [options]
213
- * @return {boolean} true if the key was set, false otherwise
214
282
  */
215
283
  async store(key, value, { onlyIfNew = false, ttl = 0 } = {}) {
216
284
  const command = [key, value];
@@ -220,17 +288,26 @@ class Redis extends Service {
220
288
  if (ttl > 0) {
221
289
  command.push("PX", ttl);
222
290
  }
291
+ // The flag combination is built dynamically above, so it can't match a
292
+ // single RedisCommander.set(...) overload (which expects a fixed
293
+ // positional tuple per combination) -- same escape hatch as setCommands().
223
294
  const result = await this.commands.set(...command);
224
295
  return result === "OK";
225
296
  }
226
297
  /**
227
298
  * Executes a client command
228
- * @param {string} command
229
- * @param {Array} args
230
- * @return {Promise.<*>}
231
299
  */
232
300
  exec(command, ...args) {
233
- return this.commands[command](...args);
301
+ // command is an arbitrary name chosen at runtime by this method's own
302
+ // caller (see its ask-handler callers in cacheEngine.js) -- same
303
+ // escape hatch as setCommands().
304
+ const commands = this.commands;
305
+ const implementation = commands[command];
306
+ if (implementation === undefined) {
307
+ throw kerrorLib.get("core", "fatal", "assertion_failed", `redis adapter "${this.adapterName}" has no command "${command}"`);
308
+ }
309
+ // Same reason as `setCommands()`: the receiver goes with the call.
310
+ return Reflect.apply(implementation, commands, args);
234
311
  }
235
312
  }
236
313
  module.exports = Redis;
@@ -1,30 +1,25 @@
1
- export = Service;
1
+ import "../types/Global";
2
2
  /**
3
3
  * Services base class
4
- *
5
4
  */
6
- declare class Service {
7
- constructor(name: any, config: any);
8
- _name: any;
9
- _config: any;
10
- _initTimeout: any;
11
- get config(): any;
12
- get name(): any;
5
+ declare abstract class Service<TConfig = unknown, TInfo = unknown> {
6
+ protected _name: string;
7
+ protected _config: TConfig;
8
+ protected _initTimeout: number;
9
+ constructor(name: string, config: TConfig);
10
+ get config(): TConfig;
11
+ get name(): string;
13
12
  /**
14
13
  * Call _initSequence to initialize the service
15
14
  * and throw an error if timeout exceed
16
- *
17
- * @returns {Promise}
18
15
  */
19
- init(): Promise<any>;
20
- /**
21
- * @abstract
22
- * @returns {Promise}
23
- */
24
- _initSequence(): Promise<any>;
16
+ init(): Promise<void>;
17
+ protected abstract _initSequence(): Promise<void>;
25
18
  /**
19
+ * Return some basic information about this service
20
+ *
26
21
  * @abstract
27
- * @returns {Promise}
28
22
  */
29
- info(): Promise<any>;
23
+ info(): Promise<TInfo>;
30
24
  }
25
+ export = Service;
@@ -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,20 +19,45 @@
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 kerror = require("../kerror");
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ const bluebird_1 = __importDefault(require("bluebird"));
49
+ const kerror = __importStar(require("../kerror"));
50
+ require("../types/Global");
24
51
  /**
25
52
  * Services base class
26
- *
27
53
  */
28
54
  class Service {
29
55
  constructor(name, config) {
30
56
  this._name = name;
31
57
  this._config = config;
58
+ const { initTimeout } = (config ?? {});
32
59
  this._initTimeout =
33
- config.initTimeout ||
34
- global.kuzzle.config.services.common.defaultInitTimeout;
60
+ initTimeout || global.kuzzle.config.services.common.defaultInitTimeout;
35
61
  }
36
62
  get config() {
37
63
  return this._config;
@@ -42,29 +68,22 @@ class Service {
42
68
  /**
43
69
  * Call _initSequence to initialize the service
44
70
  * and throw an error if timeout exceed
45
- *
46
- * @returns {Promise}
47
71
  */
48
- init() {
49
- return Bluebird.resolve(this._initSequence())
50
- .timeout(this._initTimeout)
51
- .catch((e) => {
52
- if (e instanceof Bluebird.TimeoutError) {
72
+ async init() {
73
+ try {
74
+ await bluebird_1.default.resolve(this._initSequence()).timeout(this._initTimeout);
75
+ }
76
+ catch (e) {
77
+ if (e instanceof bluebird_1.default.TimeoutError) {
53
78
  throw kerror.get("core", "fatal", "service_timeout", this._name);
54
79
  }
55
80
  throw e;
56
- });
57
- }
58
- /**
59
- * @abstract
60
- * @returns {Promise}
61
- */
62
- _initSequence() {
63
- throw new Error("Not implemented");
81
+ }
64
82
  }
65
83
  /**
84
+ * Return some basic information about this service
85
+ *
66
86
  * @abstract
67
- * @returns {Promise}
68
87
  */
69
88
  info() {
70
89
  throw new Error("Not implemented");