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
@@ -29,6 +29,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.KuzzleDebugger = void 0;
30
30
  const inspector_1 = __importDefault(require("inspector"));
31
31
  const kerror = __importStar(require("../../kerror"));
32
+ /**
33
+ * A declared narrowing, not an assertion: `entryPoint.protocols` is typed by
34
+ * the base `Protocol`, and this is what makes the one member the debugger uses
35
+ * reachable without an `as`.
36
+ */
37
+ function isSocketRegistry(protocol) {
38
+ return (typeof protocol === "object" &&
39
+ protocol !== null &&
40
+ "socketByConnectionId" in protocol &&
41
+ protocol.socketByConnectionId instanceof Map);
42
+ }
32
43
  const DEBUGGER_EVENT = "kuzzle-debugger-event";
33
44
  class KuzzleDebugger {
34
45
  constructor() {
@@ -39,7 +50,11 @@ class KuzzleDebugger {
39
50
  this.events = new Map();
40
51
  }
41
52
  async init() {
42
- this.httpWsProtocol = global.kuzzle.entryPoint.protocols.get("websocket");
53
+ const protocol = global.kuzzle.entryPoint.protocols.get("websocket");
54
+ // Narrowed with `in` rather than `instanceof`: `protocols` is typed by the
55
+ // base class, and importing the concrete one as a *value* would add a
56
+ // runtime edge to the graph — the shape TD-49 spent a PR removing.
57
+ this.httpWsProtocol = isSocketRegistry(protocol) ? protocol : undefined;
43
58
  this.inspector = new inspector_1.default.Session();
44
59
  // Remove connection id from the list of listeners for each event
45
60
  global.kuzzle.on("connection:remove", (connectionId) => {
@@ -102,8 +117,9 @@ class KuzzleDebugger {
102
117
  await global.kuzzle.ask("cluster:node:preventEviction", false);
103
118
  // Disable debug mode for all connected sockets that still have listeners
104
119
  if (this.httpWsProtocol) {
105
- for (const eventName of this.events.keys()) {
106
- for (const connectionId of this.events.get(eventName)) {
120
+ // `values()`: the key was read only to index the map back with it.
121
+ for (const connectionIds of this.events.values()) {
122
+ for (const connectionId of connectionIds) {
107
123
  const socket = this.httpWsProtocol.socketByConnectionId.get(connectionId);
108
124
  if (socket) {
109
125
  socket.internal.debugSession = false;
@@ -220,21 +236,19 @@ class KuzzleDebugger {
220
236
  if (!this.debuggerStatus) {
221
237
  throw kerror.get("core", "debugger", "not_enabled");
222
238
  }
223
- let resolve;
224
- const promise = new Promise((res) => {
225
- resolve = res;
226
- });
227
- this.inspector.post(method, params, (err, res) => {
228
- if (err) {
229
- resolve({
230
- error: JSON.stringify(Object.getOwnPropertyDescriptors(err)),
231
- });
232
- }
233
- else {
234
- resolve(res);
235
- }
239
+ return new Promise((resolve) => {
240
+ this.inspector.post(method, params, (err, res) => {
241
+ if (err) {
242
+ resolve({
243
+ error: JSON.stringify(Object.getOwnPropertyDescriptors(err)),
244
+ });
245
+ }
246
+ else {
247
+ // The inspector answers `undefined` for a method with no result.
248
+ resolve(res ?? {});
249
+ }
250
+ });
236
251
  });
237
- return promise;
238
252
  }
239
253
  /**
240
254
  * Sends a direct notification to a websocket connection without having to listen to a specific room
@@ -1,29 +1,44 @@
1
1
  /// <reference types="node" />
2
- export class AccessLogger {
2
+ import { Worker } from "node:worker_threads";
3
+ import * as pino from "pino";
4
+ import { KuzzleRequest } from "../../api/request";
5
+ import type { ServerConfiguration } from "../../types";
6
+ import type ClientConnection from "./clientConnection";
7
+ /** What a protocol adds to an HTTP access log line */
8
+ export interface AccessLogExtra {
9
+ method: string;
10
+ url: string;
11
+ }
12
+ declare class AccessLogger {
3
13
  isActive: boolean;
4
- worker: Worker;
5
- logger: import("../../kuzzle/Logger").Logger;
14
+ worker: Worker | null;
15
+ private readonly logger;
6
16
  init(): Promise<void>;
7
- log(connection: any, request: any, extra: any): void;
17
+ log(connection: ClientConnection, request: KuzzleRequest, extra?: AccessLogExtra | null): void;
8
18
  }
9
- export class AccessLoggerWorker {
10
- constructor(config: any, anonymousUserId: any);
11
- config: any;
12
- logger: pino.Logger<never, boolean>;
13
- anonymousUserId: any;
19
+ declare class AccessLoggerWorker {
20
+ config: ServerConfiguration;
21
+ private _logger;
22
+ anonymousUserId: string;
23
+ constructor(config: ServerConfiguration, anonymousUserId: string);
24
+ /**
25
+ * The pino transport, built by `initTransport()` — which `init()` calls
26
+ * before anything is listening. The three writes below read it unchecked.
27
+ */
28
+ get logger(): pino.Logger;
29
+ set logger(logger: pino.Logger);
14
30
  init(): void;
15
31
  initTransport(): void;
16
32
  /**
17
- * @param {ClientConnection} connection
18
- * @param {Request} request
19
- * @param {String} size - response size, in bytes
20
- * @param {Object} [extra]
33
+ * @param size - response size, in bytes
21
34
  */
22
- logAccess(connection: ClientConnection, request: Request, size: string, extra?: any): void;
35
+ logAccess(connection: ClientConnection, request: KuzzleRequest, size: string, extra?: AccessLogExtra | null): void;
23
36
  /**
24
- * @param {ClientConnection} connection
37
+ * The user the access log line is attributed to: the already decoded and
38
+ * verified token stored in the request is preferred; without one, we have no
39
+ * verified identity to report.
25
40
  */
26
- getIP(connection: ClientConnection): any;
41
+ private resolveUser;
42
+ getIP(connection: ClientConnection): string;
27
43
  }
28
- import { Worker } from "node:worker_threads";
29
- import pino = require("pino");
44
+ export { AccessLogger, AccessLoggerWorker };
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /*
2
3
  * Kuzzle, a backend software, self-hostable and ready to use
3
4
  * to power modern apps
@@ -18,14 +19,47 @@
18
19
  * See the License for the specific language governing permissions and
19
20
  * limitations under the License.
20
21
  */
21
- "use strict";
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
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.AccessLoggerWorker = exports.AccessLogger = void 0;
22
50
  // winston is CPU-hungry: isolating it in a worker thread allows for a more
23
51
  // efficient CPU resources management, and more performances in the end
24
- const { Worker, isMainThread, parentPort, workerData, } = require("worker_threads");
25
- const pino = require("pino");
26
- const moment = require("moment");
27
- const { KuzzleRequest } = require("../../api/request");
28
- const ALLOWED_TRANSPORTS = ["console", "elasticsearch", "file", "syslog"];
52
+ const node_worker_threads_1 = require("node:worker_threads");
53
+ const node_assert_1 = __importDefault(require("node:assert"));
54
+ const moment_1 = __importDefault(require("moment"));
55
+ const pino = __importStar(require("pino"));
56
+ const request_1 = require("../../api/request");
57
+ const ALLOWED_TRANSPORTS = new Set([
58
+ "console",
59
+ "elasticsearch",
60
+ "file",
61
+ "syslog",
62
+ ]);
29
63
  class AccessLogger {
30
64
  constructor() {
31
65
  this.isActive = false;
@@ -35,7 +69,7 @@ class AccessLogger {
35
69
  async init() {
36
70
  const config = global.kuzzle.config.server;
37
71
  for (const out of config.logs.transports) {
38
- if (out.transport && !ALLOWED_TRANSPORTS.includes(out.transport)) {
72
+ if (out.transport && !ALLOWED_TRANSPORTS.has(out.transport)) {
39
73
  this.logger.error(`Failed to initialize logger transport "${out.transport}": unsupported transport. Skipped.`);
40
74
  }
41
75
  else {
@@ -46,7 +80,7 @@ class AccessLogger {
46
80
  return;
47
81
  }
48
82
  const anonymous = await global.kuzzle.ask("core:security:user:anonymous:get");
49
- this.worker = new Worker(__filename, {
83
+ this.worker = new node_worker_threads_1.Worker(__filename, {
50
84
  workerData: {
51
85
  anonymousUserId: anonymous._id,
52
86
  config,
@@ -69,6 +103,12 @@ class AccessLogger {
69
103
  const size = request.response
70
104
  ? Buffer.byteLength(JSON.stringify(request.response)).toString()
71
105
  : "-";
106
+ // `isActive` is what `init()` sets before building the worker, so a
107
+ // worker that is missing here means `init()` never ran — the same
108
+ // condition the early return above is for, said where it can be seen.
109
+ if (this.worker === null) {
110
+ return;
111
+ }
72
112
  try {
73
113
  this.worker.postMessage({
74
114
  connection,
@@ -82,20 +122,37 @@ class AccessLogger {
82
122
  }
83
123
  }
84
124
  }
125
+ exports.AccessLogger = AccessLogger;
85
126
  class AccessLoggerWorker {
86
127
  constructor(config, anonymousUserId) {
87
128
  this.config = config;
88
- this.logger = null;
129
+ this._logger = null;
89
130
  this.anonymousUserId = anonymousUserId;
90
131
  }
132
+ /**
133
+ * The pino transport, built by `initTransport()` — which `init()` calls
134
+ * before anything is listening. The three writes below read it unchecked.
135
+ */
136
+ get logger() {
137
+ if (this._logger === null) {
138
+ throw new Error("[network] access logger used before init()");
139
+ }
140
+ return this._logger;
141
+ }
142
+ set logger(logger) {
143
+ this._logger = logger;
144
+ }
91
145
  init() {
92
146
  this.initTransport();
93
- parentPort.on("message", ({ connection, extra, request, size }) => {
94
- this.logAccess(connection, new KuzzleRequest(request.data, request.options), size, extra);
147
+ // This module is the worker's entry point: it only runs as a worker
148
+ // thread, and `parentPort` is null only in the thread that spawned one.
149
+ (0, node_assert_1.default)(node_worker_threads_1.parentPort !== null, "[network] the access logger worker has no parent port");
150
+ node_worker_threads_1.parentPort.on("message", ({ connection, extra, request, size }) => {
151
+ this.logAccess(connection, new request_1.KuzzleRequest(request.data, request.options), size, extra);
95
152
  });
96
153
  }
97
154
  initTransport() {
98
- const transports = { targets: [] };
155
+ const targets = [];
99
156
  for (const conf of this.config.logs.transports) {
100
157
  if (conf.silent === true) {
101
158
  continue;
@@ -103,7 +160,7 @@ class AccessLoggerWorker {
103
160
  // Guarantee default transport is 'console' and retro compatibility with winston options
104
161
  switch (conf.transport || conf.preset || "console") {
105
162
  case "console":
106
- transports.targets.push({
163
+ targets.push({
107
164
  level: conf.level || "info",
108
165
  options: {
109
166
  destination: 1,
@@ -112,14 +169,14 @@ class AccessLoggerWorker {
112
169
  });
113
170
  break;
114
171
  case "elasticsearch":
115
- transports.targets.push({
172
+ targets.push({
116
173
  level: conf.level || "info",
117
- options: Object.assign({}, conf.options),
174
+ options: { ...conf.options },
118
175
  target: "pino-elasticsearch",
119
176
  });
120
177
  break;
121
178
  case "file":
122
- transports.targets.push({
179
+ targets.push({
123
180
  level: conf.level || "info",
124
181
  options: {
125
182
  append: conf.options?.append ?? true,
@@ -135,20 +192,17 @@ class AccessLoggerWorker {
135
192
  // If a pino transport configuration is used, we'll try to use it as-is and
136
193
  // assume the user installed the necessary dependencies in his Kuzzle application
137
194
  if (typeof conf.target === "string" && conf.target !== "") {
138
- transports.targets.push({
195
+ targets.push({
139
196
  level: conf.level || "info",
140
197
  options: conf.options || {},
141
198
  target: conf.target,
142
199
  });
143
200
  }
144
201
  }
145
- this.logger = pino.pino(pino.transport(transports));
202
+ this.logger = pino.pino(pino.transport({ targets }));
146
203
  }
147
204
  /**
148
- * @param {ClientConnection} connection
149
- * @param {Request} request
150
- * @param {String} size - response size, in bytes
151
- * @param {Object} [extra]
205
+ * @param size - response size, in bytes
152
206
  */
153
207
  logAccess(connection, request, size, extra = null) {
154
208
  if (this.config.logs.accessLogFormat === "logstash") {
@@ -164,57 +218,23 @@ class AccessLoggerWorker {
164
218
  });
165
219
  return;
166
220
  }
167
- // user init: prioritize the already decoded and verified token stored in
168
- // the request
169
- // If not available, then that may mean that we didn't verify the user yet,
170
- // so we have to decode any provided token
171
- let user = null;
172
- if (request.context.token !== null) {
173
- user =
174
- request.context.token.userId === this.anonymousUserId
175
- ? "(anonymous)"
176
- : request.context.token.userId;
177
- }
221
+ const user = this.resolveUser(request);
178
222
  // = apache combined
179
223
  const protocol = connection.protocol.toUpperCase();
180
224
  let url;
181
225
  let verb = "DO";
182
- if (connection.protocol.indexOf("HTTP/") === 0) {
226
+ // `extra` carries the HTTP method and url, and only an HTTP connection
227
+ // has one: the two were read on the strength of the protocol name alone.
228
+ if (connection.protocol.startsWith("HTTP/") && extra !== null) {
183
229
  verb = extra.method;
184
230
  url = extra.url;
185
231
  }
186
232
  // for other protocols than http, we rebuild a pseudo url
187
233
  else {
188
- url = `/${request.input.controller}/${request.input.action}`;
189
- if (request.input.args.index) {
190
- url += `/${request.input.args.index}`;
191
- }
192
- if (request.input.args.collection) {
193
- url += `/${request.input.args.collection}`;
194
- }
195
- if (request.input.args._id) {
196
- url += `/${request.input.args._id}`;
197
- }
198
- let queryString = "";
199
- for (const k of Object.keys(request.input.args)) {
200
- if (k === "_id" || k === "index" || k === "collection") {
201
- continue;
202
- }
203
- const val = request.input.args[k];
204
- if (queryString.length > 0) {
205
- queryString += "&";
206
- }
207
- queryString += `${k}=${typeof val === "object" ? JSON.stringify(val) : val}`;
208
- }
209
- if (queryString.length > 0) {
210
- url += `?${queryString}`;
211
- }
212
- }
213
- if (user === null) {
214
- user = "(unknown)";
234
+ url = buildPseudoUrl(request);
215
235
  }
216
236
  const ip = this.getIP(connection);
217
- const when = moment().format("DD/MMM/YYYY:HH:mm:ss ZZ");
237
+ const when = (0, moment_1.default)().format("DD/MMM/YYYY:HH:mm:ss ZZ");
218
238
  const status = request.status || "-";
219
239
  const referer = connection.headers.referer
220
240
  ? `"${connection.headers.referer}"`
@@ -225,26 +245,68 @@ class AccessLoggerWorker {
225
245
  this.logger.info({ namespace: "kuzzle:accessLogs", nodeId: global.kuzzle.id }, `${ip} - ${user} [${when}] "${verb} ${url} ${protocol}" ${status} ${size} ${referer} ${agent}`);
226
246
  }
227
247
  /**
228
- * @param {ClientConnection} connection
248
+ * The user the access log line is attributed to: the already decoded and
249
+ * verified token stored in the request is preferred; without one, we have no
250
+ * verified identity to report.
229
251
  */
252
+ resolveUser(request) {
253
+ const { token } = request.context;
254
+ if (token === null) {
255
+ return "(unknown)";
256
+ }
257
+ const user = token.userId === this.anonymousUserId ? "(anonymous)" : token.userId;
258
+ // `??` rather than a `=== null` test: a token with no userId at all used
259
+ // to log the string "undefined"
260
+ return user ?? "(unknown)";
261
+ }
230
262
  getIP(connection) {
231
263
  const { ips } = connection;
232
264
  if (ips.length === 0) {
233
265
  return "-";
234
266
  }
235
267
  const idx = Math.max(0, ips.length - 1 - this.config.logs.accessLogIpOffset);
236
- return ips[idx];
268
+ // `ips` is non-empty here — the caller builds it from the connection —
269
+ // and an offset past its start is clamped to 0 above.
270
+ return ips[idx] ?? "";
271
+ }
272
+ }
273
+ exports.AccessLoggerWorker = AccessLoggerWorker;
274
+ /**
275
+ * For protocols other than http, we rebuild a pseudo url out of the request's
276
+ * controller, action and arguments.
277
+ */
278
+ function buildPseudoUrl(request) {
279
+ let url = `/${request.input.controller}/${request.input.action}`;
280
+ if (request.input.args.index) {
281
+ url += `/${request.input.args.index}`;
282
+ }
283
+ if (request.input.args.collection) {
284
+ url += `/${request.input.args.collection}`;
285
+ }
286
+ if (request.input.args._id) {
287
+ url += `/${request.input.args._id}`;
288
+ }
289
+ let queryString = "";
290
+ for (const k of Object.keys(request.input.args)) {
291
+ if (k === "_id" || k === "index" || k === "collection") {
292
+ continue;
293
+ }
294
+ const val = request.input.args[k];
295
+ if (queryString.length > 0) {
296
+ queryString += "&";
297
+ }
298
+ queryString += `${k}=${typeof val === "object" ? JSON.stringify(val) : val}`;
299
+ }
300
+ if (queryString.length > 0) {
301
+ url += `?${queryString}`;
237
302
  }
303
+ return url;
238
304
  }
239
- if (!isMainThread) {
240
- // Needed for instantiating a serialized KuzzleRequest object
241
- global.kuzzle = { id: workerData.kuzzleId };
242
- const worker = new AccessLoggerWorker(workerData.config, workerData.anonymousUserId);
305
+ if (!node_worker_threads_1.isMainThread) {
306
+ // Needed for instantiating a serialized KuzzleRequest object: the worker
307
+ // thread has no Kuzzle instance of its own, only the node id.
308
+ global.kuzzle = { id: node_worker_threads_1.workerData.kuzzleId };
309
+ const worker = new AccessLoggerWorker(node_worker_threads_1.workerData.config, node_worker_threads_1.workerData.anonymousUserId);
243
310
  worker.init();
244
311
  }
245
- // Exposing the worker isn't necessary for production code: this is only
246
- // useful to make this class testable. I usually don't like it when tests have a
247
- // say in how the code should be written, but in this particular case, I see
248
- // no other way to correctly test this.
249
- module.exports = { AccessLogger, AccessLoggerWorker };
250
312
  //# sourceMappingURL=accessLogger.js.map
@@ -1,15 +1,17 @@
1
- export = ClientConnection;
1
+ import type { JSONObject } from "../../types/JSONObject";
2
2
  /**
3
- * @class ClientConnection
4
- * @param {string} protocol - The protocol used (http, websocket, mqtt etc)
5
- * @param {Array.<string>} ips - The list of forwarded ips (= X-Forwarded-For http header + the final ip, i.e. client, proxy1, proxy2, etc.)
6
- * @param {object} [headers] - Optional extra key-value object. I.e., for http, will receive the request headers
3
+ * @param protocol - The protocol used (http, websocket, mqtt etc)
4
+ * @param ips - The list of forwarded ips (= X-Forwarded-For http header + the
5
+ * final ip, i.e. client, proxy1, proxy2, etc.)
6
+ * @param headers - Optional extra key-value object. I.e., for http, will
7
+ * receive the request headers
7
8
  */
8
9
  declare class ClientConnection {
9
- constructor(protocol: any, ips: any, headers?: any, internal?: any);
10
- id: string;
11
- protocol: any;
12
- headers: any;
13
- internal: any;
14
- ips: any[];
10
+ readonly id: string;
11
+ readonly protocol: string;
12
+ readonly headers: JSONObject;
13
+ readonly internal: JSONObject;
14
+ readonly ips: string[];
15
+ constructor(protocol: string, ips: string[], headers?: JSONObject | null, internal?: JSONObject | null);
15
16
  }
17
+ export = ClientConnection;
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /*
2
3
  * Kuzzle, a backend software, self-hostable and ready to use
3
4
  * to power modern apps
@@ -18,14 +19,37 @@
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 { isPlainObject } = require("../../util/safeObject");
23
- const uuid = require("uuid");
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
+ const uuid = __importStar(require("uuid"));
46
+ const safeObject_1 = require("../../util/safeObject");
24
47
  /**
25
- * @class ClientConnection
26
- * @param {string} protocol - The protocol used (http, websocket, mqtt etc)
27
- * @param {Array.<string>} ips - The list of forwarded ips (= X-Forwarded-For http header + the final ip, i.e. client, proxy1, proxy2, etc.)
28
- * @param {object} [headers] - Optional extra key-value object. I.e., for http, will receive the request headers
48
+ * @param protocol - The protocol used (http, websocket, mqtt etc)
49
+ * @param ips - The list of forwarded ips (= X-Forwarded-For http header + the
50
+ * final ip, i.e. client, proxy1, proxy2, etc.)
51
+ * @param headers - Optional extra key-value object. I.e., for http, will
52
+ * receive the request headers
29
53
  */
30
54
  class ClientConnection {
31
55
  constructor(protocol, ips, headers = null, internal = null) {
@@ -37,10 +61,10 @@ class ClientConnection {
37
61
  throw new TypeError(`Expected ips to be an Array, got ${typeof ips}`);
38
62
  }
39
63
  this.ips = ips;
40
- if (isPlainObject(headers)) {
64
+ if ((0, safeObject_1.isPlainObject)(headers)) {
41
65
  this.headers = headers;
42
66
  }
43
- if (isPlainObject(internal)) {
67
+ if ((0, safeObject_1.isPlainObject)(internal)) {
44
68
  this.internal = internal;
45
69
  }
46
70
  Object.freeze(this);
@@ -1,7 +1,16 @@
1
- export = Context;
1
+ /// <reference types="lib/types/debug" />
2
+ import { BadRequestError, ExternalServiceError, ForbiddenError, GatewayTimeoutError, InternalError as KuzzleInternalError, KuzzleError, NotFoundError, PartialError, PluginImplementationError, PreconditionError, ServiceUnavailableError, SizeLimitError, TooManyRequestsError, UnauthorizedError } from "../../kerror/errors";
3
+ import { Request, RequestContext, RequestInput } from "../../api/request";
4
+ import ClientConnection from "./clientConnection";
5
+ import ProtocolBase from "./protocols/protocol";
6
+ type LogLevel = "silly" | "debug" | "verbose" | "info" | "warn" | "error";
7
+ /**
8
+ * The object a protocol plugin is initialized with: the constructors and the
9
+ * loggers it is allowed to reach, rather than the Kuzzle instance itself.
10
+ */
2
11
  declare class Context {
3
12
  ClientConnection: typeof ClientConnection;
4
- debug: any;
13
+ debug: import("debug").Debugger;
5
14
  errors: {
6
15
  BadRequestError: typeof BadRequestError;
7
16
  ExternalServiceError: typeof ExternalServiceError;
@@ -19,24 +28,10 @@ declare class Context {
19
28
  UnauthorizedError: typeof UnauthorizedError;
20
29
  };
21
30
  Protocol: typeof ProtocolBase;
22
- Request: any;
23
- RequestContext: any;
24
- RequestInput: any;
25
- log: {};
31
+ Request: typeof Request;
32
+ RequestContext: typeof RequestContext;
33
+ RequestInput: typeof RequestInput;
34
+ log: Record<LogLevel, (message: string, ...args: unknown[]) => void>;
35
+ constructor();
26
36
  }
27
- import ClientConnection = require("./clientConnection");
28
- import { BadRequestError } from "../../kerror/errors/badRequestError";
29
- import { ExternalServiceError } from "../../kerror/errors/externalServiceError";
30
- import { ForbiddenError } from "../../kerror/errors/forbiddenError";
31
- import { GatewayTimeoutError } from "../../kerror/errors/gatewayTimeoutError";
32
- import { InternalError as KuzzleInternalError } from "../../kerror/errors/internalError";
33
- import { KuzzleError } from "../../kerror/errors/kuzzleError";
34
- import { NotFoundError } from "../../kerror/errors/notFoundError";
35
- import { PartialError } from "../../kerror/errors/partialError";
36
- import { PluginImplementationError } from "../../kerror/errors/pluginImplementationError";
37
- import { PreconditionError } from "../../kerror/errors/preconditionError";
38
- import { ServiceUnavailableError } from "../../kerror/errors/serviceUnavailableError";
39
- import { SizeLimitError } from "../../kerror/errors/sizeLimitError";
40
- import { TooManyRequestsError } from "../../kerror/errors/tooManyRequestsError";
41
- import { UnauthorizedError } from "../../kerror/errors/unauthorizedError";
42
- import ProtocolBase = require("./protocols/protocol");
37
+ export = Context;