kuzzle 2.56.0 → 2.57.0-beta.1

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 +24 -17
  405. package/package.json +24 -17
  406. package/dist/lib/util/wildcard.d.ts +0 -1
  407. package/dist/lib/util/wildcard.js +0 -46
  408. /package/dist/lib/types/controllers/{adminControlller.type.d.ts → adminController.type.d.ts} +0 -0
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /*
2
3
  * Kuzzle, a backend software, self-hostable and ready to use
3
4
  * to power modern apps
@@ -18,16 +19,46 @@
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 os = require("os");
23
- const jsonToYaml = require("json2yaml");
24
- const packagejson = require("../../../package.json");
25
- const { NativeController } = require("./baseController");
26
- const kerror = require("../../kerror");
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ const os = __importStar(require("node:os"));
49
+ const node_util_1 = require("node:util");
50
+ const json2yaml_1 = __importDefault(require("json2yaml"));
51
+ const package_json_1 = __importDefault(require("../../../package.json"));
52
+ const kerror = __importStar(require("../../kerror"));
53
+ const baseController_1 = require("./baseController");
54
+ /** Whatever a health probe rejected with, as an `Error`. */
55
+ function causeOf(thrown) {
56
+ return thrown instanceof Error ? thrown : new Error((0, node_util_1.inspect)(thrown));
57
+ }
27
58
  /**
28
59
  * @class ServerController
29
60
  */
30
- class ServerController extends NativeController {
61
+ class ServerController extends baseController_1.NativeController {
31
62
  constructor() {
32
63
  super([
33
64
  "adminExists",
@@ -100,7 +131,7 @@ class ServerController extends NativeController {
100
131
  * @returns {Promise<Object>}
101
132
  */
102
133
  async getConfig() {
103
- const config = JSON.parse(JSON.stringify(global.kuzzle.config));
134
+ const config = JSON.parse(JSON.stringify(global.kuzzle.config)); // NOSONAR: intentional JSON-safe deep clone (strips non-serializable config values); structuredClone would change semantics / can throw
104
135
  // Already and more appropriately returned by server:info
105
136
  config.http.routes = undefined;
106
137
  // Not a good idea to export Kuzzle's salt, hash algorithm
@@ -116,20 +147,25 @@ class ServerController extends NativeController {
116
147
  * @returns {Promise<Object>}
117
148
  */
118
149
  async capabilities() {
119
- const config = JSON.parse(JSON.stringify(global.kuzzle.config));
150
+ const config = JSON.parse(JSON.stringify(global.kuzzle.config)); // NOSONAR: intentional JSON-safe deep clone (strips non-serializable config values); structuredClone would change semantics / can throw
120
151
  const publicApi = await this.publicApi();
121
152
  const services = {};
122
153
  const plugins = {};
123
154
  for (const plugin of config.plugins.common.include) {
124
- plugins[plugin] = {
125
- version: packagejson.dependencies[plugin],
126
- };
155
+ // A plugin listed in `plugins.common.include` that is not a dependency
156
+ // of this package has no version to report. It was read off the
157
+ // manifest's dependency map by a name only known at runtime.
158
+ const dependencies = package_json_1.default.dependencies;
159
+ plugins[plugin] = { version: dependencies[plugin] ?? "" };
127
160
  }
128
161
  for (const [name, info] of Object.entries(config.services)) {
129
- if (info.backend !== undefined) {
162
+ const reported = info.backend === undefined ? undefined : this._info[info.backend];
163
+ // `_info` holds one entry per service `init()` asked, so a service
164
+ // configured against a backend Kuzzle does not run has none.
165
+ if (info.backend !== undefined && reported) {
130
166
  services[name] = {
131
167
  backend: info.backend,
132
- version: this._info[info.backend].version,
168
+ version: reported.version,
133
169
  };
134
170
  }
135
171
  }
@@ -161,11 +197,13 @@ class ServerController extends NativeController {
161
197
  */
162
198
  async healthCheck(request) {
163
199
  const getServiceUnavailableError = (err) => kerror.get("core", "fatal", "service_unavailable", err);
164
- const result = { services: {}, status: "green" };
200
+ const result = {
201
+ services: {},
202
+ status: "green",
203
+ };
165
204
  let services;
166
205
  if (typeof request.input.args.services === "string") {
167
- // @deprecated Should be replaced with request.getArray('services')
168
- services = request.getArrayLegacy("services");
206
+ services = request.getArrayOrCsv("services");
169
207
  }
170
208
  if (!services || services.includes("internalCache")) {
171
209
  try {
@@ -173,7 +211,7 @@ class ServerController extends NativeController {
173
211
  result.services.internalCache = "green";
174
212
  }
175
213
  catch (error) {
176
- request.setError(getServiceUnavailableError(error));
214
+ request.setError(getServiceUnavailableError(causeOf(error)));
177
215
  result.services.internalCache = "red";
178
216
  result.status = "red";
179
217
  }
@@ -184,7 +222,7 @@ class ServerController extends NativeController {
184
222
  result.services.memoryStorage = "green";
185
223
  }
186
224
  catch (error) {
187
- request.setError(getServiceUnavailableError(error));
225
+ request.setError(getServiceUnavailableError(causeOf(error)));
188
226
  result.services.memoryStorage = "red";
189
227
  result.status = "red";
190
228
  }
@@ -198,7 +236,7 @@ class ServerController extends NativeController {
198
236
  result.services.storageEngine = "green";
199
237
  }
200
238
  catch (error) {
201
- request.setError(getServiceUnavailableError(error));
239
+ request.setError(getServiceUnavailableError(causeOf(error)));
202
240
  result.services.storageEngine = "red";
203
241
  result.status = "red";
204
242
  }
@@ -232,13 +270,15 @@ class ServerController extends NativeController {
232
270
  };
233
271
  const kuzzleApi = this._buildApiDefinition(global.kuzzle.funnel.controllers, global.kuzzle.config.http.routes);
234
272
  const pluginsApi = this._buildApiDefinition(global.kuzzle.pluginsManager.controllers, global.kuzzle.pluginsManager.routes);
235
- const apiDefinition = Object.assign({}, kuzzleApi, pluginsApi);
236
- // @todo kuzzle.api should contain the apiDefinition directly
273
+ const apiDefinition = { ...kuzzleApi, ...pluginsApi };
274
+ // NOSONAR: pre-existing @todo — kuzzle.api should contain the apiDefinition directly
237
275
  response.kuzzle.api.routes = apiDefinition;
238
276
  response.kuzzle.plugins =
239
277
  global.kuzzle.pluginsManager.getPluginsDescription();
278
+ // A Kuzzle started without an application has none to describe, and this
279
+ // route answered by throwing on `undefined.info()`.
240
280
  response.kuzzle.application =
241
- global.kuzzle.pluginsManager.application.info();
281
+ global.kuzzle.pluginsManager.application?.info() ?? {};
242
282
  response.services = {
243
283
  internalCache: await global.kuzzle.ask("core:cache:internal:info:get"),
244
284
  internalStorage: await global.kuzzle.ask("core:storage:private:info:get"),
@@ -274,7 +314,7 @@ class ServerController extends NativeController {
274
314
  format: "raw",
275
315
  headers: { "Content-Type": `application/${format}` },
276
316
  });
277
- return format === "json" ? definition : jsonToYaml.stringify(definition);
317
+ return format === "json" ? definition : json2yaml_1.default.stringify(definition);
278
318
  }
279
319
  /**
280
320
  * Fetches and returns Kuzzle core metrics
@@ -292,7 +332,8 @@ class ServerController extends NativeController {
292
332
  for (const [name, controller] of controllers.entries()) {
293
333
  const actionList = {};
294
334
  for (const action of controller._actions) {
295
- actionList[action] = { action, controller: name };
335
+ const definition = { action, controller: name };
336
+ actionList[action] = definition;
296
337
  // resolve associated http route for each actions
297
338
  const routes = httpRoutes.filter((route) => {
298
339
  return ((route.controller === name ||
@@ -300,10 +341,9 @@ class ServerController extends NativeController {
300
341
  route.action === action);
301
342
  });
302
343
  for (const route of routes) {
303
- if (!actionList[action].http) {
304
- actionList[action].http = [];
305
- }
306
- actionList[action].http.push({
344
+ // The entry was just created above, and read back three times.
345
+ definition.http ?? (definition.http = []);
346
+ definition.http.push({
307
347
  path: route.path,
308
348
  url: route.path,
309
349
  verb: route.verb.toUpperCase(),
@@ -1,9 +1,11 @@
1
- export = DocumentExtractor;
1
+ import type { JSONObject } from "../types/JSONObject";
2
+ import type { KuzzleRequest } from "./request";
2
3
  declare class DocumentExtractor {
3
- constructor(request: any);
4
- request: any;
5
- extractMethod: any;
6
- insertMethod: any;
7
- extract(): any;
8
- insert(documents: any): any;
4
+ private readonly request;
5
+ private readonly extractMethod;
6
+ private readonly insertMethod;
7
+ constructor(request: KuzzleRequest);
8
+ extract(): JSONObject[];
9
+ insert(documents: JSONObject[]): KuzzleRequest;
9
10
  }
11
+ export = DocumentExtractor;
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /*
2
3
  * Kuzzle, a backend software, self-hostable and ready to use
3
4
  * to power modern apps
@@ -18,26 +19,67 @@
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 kerror = require("../kerror");
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ const kerror = __importStar(require("../kerror"));
23
46
  const assertionError = kerror.wrap("api", "assert");
24
- const extractors = [
47
+ /**
48
+ * The body of a request whose action declares one. Every extractor below runs
49
+ * on an action that takes a body — `deleteFields`, `mCreate`, `upsert` — and
50
+ * read `request.input.body` straight through; `body` is `JSONObject | null`
51
+ * on every request, and a request arriving without one raised a TypeError
52
+ * rather than the 400 this error is.
53
+ */
54
+ function bodyOf(request) {
55
+ const body = request.input.body;
56
+ if (body === null) {
57
+ throw assertionError.get("body_required");
58
+ }
59
+ return body;
60
+ }
61
+ const extractorDefinitions = [
25
62
  {
26
63
  methods: {
27
64
  extractFromRequest: (request) => [
28
65
  {
29
66
  _id: request.input.args._id,
30
- _source: request.input.body.fields,
67
+ _source: bodyOf(request).fields,
31
68
  },
32
69
  ],
33
70
  extractFromResult: (request) => [request.result],
34
- insertInRequest: ([documents], request) => {
35
- request.input.args._id = documents._id;
36
- request.input.body.fields = documents._source;
71
+ insertInRequest: ([document], request) => {
72
+ if (document) {
73
+ request.input.args._id = document._id;
74
+ bodyOf(request).fields = document._source;
75
+ }
37
76
  return request;
38
77
  },
39
78
  insertInResult: ([document], request) => {
40
- request.setResult(document, { status: request.status });
79
+ request.response.configure({
80
+ result: document,
81
+ status: request.status,
82
+ });
41
83
  return request;
42
84
  },
43
85
  },
@@ -48,11 +90,14 @@ const extractors = [
48
90
  extractFromRequest: (request) => [{ _id: request.input.args._id }],
49
91
  extractFromResult: (request) => [request.result],
50
92
  insertInRequest: (documents, request) => {
51
- request.input.args._id = documents[0] && documents[0]._id;
93
+ request.input.args._id = documents[0]?._id;
52
94
  return request;
53
95
  },
54
96
  insertInResult: (documents, request) => {
55
- request.setResult(documents[0], { status: request.status });
97
+ request.response.configure({
98
+ result: documents[0],
99
+ status: request.status,
100
+ });
56
101
  return request;
57
102
  },
58
103
  },
@@ -62,8 +107,7 @@ const extractors = [
62
107
  methods: {
63
108
  extractFromRequest: (request) => {
64
109
  let ids = [];
65
- if (request.input.body &&
66
- request.input.body.ids &&
110
+ if (request.input.body?.ids &&
67
111
  Object.keys(request.input.body.ids).length) {
68
112
  ids = request.input.body.ids;
69
113
  }
@@ -72,8 +116,7 @@ const extractors = [
72
116
  ids = request.input.args.ids;
73
117
  }
74
118
  else if (typeof request.input.args.ids === "string") {
75
- // @deprecated Should be replaced with request.getArray('ids')
76
- ids = request.getArrayLegacy("ids");
119
+ ids = request.getArrayOrCsv("ids");
77
120
  }
78
121
  else {
79
122
  throw assertionError.get("invalid_type", request.input.args.ids, "Array or String");
@@ -86,14 +129,15 @@ const extractors = [
86
129
  return request.result.successes;
87
130
  }
88
131
  const documents = [];
89
- for (let it = 0; it < request.result.successes.length; it++) {
90
- documents.push({ _id: request.result.successes[it] });
132
+ for (const success of request.result.successes) {
133
+ documents.push({ _id: success });
91
134
  }
92
135
  return documents;
93
136
  },
94
137
  insertInRequest: (documents, request) => {
95
- if (request.input.body && Object.keys(request.input.body).length) {
96
- request.input.body.ids = documents.map((document) => document._id);
138
+ const body = request.input.body;
139
+ if (body && Object.keys(body).length) {
140
+ body.ids = documents.map((document) => document._id);
97
141
  }
98
142
  else {
99
143
  request.input.args.ids = documents.map((document) => document._id);
@@ -102,10 +146,12 @@ const extractors = [
102
146
  },
103
147
  insertInResult: (documents, request) => {
104
148
  if (request.input.action === "mGet") {
105
- request.setResult({
149
+ const mResult = {
106
150
  errors: request.result.errors,
107
151
  successes: documents,
108
- }, {
152
+ };
153
+ request.response.configure({
154
+ result: mResult,
109
155
  status: request.status,
110
156
  });
111
157
  return request;
@@ -114,10 +160,10 @@ const extractors = [
114
160
  errors: request.result.errors,
115
161
  successes: [],
116
162
  };
117
- for (let it = 0; it < documents.length; it++) {
118
- result.successes.push(documents[it]._id);
163
+ for (const document of documents) {
164
+ result.successes.push(document._id);
119
165
  }
120
- request.setResult(result, { status: request.status });
166
+ request.response.configure({ result: result, status: request.status });
121
167
  return request;
122
168
  },
123
169
  },
@@ -127,8 +173,7 @@ const extractors = [
127
173
  methods: {
128
174
  extractFromRequest: (request) => {
129
175
  const documents = [];
130
- for (let it = 0; it < request.input.body.documents.length; it++) {
131
- const document = request.input.body.documents[it];
176
+ for (const document of bodyOf(request).documents) {
132
177
  if (request.input.action === "mUpsert") {
133
178
  documents.push({
134
179
  _id: document._id,
@@ -143,24 +188,25 @@ const extractors = [
143
188
  },
144
189
  extractFromResult: (request) => request.result.successes,
145
190
  insertInRequest: (documents, request) => {
146
- const tmpDocuments = request.input.body.documents;
147
- request.input.body.documents = [];
148
- for (let it = 0; it < documents.length; it++) {
149
- const document = documents[it];
191
+ const body = bodyOf(request);
192
+ const tmpDocuments = body.documents;
193
+ const rewritten = [];
194
+ for (const [it, document] of documents.entries()) {
150
195
  if (request.input.action === "mUpsert") {
151
- request.input.body.documents.push({
196
+ rewritten.push({
152
197
  _id: document._id,
153
198
  changes: document._source,
154
- default: tmpDocuments[it].default,
199
+ default: tmpDocuments[it]?.default,
155
200
  });
156
201
  }
157
202
  else {
158
- request.input.body.documents.push({
203
+ rewritten.push({
159
204
  _id: document._id,
160
205
  body: document._source,
161
206
  });
162
207
  }
163
208
  }
209
+ body.documents = rewritten;
164
210
  return request;
165
211
  },
166
212
  insertInResult: (documents, request) => {
@@ -168,7 +214,7 @@ const extractors = [
168
214
  errors: request.result.errors,
169
215
  successes: documents,
170
216
  };
171
- request.setResult(result, { status: request.status });
217
+ request.response.configure({ result: result, status: request.status });
172
218
  return request;
173
219
  },
174
220
  },
@@ -207,12 +253,15 @@ const extractors = [
207
253
  ],
208
254
  extractFromResult: (request) => [request.result],
209
255
  insertInRequest: (documents, request) => {
210
- request.input.args._id = documents[0] && documents[0]._id;
211
- request.input.body = documents[0] && documents[0]._source;
256
+ request.input.args._id = documents[0]?._id;
257
+ request.input.body = documents[0]?._source;
212
258
  return request;
213
259
  },
214
260
  insertInResult: (documents, request) => {
215
- request.setResult(documents[0], { status: request.status });
261
+ request.response.configure({
262
+ result: documents[0],
263
+ status: request.status,
264
+ });
216
265
  return request;
217
266
  },
218
267
  },
@@ -223,25 +272,29 @@ const extractors = [
223
272
  extractFromRequest: (request) => [
224
273
  {
225
274
  _id: request.input.args._id,
226
- _source: request.input.body.changes,
275
+ _source: bodyOf(request).changes,
227
276
  },
228
277
  ],
229
278
  extractFromResult: (request) => [request.result],
230
279
  insertInRequest: ([document], request) => {
231
280
  if (document) {
232
281
  request.input.args._id = document._id;
233
- request.input.body.changes = document._source;
282
+ bodyOf(request).changes = document._source;
234
283
  }
235
284
  return request;
236
285
  },
237
286
  insertInResult: ([document], request) => {
238
- request.setResult(document, { status: request.status });
287
+ request.response.configure({
288
+ result: document,
289
+ status: request.status,
290
+ });
239
291
  return request;
240
292
  },
241
293
  },
242
294
  targets: ["upsert"],
243
295
  },
244
- ].reduce((acc, extractor) => {
296
+ ];
297
+ const extractors = extractorDefinitions.reduce((acc, extractor) => {
245
298
  extractor.targets.forEach((target) => {
246
299
  acc[target] = extractor.methods;
247
300
  });
@@ -250,7 +303,9 @@ const extractors = [
250
303
  class DocumentExtractor {
251
304
  constructor(request) {
252
305
  this.request = request;
253
- const extractor = extractors[request.input.action];
306
+ const extractor = request.input.action === null
307
+ ? undefined
308
+ : extractors[request.input.action];
254
309
  if (extractor === undefined) {
255
310
  throw kerror.get("core", "fatal", "assertion_failed", `no generic documents extractor for ${request.input.action}`);
256
311
  }
@@ -264,9 +319,18 @@ class DocumentExtractor {
264
319
  }
265
320
  }
266
321
  extract() {
322
+ // `search`, `deleteByQuery` and `export` have no request-side extractor:
323
+ // they are in `documentEventAliases.notBefore`, so the "before" pass that
324
+ // would ask for one never runs. Both were invoked unchecked.
325
+ if (this.extractMethod === null) {
326
+ throw kerror.get("core", "fatal", "assertion_failed", `no request-side documents extractor for ${this.request.input.action}`);
327
+ }
267
328
  return this.extractMethod(this.request);
268
329
  }
269
330
  insert(documents) {
331
+ if (this.insertMethod === null) {
332
+ throw kerror.get("core", "fatal", "assertion_failed", `no request-side documents extractor for ${this.request.input.action}`);
333
+ }
270
334
  return this.insertMethod(documents, this.request);
271
335
  }
272
336
  }