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,4 +1,4 @@
1
1
  import { KuzzleError } from "./kuzzleError";
2
2
  export declare class ServiceUnavailableError extends KuzzleError {
3
- constructor(message: any, id?: any, code?: any);
3
+ constructor(message?: unknown, id?: unknown, code?: unknown);
4
4
  }
@@ -23,7 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
23
23
  exports.ServiceUnavailableError = void 0;
24
24
  const kuzzleError_1 = require("./kuzzleError");
25
25
  class ServiceUnavailableError extends kuzzleError_1.KuzzleError {
26
- constructor(message, id, code) {
26
+ constructor(message = "", id, code) {
27
27
  super(message, 503, id, code);
28
28
  }
29
29
  }
@@ -1,4 +1,4 @@
1
1
  import { KuzzleError } from "./kuzzleError";
2
2
  export declare class SizeLimitError extends KuzzleError {
3
- constructor(message: any, id?: any, code?: any);
3
+ constructor(message?: unknown, id?: unknown, code?: unknown);
4
4
  }
@@ -23,7 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
23
23
  exports.SizeLimitError = void 0;
24
24
  const kuzzleError_1 = require("./kuzzleError");
25
25
  class SizeLimitError extends kuzzleError_1.KuzzleError {
26
- constructor(message, id, code) {
26
+ constructor(message = "", id, code) {
27
27
  super(message, 413, id, code);
28
28
  }
29
29
  }
@@ -1,4 +1,4 @@
1
1
  import { KuzzleError } from "./kuzzleError";
2
2
  export declare class TooManyRequestsError extends KuzzleError {
3
- constructor(message: any, id?: any, code?: any);
3
+ constructor(message?: unknown, id?: unknown, code?: unknown);
4
4
  }
@@ -23,7 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
23
23
  exports.TooManyRequestsError = void 0;
24
24
  const kuzzleError_1 = require("./kuzzleError");
25
25
  class TooManyRequestsError extends kuzzleError_1.KuzzleError {
26
- constructor(message, id, code) {
26
+ constructor(message = "", id, code) {
27
27
  super(message, 429, id, code);
28
28
  }
29
29
  }
@@ -1,4 +1,4 @@
1
1
  import { KuzzleError } from "./kuzzleError";
2
2
  export declare class UnauthorizedError extends KuzzleError {
3
- constructor(message: any, id?: any, code?: any);
3
+ constructor(message?: unknown, id?: unknown, code?: unknown);
4
4
  }
@@ -23,7 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
23
23
  exports.UnauthorizedError = void 0;
24
24
  const kuzzleError_1 = require("./kuzzleError");
25
25
  class UnauthorizedError extends kuzzleError_1.KuzzleError {
26
- constructor(message, id, code) {
26
+ constructor(message = "", id, code) {
27
27
  super(message, 401, id, code);
28
28
  }
29
29
  }
@@ -1,6 +1,6 @@
1
1
  import type { Domains } from "./codes";
2
2
  import * as errors from "./errors";
3
- import { KuzzleError } from "./errors";
3
+ import type { KuzzleError } from "./errors";
4
4
  /**
5
5
  * Construct and return the corresponding error
6
6
  *
@@ -11,7 +11,7 @@ import { KuzzleError } from "./errors";
11
11
  * @param placeholders - Placeholders value to inject in error message
12
12
  * @param options - Last param can be additional options { message }
13
13
  */
14
- export declare function rawGet(domains: Domains, domain: string, subdomain: string, error: string, ...placeholders: any[]): KuzzleError;
14
+ export declare function rawGet(domains: Domains, domain: string, subdomain: string, error: string, ...placeholders: unknown[]): KuzzleError;
15
15
  /**
16
16
  * Returns a promise rejected with the corresponding error
17
17
  *
@@ -21,7 +21,7 @@ export declare function rawGet(domains: Domains, domain: string, subdomain: stri
21
21
  * @param error - Error name: (eg: 'index_not_found')
22
22
  * @param placeholders - Placeholders value to inject in error message
23
23
  */
24
- export declare function rawReject(domains: Domains, domain: string, subdomain: string, error: string, ...placeholders: any[]): Promise<any>;
24
+ export declare function rawReject(domains: Domains, domain: string, subdomain: string, error: string, ...placeholders: unknown[]): Promise<any>;
25
25
  /**
26
26
  * Construct and return the corresponding error, with its stack
27
27
  * trace derivated from a provided source error
@@ -33,14 +33,20 @@ export declare function rawReject(domains: Domains, domain: string, subdomain: s
33
33
  * @param error - Error name: (eg: 'index_not_found')
34
34
  * @param placeholders - Placeholders value to inject in error message
35
35
  */
36
- export declare function rawGetFrom(domains: Domains, source: Error, domain: string, subdomain: string, error: string, ...placeholders: any[]): KuzzleError;
36
+ export declare function rawGetFrom(domains: Domains,
37
+ /**
38
+ * Whatever was thrown. `unknown`, not `Error`: the only thing read off it
39
+ * is a stack, if it has one, and `pipeRunner` derives from what a plugin
40
+ * rejected with — which may be a string.
41
+ */
42
+ source: unknown, domain: string, subdomain: string, error: string, ...placeholders: unknown[]): KuzzleError;
37
43
  /**
38
44
  * Wrap error functions with the provided domain and subdomain.
39
45
  */
40
46
  export declare function rawWrap(domains: Domains, domain: string, subdomain: string): {
41
- get: (error: any, ...placeholders: any[]) => errors.KuzzleError;
42
- getFrom: (source: any, error: any, ...placeholders: any[]) => errors.KuzzleError;
43
- reject: (error: any, ...placeholders: any[]) => Promise<any>;
47
+ get: (error: string, ...placeholders: unknown[]) => errors.KuzzleError;
48
+ getFrom: (source: unknown, error: string, ...placeholders: unknown[]) => errors.KuzzleError;
49
+ reject: (error: string, ...placeholders: unknown[]) => Promise<any>;
44
50
  };
45
51
  /**
46
52
  * Construct and return the corresponding error
@@ -51,7 +57,7 @@ export declare function rawWrap(domains: Domains, domain: string, subdomain: str
51
57
  * @param placeholders - Placeholders value to inject in error message
52
58
  * @param options - Last param can be additional options { message }
53
59
  */
54
- export declare function get(domain: string, subdomain: string, error: string, ...placeholders: any[]): KuzzleError;
60
+ export declare function get(domain: string, subdomain: string, error: string, ...placeholders: unknown[]): KuzzleError;
55
61
  /**
56
62
  * Returns a promise rejected with the corresponding error
57
63
  *
@@ -60,7 +66,7 @@ export declare function get(domain: string, subdomain: string, error: string, ..
60
66
  * @param error - Error name: (eg: 'index_not_found')
61
67
  * @param placeholders - Placeholders value to inject in error message
62
68
  */
63
- export declare function reject(domain: string, subdomain: string, error: string, ...placeholders: any[]): Promise<any>;
69
+ export declare function reject(domain: string, subdomain: string, error: string, ...placeholders: unknown[]): Promise<any>;
64
70
  /**
65
71
  * Construct and return the corresponding error, with its stack
66
72
  * trace derivated from a provided source error
@@ -71,12 +77,12 @@ export declare function reject(domain: string, subdomain: string, error: string,
71
77
  * @param error - Error name: (eg: 'index_not_found')
72
78
  * @param placeholders - Placeholders value to inject in error message
73
79
  */
74
- export declare function getFrom(source: Error, domain: string, subdomain: string, error: string, ...placeholders: any[]): KuzzleError;
80
+ export declare function getFrom(source: unknown, domain: string, subdomain: string, error: string, ...placeholders: unknown[]): KuzzleError;
75
81
  /**
76
82
  * Wrap error functions with the provided domain and subdomain.
77
83
  */
78
84
  export declare function wrap(domain: string, subdomain: string): {
79
- get: (error: any, ...placeholders: any[]) => errors.KuzzleError;
80
- getFrom: (source: any, error: any, ...placeholders: any[]) => errors.KuzzleError;
81
- reject: (error: any, ...placeholders: any[]) => Promise<any>;
85
+ get: (error: string, ...placeholders: unknown[]) => errors.KuzzleError;
86
+ getFrom: (source: unknown, error: string, ...placeholders: unknown[]) => errors.KuzzleError;
87
+ reject: (error: string, ...placeholders: unknown[]) => Promise<any>;
82
88
  };
@@ -42,27 +42,41 @@ var __importStar = (this && this.__importStar) || function (mod) {
42
42
  __setModuleDefault(result, mod);
43
43
  return result;
44
44
  };
45
- var __importDefault = (this && this.__importDefault) || function (mod) {
46
- return (mod && mod.__esModule) ? mod : { "default": mod };
47
- };
48
45
  Object.defineProperty(exports, "__esModule", { value: true });
49
46
  exports.wrap = exports.getFrom = exports.reject = exports.get = exports.rawWrap = exports.rawGetFrom = exports.rawReject = exports.rawGet = void 0;
50
47
  const util_1 = require("util");
51
- const lodash_1 = __importDefault(require("lodash"));
52
48
  const codes_1 = require("./codes");
53
49
  const errors = __importStar(require("./errors"));
50
+ const lodash_1 = require("lodash");
54
51
  /**
55
52
  * Gets this file name in the exact same format than the one printed in the
56
53
  * stacktraces (used to clean kerror lines from stacktraces)
54
+ *
55
+ * `module` is a CommonJS global. Kuzzle ships as CommonJS, but vitest loads
56
+ * `lib/` as ESM, where `module` is undefined — and reading `.filename` off it
57
+ * threw, which made EVERY vitest spec that reaches an error path crash. The
58
+ * guard degrades gracefully instead: with no filename to match, stack-trace
59
+ * cleaning is skipped, which is cosmetic.
57
60
  */
58
61
  let _currentFileName = null;
59
62
  function _getCurrentFileName() {
60
63
  if (_currentFileName !== null) {
61
64
  return _currentFileName;
62
65
  }
63
- _currentFileName = module.filename.substr(process.cwd().length + 1);
66
+ _currentFileName =
67
+ typeof module === "undefined" || !module.filename
68
+ ? ""
69
+ : module.filename.substring(process.cwd().length + 1);
64
70
  return _currentFileName;
65
71
  }
72
+ /**
73
+ * Whether the last placeholder is the options object: an object literal
74
+ * only. A class instance is a placeholder like any other value, so it is
75
+ * formatted into the message rather than taken for options.
76
+ */
77
+ function isOptions(value) {
78
+ return (0, lodash_1.isPlainObject)(value);
79
+ }
66
80
  /**
67
81
  * Construct and return the corresponding error
68
82
  *
@@ -76,23 +90,34 @@ function _getCurrentFileName() {
76
90
  function rawGet(domains, domain, subdomain, error, ...placeholders) {
77
91
  let options = {};
78
92
  // extract options object from the placeholders
79
- if (lodash_1.default.isPlainObject(placeholders[placeholders.length - 1])) {
80
- options = placeholders.pop();
93
+ const last = placeholders.at(-1);
94
+ if (isOptions(last)) {
95
+ options = last;
96
+ placeholders.pop();
81
97
  }
82
- const kuzzleError = lodash_1.default.get(domains, `${domain}.subDomains.${subdomain}.errors.${error}`);
83
- if (!kuzzleError) {
98
+ // Walked rather than fetched through a dotted `_.get` path: the three
99
+ // levels are what the code below reads the codes off, the guard then covers
100
+ // all three at once, and the `as any as ErrorDefinition` that the string
101
+ // path required is gone with it.
102
+ const domainEntry = domains[domain];
103
+ const subdomainEntry = domainEntry?.subDomains[subdomain];
104
+ const kuzzleError = subdomainEntry?.errors[error];
105
+ if (!domainEntry || !subdomainEntry || !kuzzleError) {
84
106
  return get("core", "fatal", "unexpected_error", `${domain}.${subdomain}.${error}`);
85
107
  }
86
- let body = null;
108
+ let body;
87
109
  if (kuzzleError.class === "PartialError" ||
88
110
  kuzzleError.class === "MultipleErrorsError") {
89
- body = placeholders.splice(-1)[0];
111
+ const [partials] = placeholders.splice(-1);
112
+ // The documented shape is the list of partial errors. Anything else was
113
+ // handed to the constructor and dropped there — `Array.isArray(body)` is
114
+ // the only thing it does with it — so the check moves to where the type
115
+ // is decided.
116
+ body = Array.isArray(partials) ? partials : undefined;
90
117
  }
91
118
  const message = options.message || (0, util_1.format)(kuzzleError.message, ...placeholders);
92
119
  const id = `${domain}.${subdomain}.${error}`;
93
- const code = (domains[domain].code << 24) |
94
- (domains[domain].subDomains[subdomain].code << 16) |
95
- domains[domain].subDomains[subdomain].errors[error].code;
120
+ const code = (domainEntry.code << 24) | (subdomainEntry.code << 16) | kuzzleError.code;
96
121
  let kerror;
97
122
  if (kuzzleError.class === "PartialError" ||
98
123
  kuzzleError.class === "MultipleErrorsError") {
@@ -105,7 +130,10 @@ function rawGet(domains, domain, subdomain, error, ...placeholders) {
105
130
  else {
106
131
  kerror = new errors[kuzzleError.class](message, id, code);
107
132
  }
108
- kerror.props = placeholders;
133
+ // Not `kerror.props = placeholders`: `props` is declared `string[]`, which
134
+ // is what code compiled against v2.56.0 reads, and a placeholder may be
135
+ // anything. See KuzzleError.props.
136
+ Object.assign(kerror, { props: placeholders });
109
137
  if (kuzzleError.class !== "InternalError") {
110
138
  cleanStackTrace(kerror);
111
139
  }
@@ -124,6 +152,11 @@ exports.rawGet = rawGet;
124
152
  * at ControllerManager.add (kuzzle/lib/core/backend/backend.ts:226:34)
125
153
  */
126
154
  function cleanStackTrace(error) {
155
+ // `Error.stack` is not guaranteed — `Error.stackTraceLimit = 0` removes it,
156
+ // and there is nothing to trim off an error that has none.
157
+ if (error.stack === undefined) {
158
+ return;
159
+ }
127
160
  // Keep the original error message
128
161
  const messageLength = error.message.split("\n").length;
129
162
  const currentFileName = _getCurrentFileName();
@@ -134,8 +167,10 @@ function cleanStackTrace(error) {
134
167
  if (index < messageLength) {
135
168
  return true;
136
169
  }
137
- // filter all lines related to the kerror object
138
- return !line.includes(currentFileName);
170
+ // filter all lines related to the kerror object. An empty
171
+ // `currentFileName` (see above) matches everything, so guard it: no
172
+ // filename means no filtering.
173
+ return currentFileName === "" || !line.includes(currentFileName);
139
174
  });
140
175
  // insert a deletion message in place of the new error instantiation line
141
176
  newStack[messageLength] = " [...Kuzzle internal calls deleted...]";
@@ -165,11 +200,17 @@ exports.rawReject = rawReject;
165
200
  * @param error - Error name: (eg: 'index_not_found')
166
201
  * @param placeholders - Placeholders value to inject in error message
167
202
  */
168
- function rawGetFrom(domains, source, domain, subdomain, error, ...placeholders) {
203
+ function rawGetFrom(domains,
204
+ /**
205
+ * Whatever was thrown. `unknown`, not `Error`: the only thing read off it
206
+ * is a stack, if it has one, and `pipeRunner` derives from what a plugin
207
+ * rejected with — which may be a string.
208
+ */
209
+ source, domain, subdomain, error, ...placeholders) {
169
210
  const derivedError = rawGet(domains, domain, subdomain, error, ...placeholders);
170
211
  // If a stacktrace is present, we need to modify the first line because it
171
212
  // still contains the original error message
172
- if (derivedError?.stack?.length && source?.stack) {
213
+ if (derivedError?.stack?.length && source instanceof Error && source.stack) {
173
214
  const stackArray = source.stack.split("\n");
174
215
  stackArray.shift();
175
216
  derivedError.stack = [
@@ -1,5 +1,5 @@
1
1
  import { KuzzleLogger } from "kuzzle-logger";
2
- import { KuzzleConfiguration } from "../../index";
2
+ import type { IKuzzleConfiguration } from "../types/config/KuzzleConfiguration";
3
3
  /**
4
4
  * The Logger class provides logging functionality for Kuzzle.
5
5
  */
@@ -11,7 +11,7 @@ export declare class Logger extends KuzzleLogger {
11
11
  private static basePino;
12
12
  private warnedForSillyDeprecation;
13
13
  private warnedForVerboseDeprecation;
14
- constructor(kuzzleConfig: KuzzleConfiguration, namespace?: string);
14
+ constructor(kuzzleConfig: IKuzzleConfiguration, namespace?: string);
15
15
  /**
16
16
  * Logs a message with the "silly" level.
17
17
  *
@@ -1,14 +1,18 @@
1
- export = DumpGenerator;
2
1
  declare class DumpGenerator {
3
- _dump: boolean;
4
- logger: import("./Logger").Logger;
2
+ private _dump;
3
+ private readonly logger;
4
+ constructor();
5
5
  /**
6
6
  * Create a dump
7
- *
8
- * @param {string} suffix
9
- * @returns {Promise}
10
7
  */
11
- dump(suffix: string): Promise<any>;
8
+ dump(suffix: string): Promise<string>;
9
+ /**
10
+ * The directory this dump will be written to, or a `BadRequestError` if the
11
+ * suffix is malformed or would place it outside the configured dump path.
12
+ */
13
+ private _resolveDumpPath;
14
+ private _generate;
12
15
  _cleanUpHistory(): void;
13
- _listFilesMatching(directory: any, start: any): string[];
16
+ _listFilesMatching(directory: string, start: string): string[];
14
17
  }
18
+ export = DumpGenerator;
@@ -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,17 +19,42 @@
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 path = require("path");
23
- const fs = require("fs");
24
- const os = require("os");
25
- const Bluebird = require("bluebird");
26
- const moment = require("moment");
27
- const dumpme = require("dumpme");
28
- const zlib = require("zlib");
29
- const { Request } = require("../api/request");
30
- const kerror = require("../kerror");
31
- const { BadRequestError } = require("../kerror/errors");
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ const node_fs_1 = __importDefault(require("node:fs"));
49
+ const node_os_1 = __importDefault(require("node:os"));
50
+ const node_path_1 = __importDefault(require("node:path"));
51
+ const node_zlib_1 = __importDefault(require("node:zlib"));
52
+ const bluebird_1 = __importDefault(require("bluebird"));
53
+ const dumpme_1 = __importDefault(require("dumpme"));
54
+ const moment_1 = __importDefault(require("moment"));
55
+ const package_json_1 = __importDefault(require("../../package.json"));
56
+ const kerror = __importStar(require("../kerror"));
57
+ const errors_1 = require("../kerror/errors");
32
58
  class DumpGenerator {
33
59
  constructor() {
34
60
  this._dump = false;
@@ -36,49 +62,71 @@ class DumpGenerator {
36
62
  }
37
63
  /**
38
64
  * Create a dump
39
- *
40
- * @param {string} suffix
41
- * @returns {Promise}
42
65
  */
43
66
  async dump(suffix) {
44
67
  if (this._dump) {
45
68
  throw kerror.get("api", "process", "action_locked", "dump");
46
69
  }
70
+ // The arguments are checked before the lock is taken, and every path out
71
+ // of the generation releases it: a lock held past a failure answers every
72
+ // later dump with `action_locked` about a dump that is not running
73
+ // (TD-81).
74
+ const dumpPath = this._resolveDumpPath(suffix);
47
75
  this._dump = true;
48
- const basePath = path.normalize(global.kuzzle.config.dump.path);
49
- const dumpPath = path.join(basePath, moment()
76
+ try {
77
+ return await this._generate(dumpPath);
78
+ }
79
+ finally {
80
+ this._dump = false;
81
+ }
82
+ }
83
+ /**
84
+ * The directory this dump will be written to, or a `BadRequestError` if the
85
+ * suffix is malformed or would place it outside the configured dump path.
86
+ */
87
+ _resolveDumpPath(suffix) {
88
+ const suffixRegex = /^[A-Za-z0-9_-]{0,64}$/;
89
+ if (!suffixRegex.test(suffix)) {
90
+ throw kerror.get("api", "assert", "invalid_argument", "suffix", "at most 64 alphanumeric characters, '-' or '_'");
91
+ }
92
+ const basePath = node_path_1.default.normalize(global.kuzzle.config.dump.path);
93
+ const dumpPath = node_path_1.default.join(basePath, (0, moment_1.default)()
50
94
  .format(global.kuzzle.config.dump.dateFormat)
51
95
  .concat(`-${suffix}`)
52
96
  .substring(0, 200));
53
- const resolvedPath = path.resolve(dumpPath);
54
- if (!resolvedPath.startsWith(path.resolve(basePath))) {
55
- throw new BadRequestError(`Dump path '${dumpPath}' is outside of designated dump directory '${basePath}'`);
97
+ const resolvedPath = node_path_1.default.resolve(dumpPath);
98
+ if (!resolvedPath.startsWith(node_path_1.default.resolve(basePath) + node_path_1.default.sep)) {
99
+ throw new errors_1.BadRequestError(`Dump path '${dumpPath}' is outside of designated dump directory '${basePath}'`);
56
100
  }
101
+ return dumpPath;
102
+ }
103
+ async _generate(dumpPath) {
57
104
  this.logger.info("=".repeat(79));
58
105
  this.logger.info(`Generating dump in ${dumpPath}`);
59
106
  this._cleanUpHistory();
60
107
  try {
61
- fs.mkdirSync(dumpPath, { recursive: true });
108
+ node_fs_1.default.mkdirSync(dumpPath, { recursive: true });
62
109
  }
63
110
  catch (e) {
64
- const message = e.message.startsWith("EEXIST")
111
+ const error = e instanceof Error ? e : new Error(String(e));
112
+ const message = error.message.startsWith("EEXIST")
65
113
  ? "Dump directory already exists. Skipping.."
66
- : `Unable to create dump folder: ${e.message}`;
114
+ : `Unable to create dump folder: ${error.message}`;
67
115
  this.logger.error(message);
68
- throw new Error(message);
116
+ throw new Error(message, { cause: e });
69
117
  }
70
118
  // dump kuzzle information
71
119
  this.logger.info("> dumping kuzzle configuration");
72
- fs.writeFileSync(path.join(dumpPath, "kuzzle.json"), JSON.stringify({
120
+ node_fs_1.default.writeFileSync(node_path_1.default.join(dumpPath, "kuzzle.json"), JSON.stringify({
73
121
  config: global.kuzzle.config,
74
- version: require("../../package.json").version,
122
+ version: package_json_1.default.version,
75
123
  }, null, " ").concat("\n"));
76
124
  // dump plugins configuration
77
125
  this.logger.info("> dumping plugins configuration");
78
- fs.writeFileSync(path.join(dumpPath, "plugins.json"), JSON.stringify(global.kuzzle.pluginsManager.getPluginsDescription(), null, " ").concat("\n"));
126
+ node_fs_1.default.writeFileSync(node_path_1.default.join(dumpPath, "plugins.json"), JSON.stringify(global.kuzzle.pluginsManager.getPluginsDescription(), null, " ").concat("\n"));
79
127
  // dump Node.js configuration
80
128
  this.logger.info("> dumping Node.js configuration");
81
- fs.writeFileSync(path.join(dumpPath, "nodejs.json"), JSON.stringify({
129
+ node_fs_1.default.writeFileSync(node_path_1.default.join(dumpPath, "nodejs.json"), JSON.stringify({
82
130
  argv: process.argv,
83
131
  config: process.config,
84
132
  env: process.env,
@@ -88,36 +136,42 @@ class DumpGenerator {
88
136
  }, null, " ").concat("\n"));
89
137
  // dump os configuration
90
138
  this.logger.info("> dumping os configuration");
91
- fs.writeFileSync(path.join(dumpPath, "os.json"), JSON.stringify({
92
- cpus: os.cpus(),
93
- loadavg: os.loadavg(),
139
+ node_fs_1.default.writeFileSync(node_path_1.default.join(dumpPath, "os.json"), JSON.stringify({
140
+ cpus: node_os_1.default.cpus(),
141
+ loadavg: node_os_1.default.loadavg(),
94
142
  mem: {
95
- free: os.freemem(),
96
- total: os.totalmem(),
143
+ free: node_os_1.default.freemem(),
144
+ total: node_os_1.default.totalmem(),
97
145
  },
98
- networkInterfaces: os.networkInterfaces(),
99
- platform: os.platform(),
100
- uptime: os.uptime(),
146
+ networkInterfaces: node_os_1.default.networkInterfaces(),
147
+ platform: node_os_1.default.platform(),
148
+ uptime: node_os_1.default.uptime(),
101
149
  }, null, " ").concat("\n"));
102
150
  // core-dump
103
151
  this.logger.info("> generating core-dump");
104
- dumpme(global.kuzzle.config.dump.gcore || "gcore", `${dumpPath}/core`);
152
+ (0, dumpme_1.default)(global.kuzzle.config.dump.gcore || "gcore", `${dumpPath}/core`);
105
153
  // Gzip the core
106
154
  try {
107
155
  const corefiles = this._listFilesMatching(dumpPath, "core");
108
- if (corefiles[0]) {
109
- const readStream = fs.createReadStream(corefiles[0]);
110
- const writeStream = fs.createWriteStream(`${dumpPath}/core.gz`);
111
- await new Bluebird((resolve) => readStream
112
- .pipe(zlib.createGzip())
156
+ // Read once: the same element is used four times below, twice from
157
+ // inside a callback where the `if` above no longer narrows it.
158
+ const corefile = corefiles[0];
159
+ if (corefile) {
160
+ const readStream = node_fs_1.default.createReadStream(corefile);
161
+ const writeStream = node_fs_1.default.createWriteStream(`${dumpPath}/core.gz`);
162
+ await new bluebird_1.default((resolve) => readStream
163
+ .pipe(node_zlib_1.default.createGzip())
113
164
  .pipe(writeStream)
114
165
  .on("finish", () => {
115
166
  // rm the original core file
116
167
  try {
117
- fs.unlinkSync(corefiles[0]);
168
+ node_fs_1.default.unlinkSync(corefile);
118
169
  }
119
- catch (e) {
120
- this.logger.warn(`> unable to clean up core file ${corefiles[0]}`);
170
+ catch {
171
+ // The unlink error is deliberately dropped: the core file is a
172
+ // best-effort cleanup and its own path is already in the
173
+ // warning.
174
+ this.logger.warn(`> unable to clean up core file ${corefile}`);
121
175
  }
122
176
  resolve();
123
177
  }));
@@ -131,30 +185,33 @@ class DumpGenerator {
131
185
  }
132
186
  // copy node binary
133
187
  this.logger.info("> copy node binary");
134
- fs.copyFileSync(process.execPath, path.join(dumpPath, "node"));
188
+ node_fs_1.default.copyFileSync(process.execPath, node_path_1.default.join(dumpPath, "node"));
135
189
  // dumping Kuzzle's stats
136
190
  this.logger.info("> dumping kuzzle's stats");
137
- const statistics = await global.kuzzle.statistics.getAllStats(new Request({ action: "getAllStats", controller: "statistics" }));
138
- fs.writeFileSync(path.join(dumpPath, "statistics.json"), JSON.stringify(statistics.hits, null, " ").concat("\n"));
191
+ // `getAllStats()` takes no argument and never has: it forwards to
192
+ // `getStats()` with none. The `Request` the JavaScript built here was
193
+ // constructed and discarded on every dump.
194
+ const statistics = await global.kuzzle.statistics.getAllStats();
195
+ node_fs_1.default.writeFileSync(node_path_1.default.join(dumpPath, "statistics.json"), JSON.stringify(statistics.hits, null, " ").concat("\n"));
139
196
  this.logger.info("Done.");
140
197
  this.logger.info("[ℹ] You can send the folder to the kuzzle core team at support@kuzzle.io");
141
198
  this.logger.info("=".repeat(79));
142
- this._dump = false;
143
199
  return dumpPath;
144
200
  }
145
201
  _cleanUpHistory() {
146
- const config = global.kuzzle.config.dump, dumpPath = path.normalize(global.kuzzle.config.dump.path);
202
+ const config = global.kuzzle.config.dump, dumpPath = node_path_1.default.normalize(global.kuzzle.config.dump.path);
147
203
  try {
148
- fs.accessSync(dumpPath, fs.constants.R_OK | fs.constants.W_OK | fs.constants.X_OK);
204
+ node_fs_1.default.accessSync(dumpPath, node_fs_1.default.constants.R_OK | node_fs_1.default.constants.W_OK | node_fs_1.default.constants.X_OK);
149
205
  }
150
- catch (e) {
206
+ catch {
207
+ // Not readable, writable and traversable: there is no history to clean.
151
208
  return;
152
209
  }
153
- const dumps = fs
210
+ const dumps = node_fs_1.default
154
211
  .readdirSync(dumpPath)
155
212
  .map((file) => {
156
213
  const filepath = `${dumpPath}/${file}`;
157
- return { path: filepath, stat: fs.statSync(filepath) };
214
+ return { path: filepath, stat: node_fs_1.default.statSync(filepath) };
158
215
  })
159
216
  .filter((prop) => prop.stat.isDirectory())
160
217
  .sort((a, b) => {
@@ -164,22 +221,33 @@ class DumpGenerator {
164
221
  return a.stat.birthtime < b.stat.birthtime ? -1 : 1;
165
222
  });
166
223
  while (dumps.length >= config.history.reports) {
167
- const dir = dumps.shift().path;
168
- fs.rmdirSync(dir, { recursive: true });
224
+ const dump = dumps.shift();
225
+ // `shift()` answers both questions at once. It matters: a configured
226
+ // `history.reports` of 0 makes the condition above constant-true, and the
227
+ // old shape then read `.path` off undefined.
228
+ if (dump === undefined) {
229
+ break;
230
+ }
231
+ node_fs_1.default.rmSync(dump.path, { recursive: true });
169
232
  }
170
- for (let i = 0; i < dumps.length - config.history.coredump; i++) {
171
- const corefiles = this._listFilesMatching(path.normalize(dumps[i].path), "core");
172
- if (corefiles[0]) {
173
- fs.unlinkSync(corefiles[0]);
233
+ // The oldest dumps lose their core file, all but the `coredump` newest.
234
+ // The bound is clamped: `slice` counts a negative end from the end of the
235
+ // list, which would take core files from the dumps it has to keep.
236
+ const withoutCore = Math.max(0, dumps.length - config.history.coredump);
237
+ for (const dump of dumps.slice(0, withoutCore)) {
238
+ const corefiles = this._listFilesMatching(node_path_1.default.normalize(dump.path), "core");
239
+ const corefile = corefiles[0];
240
+ if (corefile) {
241
+ node_fs_1.default.unlinkSync(corefile);
174
242
  }
175
243
  }
176
244
  }
177
245
  _listFilesMatching(directory, start) {
178
- return fs
246
+ return node_fs_1.default
179
247
  .readdirSync(directory)
180
- .filter((entry) => fs.lstatSync(`${directory}/${entry}`).isFile() &&
248
+ .filter((entry) => node_fs_1.default.lstatSync(`${directory}/${entry}`).isFile() &&
181
249
  entry.startsWith(start))
182
- .map((file) => path.join(directory, file));
250
+ .map((file) => node_path_1.default.join(directory, file));
183
251
  }
184
252
  }
185
253
  module.exports = DumpGenerator;