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,23 +19,23 @@
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 { Request } = require("../../../api/request");
23
- const { KuzzleError } = require("../../../kerror/errors");
24
- const RoutePart = require("./routePart");
25
- const { has } = require("../../../util/safeObject");
26
- const kerror = require("../../../kerror").wrap("network", "http");
27
- const debug = require("../../../util/debug")("kuzzle:http:router");
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ const request_1 = require("../../../api/request");
26
+ const kerror_1 = require("../../../kerror");
27
+ const errors_1 = require("../../../kerror/errors");
28
+ const debug_1 = __importDefault(require("../../../util/debug"));
29
+ const routePart_1 = __importDefault(require("./routePart"));
30
+ const kerror = (0, kerror_1.wrap)("network", "http");
31
+ const debug = (0, debug_1.default)("kuzzle:http:router");
28
32
  /**
29
- * Attach handler to routes and dispatch a HTTP
30
- * message to the right handler
33
+ * Attach handler to routes and dispatch a HTTP message to the right handler
31
34
  *
32
35
  * Handlers will be called with the following arguments:
33
36
  * - request: received HTTP request
34
37
  * - response: HTTP response object
35
38
  * - data: URL query arguments and/or POST data, if any
36
- *
37
- * @class Router
38
39
  */
39
40
  class Router {
40
41
  constructor() {
@@ -51,69 +52,51 @@ class Router {
51
52
  this.defaultHeaders["Accept-Encoding"] = "gzip,deflate,identity";
52
53
  }
53
54
  this.routes = {
54
- DELETE: new RoutePart(),
55
- GET: new RoutePart(),
56
- HEAD: new RoutePart(),
57
- PATCH: new RoutePart(),
58
- POST: new RoutePart(),
59
- PUT: new RoutePart(),
55
+ DELETE: new routePart_1.default(),
56
+ GET: new routePart_1.default(),
57
+ HEAD: new routePart_1.default(),
58
+ PATCH: new routePart_1.default(),
59
+ POST: new routePart_1.default(),
60
+ PUT: new routePart_1.default(),
60
61
  };
61
62
  // Add an automatic HEAD route on the '/' url, answering with default headers
62
63
  attach("/", (request, cb) => {
63
- request.setResult({}, 200);
64
+ request.response.configure({ result: {}, status: 200 });
64
65
  cb(request);
65
66
  }, this.routes.HEAD);
66
67
  }
67
68
  /**
68
69
  * Attach a handler to a GET HTTP route
69
- *
70
- * @param {string} path
71
- * @param {Function} handler
72
70
  */
73
71
  get(path, handler) {
74
72
  attach(path, handler, this.routes.GET);
75
73
  }
76
74
  /**
77
75
  * Attach a handler to a POST HTTP route
78
- *
79
- * @param {string} path
80
- * @param {Function} handler
81
76
  */
82
77
  post(path, handler) {
83
78
  attach(path, handler, this.routes.POST);
84
79
  }
85
80
  /**
86
81
  * Attach a handler to a PUT HTTP route
87
- *
88
- * @param {string} path
89
- * @param {Function} handler
90
82
  */
91
83
  put(path, handler) {
92
84
  attach(path, handler, this.routes.PUT);
93
85
  }
94
86
  /**
95
87
  * Attach a handler to a PATCH HTTP route
96
- *
97
- * @param {string} path
98
- * @param {Function} handler
99
88
  */
100
89
  patch(path, handler) {
101
90
  attach(path, handler, this.routes.PATCH);
102
91
  }
103
92
  /**
104
93
  * Attach a handler to a DELETE HTTP route
105
- *
106
- * @param {string} path
107
- * @param {Function} handler
108
94
  */
109
95
  delete(path, handler) {
110
96
  attach(path, handler, this.routes.DELETE);
111
97
  }
112
98
  /**
113
99
  * Attach a handler to a HEAD HTTP route
114
- *
115
- * @param {string} path
116
- * @param {Function} handler
117
100
  */
118
101
  head(path, handler) {
119
102
  attach(path, handler, this.routes.HEAD);
@@ -121,30 +104,33 @@ class Router {
121
104
  /**
122
105
  * Route an incoming HTTP message to the right handler
123
106
  *
124
- * @param {HttpMessage} message - Parsed HTTP message
125
- * @param {function} cb
107
+ * @param message - Parsed HTTP message
126
108
  */
127
109
  route(message, cb) {
128
110
  debug("Routing HTTP message: %a", message);
129
- if (!has(this.routes, message.method)) {
111
+ const method = message.method;
112
+ if (!isHttpVerb(method)) {
130
113
  this.routeUnhandledHttpMethod(message, cb);
131
114
  return;
132
115
  }
133
116
  let routeHandler;
134
117
  try {
135
- routeHandler = this.routes[message.method].getHandler(message);
118
+ routeHandler = this.routes[method].getHandler(message);
136
119
  // Set Headers if not present
137
120
  routeHandler.request.response.setHeaders(this.defaultHeaders, true);
138
121
  applyACAOHeader(message, routeHandler.request);
139
- if (routeHandler.handler === null) {
122
+ // Read once and invoke here: `invokeHandler` used to re-read the field
123
+ // this check had just proved non-null, one call away from the proof.
124
+ const handler = routeHandler.handler;
125
+ if (handler === null) {
140
126
  throw kerror.get("url_not_found", routeHandler.url);
141
127
  }
142
- routeHandler.invokeHandler(cb);
128
+ handler(routeHandler.request, cb);
143
129
  }
144
130
  catch (err) {
145
131
  let request;
146
- if (!routeHandler || !routeHandler._request) {
147
- request = new Request({ requestId: message.requestId }, {});
132
+ if (!routeHandler?._request) {
133
+ request = new request_1.Request({ requestId: message.requestId }, {});
148
134
  // Set Headers if not present
149
135
  request.response.setHeaders(this.defaultHeaders, true);
150
136
  applyACAOHeader(message, request);
@@ -152,7 +138,7 @@ class Router {
152
138
  else {
153
139
  request = routeHandler.request;
154
140
  }
155
- const e = err instanceof KuzzleError
141
+ const e = err instanceof errors_1.KuzzleError
156
142
  ? err
157
143
  : kerror.getFrom(err, "unexpected_error", err.message);
158
144
  replyWithError(cb, request, e);
@@ -161,17 +147,15 @@ class Router {
161
147
  /**
162
148
  * Route HTTP messages using an HTTP method that is not handled by Kuzzle's
163
149
  * API, such as OPTIONS.
164
- * @param {HttpMessage} message
165
- * @param {function} cb
166
150
  */
167
151
  routeUnhandledHttpMethod(message, cb) {
168
- const requestContext = global.kuzzle.router.connections.get(message.connection.id), request = new Request({ requestId: message.requestId }, requestContext && requestContext.toJSON());
152
+ const requestContext = global.kuzzle.router.connections.get(message.connection.id), request = new request_1.Request({ requestId: message.requestId }, requestContext?.toJSON());
169
153
  // Set Headers if not present
170
154
  request.response.setHeaders(this.defaultHeaders, true);
171
155
  applyACAOHeader(message, request);
172
156
  if (message.method === "OPTIONS") {
173
157
  request.input.headers = message.headers;
174
- request.setResult({}, 200);
158
+ request.response.configure({ result: {}, status: 200 });
175
159
  global.kuzzle.pipe("http:options", request, (error, result) => {
176
160
  if (error) {
177
161
  replyWithError(cb, request, error);
@@ -186,46 +170,55 @@ class Router {
186
170
  }
187
171
  }
188
172
  /**
189
- * Set the Header Access-Control-Allow-Origin based on the kuzzle configuration and request origin
190
- *
191
- * @param {HttpMessage} message
192
- * @param {Request} request
173
+ * Set the Header Access-Control-Allow-Origin based on the kuzzle configuration
174
+ * and request origin
193
175
  */
194
176
  function applyACAOHeader(message, request) {
195
- if (message.headers && message.headers.origin) {
177
+ if (message.headers?.origin) {
196
178
  request.response.setHeaders({
197
179
  "Access-Control-Allow-Origin": message.headers.origin,
198
180
  Vary: "Origin",
199
181
  }, true);
200
182
  }
201
183
  }
184
+ /** The HTTP verbs this router attaches handlers for. */
185
+ const HTTP_VERBS = ["DELETE", "GET", "HEAD", "PATCH", "POST", "PUT"];
186
+ /** The same list as a set, which is what `isHttpVerb` asks. */
187
+ const HTTP_VERB_SET = new Set(HTTP_VERBS);
202
188
  /**
203
- * Attach a handler to an path and stores it to the target object
204
- *
205
- * @param {string} path
206
- * @param {Function} handler
207
- * @param {RoutePart} target
189
+ * Whether an incoming message names one of them. `has(this.routes, method)`
190
+ * answered the same question, without telling the compiler which key it had
191
+ * just proved — so the six named route parts had to be `RoutePart |
192
+ * undefined` for its sake.
193
+ */
194
+ function isHttpVerb(method) {
195
+ return HTTP_VERB_SET.has(method);
196
+ }
197
+ /**
198
+ * Attach a handler to a path and stores it to the target object
208
199
  */
209
200
  function attach(path, handler, target) {
210
- const sanitized = path[path.length - 1] === "/" ? path.slice(0, -1) : path;
201
+ const sanitized = path.at(-1) === "/" ? path.slice(0, -1) : path;
211
202
  if (!attachParts(sanitized.split("/"), handler, target)) {
212
203
  throw kerror.get("duplicate_url", sanitized);
213
204
  }
214
205
  }
215
206
  /**
216
- *
217
- * @param {Array<string>} parts
218
- * @param {Function} routeHandler
219
- * @param {RoutePart} target
220
- * @param {Array<string>} placeholders
221
- * @returns {Boolean} If false, failed to attach because of a duplicate
207
+ * @returns If false, failed to attach because of a duplicate
222
208
  */
223
209
  function attachParts(parts, handler, target, placeholders = []) {
224
210
  let part;
225
211
  do {
226
212
  part = parts.shift();
227
- } while (parts.length > 0 && part.length === 0);
228
- if (part && part[0] === ":") {
213
+ // `part?.length`: an exhausted list answers undefined, which is not an
214
+ // empty part to skip over — it is the end of the loop.
215
+ } while (parts.length > 0 && part?.length === 0);
216
+ if (part === undefined) {
217
+ // `attach()` splits a path, so there is always a first part — the empty
218
+ // string for "/". Nothing to attach here.
219
+ return false;
220
+ }
221
+ if (part.startsWith(":")) {
229
222
  placeholders.push(part.substring(1));
230
223
  part = "*";
231
224
  }
@@ -242,17 +235,10 @@ function attachParts(parts, handler, target, placeholders = []) {
242
235
  }
243
236
  /**
244
237
  * Reply to a callback function with an HTTP error
245
- *
246
- * @param {function} cb
247
- * @param {Request} request
248
- * @param {Error} error
249
238
  */
250
239
  function replyWithError(cb, request, error) {
251
240
  request.setError(error);
252
241
  cb(request);
253
242
  }
254
- /**
255
- * @type {Router}
256
- */
257
243
  module.exports = Router;
258
244
  //# sourceMappingURL=index.js.map
@@ -1,46 +1,31 @@
1
- export = RouteHandler;
1
+ import type { JSONObject } from "../../../types/JSONObject";
2
+ import { Request } from "../../../api/request";
3
+ import type HttpMessage from "../protocols/httpMessage";
4
+ import type { RouteHandlerFunction } from "./routeTypes";
2
5
  /**
3
- * Object returned by routePart.getHandler(),
4
- * containing the information gathered about
5
- * a requested route and the corresponding handler
6
- * to invoke
6
+ * Object returned by routePart.getHandler(), containing the information
7
+ * gathered about a requested route and the corresponding handler to invoke
7
8
  *
8
- * @class RouteHandler
9
- * @param {string} url - parsed URL
10
- * @param {object} query - parsed query string
11
- * @param {HttpMessage} message
12
9
  * @throws {BadRequestError} If x-kuzzle-volatile HTTP header can not be parsed
13
10
  * in JSON format
14
11
  */
15
12
  declare class RouteHandler {
16
- constructor(url: any, query: any, message: any);
17
- handler: any;
18
- _request: Request;
19
- url: any;
20
- data: any;
13
+ handler: RouteHandlerFunction | null;
14
+ url: string;
15
+ data: JSONObject;
21
16
  connection: {
22
- connection: {
23
- headers: any;
24
- id: any;
25
- ips: any;
26
- path: any;
27
- protocol: string;
28
- url: any;
29
- verb: any;
30
- };
17
+ connection: JSONObject;
31
18
  };
19
+ _request: Request | null;
20
+ constructor(url: string, query: JSONObject, message: HttpMessage);
32
21
  get request(): Request;
33
22
  /**
34
23
  * Add a parametric argument to the request object
35
- * @param {string} name
36
- * @param {string} value
37
- */
38
- addArgument(name: string, value: string): void;
39
- /**
40
- * Invokes the registered handler
41
24
  *
42
- * @param {Function} callback
25
+ * `value` is optional because its only caller pairs a route's placeholder
26
+ * names with the values collected during the descent, and a name with no
27
+ * value has always been written through as `undefined` rather than skipped.
43
28
  */
44
- invokeHandler(callback: Function): void;
29
+ addArgument(name: string, value: string | undefined): void;
45
30
  }
46
- import { Request } from "../../../api/request/kuzzleRequest";
31
+ export = RouteHandler;
@@ -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,19 +19,13 @@
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 { Request } = require("../../../api/request");
23
- const kerror = require("../../../kerror").wrap("network", "http");
22
+ const request_1 = require("../../../api/request");
23
+ const kerror_1 = require("../../../kerror");
24
+ const kerror = (0, kerror_1.wrap)("network", "http");
24
25
  /**
25
- * Object returned by routePart.getHandler(),
26
- * containing the information gathered about
27
- * a requested route and the corresponding handler
28
- * to invoke
26
+ * Object returned by routePart.getHandler(), containing the information
27
+ * gathered about a requested route and the corresponding handler to invoke
29
28
  *
30
- * @class RouteHandler
31
- * @param {string} url - parsed URL
32
- * @param {object} query - parsed query string
33
- * @param {HttpMessage} message
34
29
  * @throws {BadRequestError} If x-kuzzle-volatile HTTP header can not be parsed
35
30
  * in JSON format
36
31
  */
@@ -51,51 +46,46 @@ class RouteHandler {
51
46
  ips: message.ips,
52
47
  path: message.path,
53
48
  protocol: "http",
54
- // @deprecated use "path" instead
55
- url: message.url,
49
+ // the request context's own deprecated alias of "path"
50
+ url: message.path,
56
51
  verb: message.method,
57
52
  },
58
53
  };
59
- for (const k of Object.keys(message.headers)) {
60
- if (k.toLowerCase() === "authorization" &&
61
- message.headers[k].toLowerCase().startsWith("bearer ")) {
62
- this.data.jwt = message.headers[k].substring("Bearer ".length);
54
+ // `Object.entries` rather than `Object.keys` + three indexed reads: the
55
+ // value comes back with the key, so there is nothing to look up twice and
56
+ // nothing for `noUncheckedIndexedAccess` to object to.
57
+ for (const [name, value] of Object.entries(message.headers)) {
58
+ if (name.toLowerCase() === "authorization" &&
59
+ value.toLowerCase().startsWith("bearer ")) {
60
+ this.data.jwt = value.substring("Bearer ".length);
63
61
  }
64
- else if (k.toLowerCase() === "x-kuzzle-volatile") {
62
+ else if (name.toLowerCase() === "x-kuzzle-volatile") {
65
63
  try {
66
- this.data.volatile = JSON.parse(message.headers[k]);
64
+ this.data.volatile = JSON.parse(value);
67
65
  }
68
66
  catch (e) {
69
- throw kerror.getFrom(e, "volatile_parse_failed", e.message);
67
+ // A malformed header is whatever JSON.parse threw, which is a
68
+ // SyntaxError in practice but is not typed as one.
69
+ const error = e instanceof Error ? e : new Error(String(e));
70
+ throw kerror.getFrom(error, "volatile_parse_failed", error.message);
70
71
  }
71
72
  }
72
73
  }
73
74
  }
74
75
  get request() {
75
- if (this._request === null) {
76
- this._request = new Request(this.data, this.connection);
77
- }
76
+ this._request ?? (this._request = new request_1.Request(this.data, this.connection));
78
77
  return this._request;
79
78
  }
80
79
  /**
81
80
  * Add a parametric argument to the request object
82
- * @param {string} name
83
- * @param {string} value
81
+ *
82
+ * `value` is optional because its only caller pairs a route's placeholder
83
+ * names with the values collected during the descent, and a name with no
84
+ * value has always been written through as `undefined` rather than skipped.
84
85
  */
85
86
  addArgument(name, value) {
86
87
  this.data[name] = value;
87
88
  }
88
- /**
89
- * Invokes the registered handler
90
- *
91
- * @param {Function} callback
92
- */
93
- invokeHandler(callback) {
94
- this.handler(this.request, callback);
95
- }
96
89
  }
97
- /**
98
- * @type {RouteHandler}
99
- */
100
90
  module.exports = RouteHandler;
101
91
  //# sourceMappingURL=routeHandler.js.map
@@ -1,35 +1,26 @@
1
- export = RoutePart;
1
+ import type HttpMessage from "../protocols/httpMessage";
2
+ import RouteHandler from "./routeHandler";
3
+ import type { RouteHandlerFunction } from "./routeTypes";
2
4
  /**
3
5
  * Defines a new route part
4
- *
5
- * @class RoutePart
6
6
  */
7
7
  declare class RoutePart {
8
- subparts: {};
9
- placeholders: any;
10
- handler: any;
8
+ subparts: Record<string, RoutePart>;
9
+ placeholders: string[] | null;
10
+ handler: RouteHandlerFunction | null;
11
+ constructor();
11
12
  /**
12
13
  * Checks if an url part already exists
13
- *
14
- * @param {string} part
15
- * @returns {boolean}
16
14
  */
17
15
  exists(part: string): boolean;
18
16
  /**
19
- * Gets the next element of an URL part, creating a new
20
- * tree leaf if necessary
21
- *
22
- * @param {string} part
23
- * @returns {RoutePart}
17
+ * Gets the next element of an URL part, creating a new tree leaf if necessary
24
18
  */
25
19
  getNext(part: string): RoutePart;
26
20
  /**
27
21
  * Returns a RouteHandler instance corresponding to the provided URL
28
22
  * Returns null if no handler was found
29
- *
30
- * @param {HttpMessage} message
31
- * @returns {RouteHandler} registered function handler
32
23
  */
33
24
  getHandler(message: HttpMessage): RouteHandler;
34
25
  }
35
- import RouteHandler = require("./routeHandler");
26
+ export = RoutePart;
@@ -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,100 +19,117 @@
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 URL = require("url");
23
- const querystring = require("querystring");
24
- const RouteHandler = require("./routeHandler");
25
- const { has } = require("../../../util/safeObject");
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 querystring = __importStar(require("node:querystring"));
49
+ const URL = __importStar(require("node:url"));
50
+ const routeHandler_1 = __importDefault(require("./routeHandler"));
26
51
  /**
27
52
  * Defines a new route part
28
- *
29
- * @class RoutePart
30
53
  */
31
54
  class RoutePart {
32
55
  constructor() {
33
- this.subparts = {};
56
+ // Null-prototype: URL parts are attacker-controlled, and `{}` answers
57
+ // `subparts["toString"]` with a function. That is why every read below used
58
+ // to go through `has()` first; with no prototype to inherit from, a single
59
+ // indexed read is both safe and honest — it is `RoutePart | undefined`, and
60
+ // nothing has to be taken on trust between the check and the use.
61
+ this.subparts = Object.create(null);
34
62
  this.placeholders = null;
35
63
  this.handler = null;
36
64
  }
37
65
  /**
38
66
  * Checks if an url part already exists
39
- *
40
- * @param {string} part
41
- * @returns {boolean}
42
67
  */
43
68
  exists(part) {
44
- return (this.subparts[part] !== undefined && this.subparts[part].handler !== null);
69
+ const subpart = this.subparts[part];
70
+ return subpart !== undefined && subpart.handler !== null;
45
71
  }
46
72
  /**
47
- * Gets the next element of an URL part, creating a new
48
- * tree leaf if necessary
49
- *
50
- * @param {string} part
51
- * @returns {RoutePart}
73
+ * Gets the next element of an URL part, creating a new tree leaf if necessary
52
74
  */
53
75
  getNext(part) {
54
- if (!has(this.subparts, part)) {
55
- this.subparts[part] = new RoutePart();
76
+ let subpart = this.subparts[part];
77
+ if (subpart === undefined) {
78
+ subpart = new RoutePart();
79
+ this.subparts[part] = subpart;
56
80
  }
57
- return this.subparts[part];
81
+ return subpart;
58
82
  }
59
83
  /**
60
84
  * Returns a RouteHandler instance corresponding to the provided URL
61
85
  * Returns null if no handler was found
62
- *
63
- * @param {HttpMessage} message
64
- * @returns {RouteHandler} registered function handler
65
86
  */
66
87
  getHandler(message) {
67
88
  // Do not use WHATWG API yet, stick with the legacy (and deprecated) URL
68
89
  // There are two issues:
69
90
  // - Heavy performance impact: https://github.com/nodejs/node/issues/30334
70
91
  // - Double slash bug: https://github.com/nodejs/node/issues/30776
71
- const parsed = URL.parse(message.url, true);
92
+ const parsed = URL.parse(message.path, true);
72
93
  let pathname = parsed.pathname || ""; // pathname is set to null if empty
73
- if (pathname[pathname.length - 1] === "/") {
94
+ if (pathname.at(-1) === "/") {
74
95
  pathname = pathname.slice(0, -1);
75
96
  }
76
- const routeHandler = new RouteHandler(pathname, parsed.query, message);
97
+ const routeHandler = new routeHandler_1.default(pathname, parsed.query, message);
77
98
  return getHandlerPart(this, pathname.split("/"), routeHandler);
78
99
  }
79
100
  }
80
101
  /**
81
102
  * Populate the routeHandler argument with parametric values, if any
82
103
  *
83
- * @param {RoutePart} routePart - tree leaf to scan
84
- * @param {Array<string>} parts
85
- * @param {RouteHandler} routeHandler - registered function handler
86
- * @param {Array<string>} placeholders - sorted array to populate the list of parametric values
87
- * @returns {RouteHandler} registered function handler
104
+ * @param routePart - tree leaf to scan
105
+ * @param routeHandler - registered function handler
106
+ * @param placeholders - sorted array to populate the list of parametric values
88
107
  */
89
108
  function getHandlerPart(routePart, parts, routeHandler, placeholders = []) {
90
- let part;
91
- do {
109
+ let part = parts.shift();
110
+ while (part?.length === 0 && parts.length > 0) {
92
111
  part = parts.shift();
93
- } while (parts.length > 0 && part.length === 0);
112
+ }
94
113
  if (part === undefined) {
95
114
  routeHandler.handler = routePart.handler;
96
115
  if (routePart.placeholders !== null) {
97
- for (const i of Object.keys(routePart.placeholders)) {
98
- routeHandler.addArgument(routePart.placeholders[i], placeholders[i]);
116
+ for (const [i, name] of routePart.placeholders.entries()) {
117
+ routeHandler.addArgument(name, placeholders[i]);
99
118
  }
100
119
  }
101
120
  return routeHandler;
102
121
  }
103
122
  part = querystring.unescape(part);
104
- if (has(routePart.subparts, part)) {
105
- return getHandlerPart(routePart.subparts[part], parts, routeHandler, placeholders);
123
+ const subpart = routePart.subparts[part];
124
+ if (subpart !== undefined) {
125
+ return getHandlerPart(subpart, parts, routeHandler, placeholders);
106
126
  }
107
- if (routePart.subparts["*"]) {
127
+ const wildcard = routePart.subparts["*"];
128
+ if (wildcard !== undefined) {
108
129
  placeholders.push(part);
109
- return getHandlerPart(routePart.subparts["*"], parts, routeHandler, placeholders);
130
+ return getHandlerPart(wildcard, parts, routeHandler, placeholders);
110
131
  }
111
132
  return routeHandler;
112
133
  }
113
- /**
114
- * @type {RoutePart}
115
- */
116
134
  module.exports = RoutePart;
117
135
  //# sourceMappingURL=routePart.js.map
@@ -0,0 +1,3 @@
1
+ import type { Request } from "../../../api/request";
2
+ export type RouteCallback = (request: Request) => void;
3
+ export type RouteHandlerFunction = (request: Request, callback: RouteCallback) => void;