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,38 +19,54 @@
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 { BadRequestError, ExternalServiceError, ForbiddenError, GatewayTimeoutError, InternalError: KuzzleInternalError, KuzzleError, NotFoundError, PartialError, PluginImplementationError, PreconditionError, ServiceUnavailableError, SizeLimitError, TooManyRequestsError, UnauthorizedError, Request, RequestContext, RequestInput, } = require("../../kerror/errors");
23
- const ClientConnection = require("./clientConnection");
24
- const ProtocolBase = require("./protocols/protocol");
25
- const debug = require("../../util/debug")("kuzzle:network:protocols");
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ const errors_1 = require("../../kerror/errors");
26
+ const request_1 = require("../../api/request");
27
+ const debug_1 = __importDefault(require("../../util/debug"));
28
+ const clientConnection_1 = __importDefault(require("./clientConnection"));
29
+ const protocol_1 = __importDefault(require("./protocols/protocol"));
30
+ const debug = (0, debug_1.default)("kuzzle:network:protocols");
31
+ const logLevels = [
32
+ "silly",
33
+ "debug",
34
+ "verbose",
35
+ "info",
36
+ "warn",
37
+ "error",
38
+ ];
39
+ /**
40
+ * The object a protocol plugin is initialized with: the constructors and the
41
+ * loggers it is allowed to reach, rather than the Kuzzle instance itself.
42
+ */
26
43
  class Context {
27
44
  constructor() {
28
- this.ClientConnection = ClientConnection;
45
+ this.ClientConnection = clientConnection_1.default;
29
46
  this.debug = debug;
30
47
  this.errors = {
31
- BadRequestError,
32
- ExternalServiceError,
33
- ForbiddenError,
34
- GatewayTimeoutError,
35
- InternalError: KuzzleInternalError,
36
- KuzzleError,
37
- NotFoundError,
38
- PartialError,
39
- PluginImplementationError,
40
- PreconditionError,
41
- ServiceUnavailableError,
42
- SizeLimitError,
43
- TooManyRequestsError,
44
- UnauthorizedError,
48
+ BadRequestError: errors_1.BadRequestError,
49
+ ExternalServiceError: errors_1.ExternalServiceError,
50
+ ForbiddenError: errors_1.ForbiddenError,
51
+ GatewayTimeoutError: errors_1.GatewayTimeoutError,
52
+ InternalError: errors_1.InternalError,
53
+ KuzzleError: errors_1.KuzzleError,
54
+ NotFoundError: errors_1.NotFoundError,
55
+ PartialError: errors_1.PartialError,
56
+ PluginImplementationError: errors_1.PluginImplementationError,
57
+ PreconditionError: errors_1.PreconditionError,
58
+ ServiceUnavailableError: errors_1.ServiceUnavailableError,
59
+ SizeLimitError: errors_1.SizeLimitError,
60
+ TooManyRequestsError: errors_1.TooManyRequestsError,
61
+ UnauthorizedError: errors_1.UnauthorizedError,
45
62
  };
46
- this.Protocol = ProtocolBase;
47
- this.Request = Request;
48
- this.RequestContext = RequestContext;
49
- this.RequestInput = RequestInput;
63
+ this.Protocol = protocol_1.default;
64
+ this.Request = request_1.Request;
65
+ this.RequestContext = request_1.RequestContext;
66
+ this.RequestInput = request_1.RequestInput;
50
67
  this.log = {};
51
- for (const type of ["silly", "debug", "verbose", "info", "warn", "error"]) {
52
- this.log[type] = (...args) => global.kuzzle.log[type](...args);
68
+ for (const type of logLevels) {
69
+ this.log[type] = (message, ...args) => global.kuzzle.log[type](message, ...args);
53
70
  }
54
71
  }
55
72
  }
@@ -1,26 +1,39 @@
1
- export = EntryPoint;
2
- declare class EntryPoint {
3
- config: import("../../..").ServerConfiguration;
4
- protocols: Map<any, any>;
5
- _clients: Map<any, any>;
1
+ import type { JSONObject } from "../../types/JSONObject";
2
+ import type { KuzzleRequest } from "../../api/request";
3
+ import { AccessLogger, type AccessLogExtra } from "./accessLogger";
4
+ import type Protocol from "./protocols/protocol";
5
+ import type ClientConnection from "./clientConnection";
6
+ import type { NetworkEntryPoint } from "./networkEntryPoint";
7
+ import type { ServerConfiguration } from "../../types";
8
+ /**
9
+ * `implements NetworkEntryPoint`: that interface was declared as a stop-gap
10
+ * while this file was JavaScript — protocols need the contract and importing
11
+ * the concrete class would close a cycle. It stays, but it is now *checked*
12
+ * against the implementation rather than asserted about it.
13
+ */
14
+ declare class EntryPoint implements NetworkEntryPoint {
15
+ config: ServerConfiguration;
16
+ protocols: Map<string, Protocol<unknown>>;
17
+ private readonly _clients;
6
18
  accessLogger: AccessLogger;
7
19
  isShuttingDown: boolean;
8
- logger: import("../../kuzzle/Logger").Logger;
9
- dispatch(event: any, data: any): void;
20
+ logger: ReturnType<typeof global.kuzzle.log.child>;
21
+ constructor();
22
+ dispatch(event: string, data: JSONObject): void;
10
23
  /**
11
24
  * Initializes the InternalProtocol first to allow subscriptions
12
25
  * in plugins init() method.
13
26
  *
14
27
  * @returns {Promise}
15
28
  */
16
- init(): Promise<any>;
29
+ init(): Promise<boolean>;
17
30
  /**
18
31
  * Starts the network protocols.
19
32
  * Every protocol is listening for request after this call
20
33
  *
21
34
  * @returns {Promise}
22
35
  */
23
- startListening(): Promise<any>;
36
+ startListening(): Promise<void>;
24
37
  /**
25
38
  * On client subscribing to a channel, dispatch the information
26
39
  * to the protocol.
@@ -29,7 +42,7 @@ declare class EntryPoint {
29
42
  * @param {string} connectionId
30
43
  */
31
44
  joinChannel(channel: string, connectionId: string): void;
32
- leaveChannel(channel: any, connectionId: any): void;
45
+ leaveChannel(channel: string, connectionId: string): void;
33
46
  /**
34
47
  * Loads installed protocols in memory
35
48
  */
@@ -39,13 +52,13 @@ declare class EntryPoint {
39
52
  * @param {Request} request
40
53
  * @param {object} extra
41
54
  */
42
- logAccess(connection: ClientConnection, request: Request, extra?: object): void;
55
+ logAccess(connection: ClientConnection, request: KuzzleRequest, extra?: AccessLogExtra | null): void;
43
56
  /**
44
57
  * @param {ClientConnection} connection
45
58
  * @param {Request} request
46
59
  * @param cb
47
60
  */
48
- execute(connection: ClientConnection, request: Request, cb: any): void;
61
+ execute(connection: ClientConnection, request: KuzzleRequest, cb: (response: JSONObject) => void): void;
49
62
  /**
50
63
  *
51
64
  * @param {ClientConnection} connection
@@ -55,8 +68,17 @@ declare class EntryPoint {
55
68
  * @param {string} connectionId
56
69
  */
57
70
  removeConnection(connectionId: string): void;
58
- _broadcast(data: any): void;
59
- _isShuttingDownError(connection: any, request: any, cb: any): void;
60
- _notify(data: any): void;
71
+ _broadcast(data: JSONObject): void;
72
+ /**
73
+ * The protocol a client is connected through.
74
+ *
75
+ * The three callers each guard `client?.protocol` and then read the map
76
+ * with it, unchecked: a connection naming a protocol this entry point does
77
+ * not have is what the `try` around each of them was already for, so the
78
+ * throw lands where the log already is.
79
+ */
80
+ private protocolOf;
81
+ _isShuttingDownError(connection: ClientConnection, request: KuzzleRequest, cb: (response: JSONObject) => void): void;
82
+ _notify(data: JSONObject): void;
61
83
  }
62
- import { AccessLogger } from "./accessLogger";
84
+ export = EntryPoint;
@@ -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,28 +19,69 @@
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 fs = require("fs");
23
- const path = require("path");
24
- const Bluebird = require("bluebird");
25
- const { RequestContext } = require("../../api/request");
26
- const Context = require("./context");
27
- const debug = require("../../util/debug")("kuzzle:network:embedded");
28
- const MqttProtocol = require("./protocols/mqttProtocol");
29
- const InternalProtocol = require("./protocols/internalProtocol");
30
- const HttpWsProtocol = require("./protocols/httpwsProtocol");
31
- const Manifest = require("./protocolManifest");
32
- const { removeStacktrace } = require("../../util/stackTrace");
33
- const kerror = require("../../kerror");
34
- const { AccessLogger } = require("./accessLogger");
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_assert_1 = __importDefault(require("node:assert"));
49
+ const node_fs_1 = __importDefault(require("node:fs"));
50
+ const node_path_1 = __importDefault(require("node:path"));
51
+ const node_util_1 = require("node:util");
52
+ const bluebird_1 = __importDefault(require("bluebird"));
53
+ const request_1 = require("../../api/request");
54
+ const kerror = __importStar(require("../../kerror"));
55
+ const debug_1 = __importDefault(require("../../util/debug"));
56
+ const stackTrace_1 = require("../../util/stackTrace");
57
+ const accessLogger_1 = require("./accessLogger");
58
+ const context_1 = __importDefault(require("./context"));
59
+ const protocolManifest_1 = __importDefault(require("./protocolManifest"));
60
+ const httpwsProtocol_1 = __importDefault(require("./protocols/httpwsProtocol"));
61
+ const internalProtocol_1 = __importDefault(require("./protocols/internalProtocol"));
62
+ const mqttProtocol_1 = __importDefault(require("./protocols/mqttProtocol"));
63
+ /**
64
+ * The message of whatever was thrown. Each of the five handlers below logs a
65
+ * protocol's failure and carries on; `catch` answers `unknown`.
66
+ */
67
+ function messageOf(thrown) {
68
+ return thrown instanceof Error ? thrown.message : (0, node_util_1.inspect)(thrown);
69
+ }
70
+ const debug = (0, debug_1.default)("kuzzle:network:embedded");
35
71
  const networkError = kerror.wrap("network", "entrypoint");
36
- const DEFAULT_PROTOCOLS = [HttpWsProtocol, MqttProtocol, InternalProtocol];
72
+ const DEFAULT_PROTOCOLS = [httpwsProtocol_1.default, mqttProtocol_1.default, internalProtocol_1.default];
73
+ /**
74
+ * `implements NetworkEntryPoint`: that interface was declared as a stop-gap
75
+ * while this file was JavaScript — protocols need the contract and importing
76
+ * the concrete class would close a cycle. It stays, but it is now *checked*
77
+ * against the implementation rather than asserted about it.
78
+ */
37
79
  class EntryPoint {
38
80
  constructor() {
39
81
  this.config = global.kuzzle.config.server;
40
82
  this.protocols = new Map();
41
83
  this._clients = new Map();
42
- this.accessLogger = new AccessLogger();
84
+ this.accessLogger = new accessLogger_1.AccessLogger();
43
85
  this.isShuttingDown = false;
44
86
  this.logger = global.kuzzle.log.child("core:network:entrypoint");
45
87
  }
@@ -65,11 +107,19 @@ class EntryPoint {
65
107
  * @returns {Promise}
66
108
  */
67
109
  async init() {
110
+ let internal;
68
111
  for (const ProtocolClass of DEFAULT_PROTOCOLS) {
69
112
  const protocol = new ProtocolClass();
70
113
  this.protocols.set(protocol.name, protocol);
114
+ if (protocol instanceof internalProtocol_1.default) {
115
+ internal = protocol;
116
+ }
71
117
  }
72
- return this.protocols.get("internal").init(this);
118
+ // The internal protocol is one of `DEFAULT_PROTOCOLS`, so it was fetched
119
+ // back out of the map it had just been put into, by the name it gives
120
+ // itself.
121
+ (0, node_assert_1.default)(internal !== undefined, "[network] the internal protocol is missing from the default protocols");
122
+ return internal.init(this);
73
123
  }
74
124
  /**
75
125
  * Starts the network protocols.
@@ -96,7 +146,7 @@ class EntryPoint {
96
146
  }
97
147
  }));
98
148
  }
99
- await Bluebird.all(initPromises);
149
+ await bluebird_1.default.all(initPromises);
100
150
  await this.loadMoreProtocols();
101
151
  }
102
152
  /**
@@ -109,62 +159,66 @@ class EntryPoint {
109
159
  joinChannel(channel, connectionId) {
110
160
  debug('[server] client "%s" joining channel "%s"', connectionId, channel);
111
161
  const client = this._clients.get(connectionId);
112
- if (!client || !client.protocol) {
162
+ if (!client?.protocol) {
113
163
  return;
114
164
  }
115
165
  try {
116
- this.protocols.get(client.protocol).joinChannel(channel, connectionId);
166
+ this.protocolOf(client).joinChannel(channel, connectionId);
117
167
  }
118
168
  catch (e) {
119
- this.logger.error(`[join] protocol ${client && client.protocol} failed: ${e.message}`);
169
+ this.logger.error(`[join] protocol ${client.protocol} failed: ${messageOf(e)}`);
120
170
  }
121
171
  }
122
172
  leaveChannel(channel, connectionId) {
123
173
  debug('[server] connection "%s" leaving channel "%s"', connectionId, channel);
124
174
  const client = this._clients.get(connectionId);
125
- if (!client || !client.protocol) {
175
+ if (!client?.protocol) {
126
176
  return;
127
177
  }
128
178
  try {
129
- this.protocols.get(client.protocol).leaveChannel(channel, connectionId);
179
+ this.protocolOf(client).leaveChannel(channel, connectionId);
130
180
  }
131
181
  catch (e) {
132
- this.logger.error(`[leave channel] protocol ${client && client.protocol} failed: ${e.message}`);
182
+ this.logger.error(`[leave channel] protocol ${client.protocol} failed: ${messageOf(e)}`);
133
183
  }
134
184
  }
135
185
  /**
136
186
  * Loads installed protocols in memory
137
187
  */
138
188
  async loadMoreProtocols() {
139
- const dir = path.join(__dirname, "../../../protocols/enabled");
189
+ const dir = node_path_1.default.join(__dirname, "../../../protocols/enabled");
140
190
  let dirs;
141
191
  try {
142
- dirs = fs.readdirSync(dir);
192
+ dirs = node_fs_1.default.readdirSync(dir);
143
193
  }
144
- catch (e) {
194
+ catch {
145
195
  // ignore if there is no protocols directory
146
196
  return;
147
197
  }
148
198
  dirs = dirs
149
- .map((d) => path.join(dir, d))
150
- .filter((d) => fs.statSync(d).isDirectory());
151
- await Bluebird.map(dirs, (protoDir) => {
199
+ .map((d) => node_path_1.default.join(dir, d))
200
+ .filter((d) => node_fs_1.default.statSync(d).isDirectory());
201
+ await bluebird_1.default.map(dirs, (protoDir) => {
202
+ // A protocol is loaded from disk at runtime: the path is only known then.
203
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
152
204
  const protocol = new (require(protoDir))();
153
- const manifest = new Manifest(protoDir, protocol);
154
- manifest.load();
205
+ const manifest = new protocolManifest_1.default(protoDir, protocol);
206
+ // `load()` answers the name it validated: the field stays nullable
207
+ // because it is null until this call.
208
+ const { name } = manifest.load();
155
209
  const initTimeout = global.kuzzle.config.services.common.defaultInitTimeout;
156
- return Bluebird.resolve()
157
- .then(() => protocol.init(this, new Context()))
210
+ return bluebird_1.default.resolve()
211
+ .then(() => protocol.init(this, new context_1.default()))
158
212
  .catch((error) => {
159
- this.logger.error(`Error during "${manifest.name}" protocol init:`);
213
+ this.logger.error(`Error during "${name}" protocol init:`);
160
214
  throw error;
161
215
  })
162
- .timeout(initTimeout, `Protocol "${manifest.name}" initialization timed out after ${initTimeout}ms. Try to increase the configuration "services.common.defaultInitTimeout".`)
216
+ .timeout(initTimeout, `Protocol "${name}" initialization timed out after ${initTimeout}ms. Try to increase the configuration "services.common.defaultInitTimeout".`)
163
217
  .then(() => {
164
- if (this.protocols.has(manifest.name)) {
165
- throw kerror.get("protocol", "runtime", "already_exists", manifest.name);
218
+ if (this.protocols.has(name)) {
219
+ throw kerror.get("protocol", "runtime", "already_exists", name);
166
220
  }
167
- this.protocols.set(manifest.name, protocol);
221
+ this.protocols.set(name, protocol);
168
222
  });
169
223
  });
170
224
  }
@@ -200,7 +254,7 @@ class EntryPoint {
200
254
  }
201
255
  this.logAccess(connection, _res);
202
256
  const response = _res.response.toJSON();
203
- cb(removeStacktrace(response));
257
+ cb((0, stackTrace_1.removeStacktrace)(response));
204
258
  });
205
259
  }
206
260
  /**
@@ -210,7 +264,7 @@ class EntryPoint {
210
264
  newConnection(connection) {
211
265
  this._clients.set(connection.id, connection);
212
266
  global.kuzzle.emit("connection:new", connection);
213
- global.kuzzle.router.newConnection(new RequestContext({ connection }));
267
+ global.kuzzle.router.newConnection(new request_1.RequestContext({ connection }));
214
268
  debug("New connection created: %s (protocol: %s)", connection.id, connection.protocol);
215
269
  }
216
270
  /**
@@ -220,40 +274,57 @@ class EntryPoint {
220
274
  const connection = this._clients.get(connectionId);
221
275
  if (connection) {
222
276
  global.kuzzle.emit("connection:remove", connection);
223
- global.kuzzle.router.removeConnection(new RequestContext({ connection }));
277
+ global.kuzzle.router.removeConnection(new request_1.RequestContext({ connection }));
224
278
  this._clients.delete(connectionId);
225
279
  debug("Removed connection: %s (protocol: %s)", connection.id, connection.protocol);
226
280
  }
227
281
  }
228
282
  // --------------------------------------------------------------------
229
283
  _broadcast(data) {
230
- const sanitized = removeStacktrace(data);
284
+ const sanitized = (0, stackTrace_1.removeStacktrace)(data);
231
285
  debug("[server] broadcasting data through all protocols: %a", sanitized);
232
286
  for (const [name, protocol] of this.protocols.entries()) {
233
287
  try {
234
288
  protocol.broadcast(sanitized);
235
289
  }
236
290
  catch (e) {
237
- this.logger.error(`[broadcast] protocol ${name} failed: ${e.message}\n${e.stack}`);
291
+ this.logger.error(`[broadcast] protocol ${name} failed: ${messageOf(e)}\n${e instanceof Error ? e.stack : ""}`);
238
292
  }
239
293
  }
240
294
  }
295
+ /**
296
+ * The protocol a client is connected through.
297
+ *
298
+ * The three callers each guard `client?.protocol` and then read the map
299
+ * with it, unchecked: a connection naming a protocol this entry point does
300
+ * not have is what the `try` around each of them was already for, so the
301
+ * throw lands where the log already is.
302
+ */
303
+ protocolOf(client) {
304
+ const protocol = client.protocol === null
305
+ ? undefined
306
+ : this.protocols.get(client.protocol);
307
+ if (protocol === undefined) {
308
+ throw kerror.get("protocol", "runtime", "invalid_connection", client.protocol);
309
+ }
310
+ return protocol;
311
+ }
241
312
  _isShuttingDownError(connection, request, cb) {
242
313
  request.setError(networkError.get("shutting_down"));
243
314
  this.logAccess(connection, request);
244
- cb(removeStacktrace(request.response.toJSON()));
315
+ cb((0, stackTrace_1.removeStacktrace)(request.response.toJSON()));
245
316
  }
246
317
  _notify(data) {
247
318
  debug('[server] sending notification to client with connection id "%s": %a', data.connectionId, data);
248
319
  const client = this._clients.get(data.connectionId);
249
- if (!client || !client.protocol) {
320
+ if (!client?.protocol) {
250
321
  return;
251
322
  }
252
323
  try {
253
- this.protocols.get(client.protocol).notify(removeStacktrace(data));
324
+ this.protocolOf(client).notify((0, stackTrace_1.removeStacktrace)(data));
254
325
  }
255
326
  catch (e) {
256
- this.logger.error(`[notify] protocol ${client.protocol} failed: ${e.message}`);
327
+ this.logger.error(`[notify] protocol ${client.protocol} failed: ${messageOf(e)}`);
257
328
  }
258
329
  }
259
330
  }
@@ -1,85 +1,55 @@
1
- export = Router;
1
+ import type HttpMessage from "../protocols/httpMessage";
2
+ import RoutePart from "./routePart";
3
+ import type { RouteCallback, RouteHandlerFunction } from "./routeTypes";
2
4
  /**
3
- * Attach handler to routes and dispatch a HTTP
4
- * message to the right handler
5
+ * Attach handler to routes and dispatch a HTTP message to the right handler
5
6
  *
6
7
  * Handlers will be called with the following arguments:
7
8
  * - request: received HTTP request
8
9
  * - response: HTTP response object
9
10
  * - data: URL query arguments and/or POST data, if any
10
- *
11
- * @class Router
12
11
  */
13
12
  declare class Router {
14
- defaultHeaders: {
15
- "Accept-Encoding": string;
16
- "Access-Control-Allow-Headers": string;
17
- "Access-Control-Allow-Methods": string;
18
- "content-type": string;
19
- };
20
- routes: {
21
- DELETE: RoutePart;
22
- GET: RoutePart;
23
- HEAD: RoutePart;
24
- PATCH: RoutePart;
25
- POST: RoutePart;
26
- PUT: RoutePart;
27
- };
13
+ defaultHeaders: Record<string, string>;
14
+ routes: Record<HttpVerb, RoutePart>;
15
+ constructor();
28
16
  /**
29
17
  * Attach a handler to a GET HTTP route
30
- *
31
- * @param {string} path
32
- * @param {Function} handler
33
18
  */
34
- get(path: string, handler: Function): void;
19
+ get(path: string, handler: RouteHandlerFunction): void;
35
20
  /**
36
21
  * Attach a handler to a POST HTTP route
37
- *
38
- * @param {string} path
39
- * @param {Function} handler
40
22
  */
41
- post(path: string, handler: Function): void;
23
+ post(path: string, handler: RouteHandlerFunction): void;
42
24
  /**
43
25
  * Attach a handler to a PUT HTTP route
44
- *
45
- * @param {string} path
46
- * @param {Function} handler
47
26
  */
48
- put(path: string, handler: Function): void;
27
+ put(path: string, handler: RouteHandlerFunction): void;
49
28
  /**
50
29
  * Attach a handler to a PATCH HTTP route
51
- *
52
- * @param {string} path
53
- * @param {Function} handler
54
30
  */
55
- patch(path: string, handler: Function): void;
31
+ patch(path: string, handler: RouteHandlerFunction): void;
56
32
  /**
57
33
  * Attach a handler to a DELETE HTTP route
58
- *
59
- * @param {string} path
60
- * @param {Function} handler
61
34
  */
62
- delete(path: string, handler: Function): void;
35
+ delete(path: string, handler: RouteHandlerFunction): void;
63
36
  /**
64
37
  * Attach a handler to a HEAD HTTP route
65
- *
66
- * @param {string} path
67
- * @param {Function} handler
68
38
  */
69
- head(path: string, handler: Function): void;
39
+ head(path: string, handler: RouteHandlerFunction): void;
70
40
  /**
71
41
  * Route an incoming HTTP message to the right handler
72
42
  *
73
- * @param {HttpMessage} message - Parsed HTTP message
74
- * @param {function} cb
43
+ * @param message - Parsed HTTP message
75
44
  */
76
- route(message: HttpMessage, cb: Function): void;
45
+ route(message: HttpMessage, cb: RouteCallback): void;
77
46
  /**
78
47
  * Route HTTP messages using an HTTP method that is not handled by Kuzzle's
79
48
  * API, such as OPTIONS.
80
- * @param {HttpMessage} message
81
- * @param {function} cb
82
49
  */
83
- routeUnhandledHttpMethod(message: HttpMessage, cb: Function): void;
50
+ routeUnhandledHttpMethod(message: HttpMessage, cb: RouteCallback): void;
84
51
  }
85
- import RoutePart = require("./routePart");
52
+ /** The HTTP verbs this router attaches handlers for. */
53
+ declare const HTTP_VERBS: readonly ["DELETE", "GET", "HEAD", "PATCH", "POST", "PUT"];
54
+ type HttpVerb = (typeof HTTP_VERBS)[number];
55
+ export = Router;