kuzzle 2.56.0 → 2.57.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/dist/bin/copy-binaries.js +71 -4
  2. package/dist/bin/start-kuzzle-server +191 -97
  3. package/dist/index.d.ts +31 -1
  4. package/dist/index.js +45 -2
  5. package/dist/lib/api/controllers/adminController.d.ts +4 -3
  6. package/dist/lib/api/controllers/adminController.js +1 -2
  7. package/dist/lib/api/controllers/authController.d.ts +37 -16
  8. package/dist/lib/api/controllers/authController.js +88 -39
  9. package/dist/lib/api/controllers/baseController.d.ts +10 -5
  10. package/dist/lib/api/controllers/baseController.js +36 -15
  11. package/dist/lib/api/controllers/bulkController.d.ts +11 -7
  12. package/dist/lib/api/controllers/bulkController.js +28 -5
  13. package/dist/lib/api/controllers/clusterController.d.ts +2 -2
  14. package/dist/lib/api/controllers/clusterController.js +3 -3
  15. package/dist/lib/api/controllers/collectionController.d.ts +57 -21
  16. package/dist/lib/api/controllers/collectionController.js +40 -11
  17. package/dist/lib/api/controllers/debugController.d.ts +1 -1
  18. package/dist/lib/api/controllers/documentController.d.ts +137 -28
  19. package/dist/lib/api/controllers/documentController.js +156 -125
  20. package/dist/lib/api/controllers/index.d.ts +27 -12
  21. package/dist/lib/api/controllers/index.js +28 -13
  22. package/dist/lib/api/controllers/indexController.d.ts +17 -10
  23. package/dist/lib/api/controllers/indexController.js +13 -11
  24. package/dist/lib/api/controllers/memoryStorageController.d.ts +2 -5
  25. package/dist/lib/api/controllers/memoryStorageController.js +199 -127
  26. package/dist/lib/api/controllers/realtimeController.d.ts +19 -9
  27. package/dist/lib/api/controllers/realtimeController.js +8 -4
  28. package/dist/lib/api/controllers/securityController.d.ts +42 -29
  29. package/dist/lib/api/controllers/securityController.js +35 -19
  30. package/dist/lib/api/controllers/serverController.d.ts +114 -19
  31. package/dist/lib/api/controllers/serverController.js +69 -29
  32. package/dist/lib/api/documentExtractor.d.ts +9 -7
  33. package/dist/lib/api/documentExtractor.js +105 -41
  34. package/dist/lib/api/funnel.d.ts +131 -29
  35. package/dist/lib/api/funnel.js +436 -225
  36. package/dist/lib/api/httpRoutes.d.ts +16 -11
  37. package/dist/lib/api/httpRoutes.js +272 -2
  38. package/dist/lib/api/openapi/OpenApiManager.d.ts +1 -1
  39. package/dist/lib/api/openapi/openApiGenerator.d.ts +1 -1
  40. package/dist/lib/api/rateLimiter.d.ts +15 -5
  41. package/dist/lib/api/rateLimiter.js +42 -14
  42. package/dist/lib/api/request/kuzzleRequest.d.ts +83 -12
  43. package/dist/lib/api/request/kuzzleRequest.js +88 -23
  44. package/dist/lib/api/request/requestContext.d.ts +20 -5
  45. package/dist/lib/api/request/requestContext.js +14 -4
  46. package/dist/lib/api/request/requestInput.d.ts +37 -6
  47. package/dist/lib/api/request/requestInput.js +22 -9
  48. package/dist/lib/api/request/requestResponse.d.ts +45 -9
  49. package/dist/lib/api/request/requestResponse.js +34 -3
  50. package/dist/lib/cluster/command.d.ts +131 -37
  51. package/dist/lib/cluster/command.js +243 -71
  52. package/dist/lib/cluster/idCardHandler.d.ts +18 -5
  53. package/dist/lib/cluster/idCardHandler.js +52 -19
  54. package/dist/lib/cluster/index.d.ts +8 -2
  55. package/dist/lib/cluster/index.js +6 -2
  56. package/dist/lib/cluster/node.d.ts +127 -49
  57. package/dist/lib/cluster/node.js +412 -179
  58. package/dist/lib/cluster/protobuf/command.proto +18 -0
  59. package/dist/lib/cluster/protobuf/commandMessages.d.ts +104 -0
  60. package/dist/lib/cluster/protobuf/commandMessages.js +30 -0
  61. package/dist/lib/cluster/protobuf/syncMessages.d.ts +184 -0
  62. package/dist/lib/cluster/protobuf/syncMessages.js +23 -0
  63. package/dist/lib/cluster/publisher.d.ts +118 -78
  64. package/dist/lib/cluster/publisher.js +174 -72
  65. package/dist/lib/cluster/state.d.ts +15 -9
  66. package/dist/lib/cluster/state.js +12 -8
  67. package/dist/lib/cluster/subscriber.d.ts +185 -131
  68. package/dist/lib/cluster/subscriber.js +357 -95
  69. package/dist/lib/cluster/workers/IDCardRenewer.d.ts +39 -8
  70. package/dist/lib/cluster/workers/IDCardRenewer.js +88 -23
  71. package/dist/lib/config/default.config.d.ts +2 -2
  72. package/dist/lib/config/default.config.js +10 -3
  73. package/dist/lib/config/documentEventAliases.d.ts +1 -1
  74. package/dist/lib/config/index.d.ts +2 -5
  75. package/dist/lib/config/index.js +30 -17
  76. package/dist/lib/core/auth/formatProcessing.d.ts +3 -3
  77. package/dist/lib/core/auth/passportResponse.d.ts +1 -1
  78. package/dist/lib/core/auth/passportWrapper.d.ts +1 -1
  79. package/dist/lib/core/auth/passportWrapper.js +14 -13
  80. package/dist/lib/core/auth/tokenManager.d.ts +24 -3
  81. package/dist/lib/core/auth/tokenManager.js +47 -19
  82. package/dist/lib/core/backend/applicationManager.d.ts +2 -2
  83. package/dist/lib/core/backend/backend.d.ts +16 -5
  84. package/dist/lib/core/backend/backend.js +14 -6
  85. package/dist/lib/core/backend/backendCluster.d.ts +1 -1
  86. package/dist/lib/core/backend/backendConfig.d.ts +17 -5
  87. package/dist/lib/core/backend/backendConfig.js +1 -0
  88. package/dist/lib/core/backend/backendController.d.ts +1 -1
  89. package/dist/lib/core/backend/backendController.js +8 -1
  90. package/dist/lib/core/backend/backendErrors.d.ts +15 -8
  91. package/dist/lib/core/backend/backendErrors.js +5 -0
  92. package/dist/lib/core/backend/backendHook.d.ts +1 -1
  93. package/dist/lib/core/backend/backendImport.d.ts +1 -1
  94. package/dist/lib/core/backend/backendOpenApi.d.ts +3 -2
  95. package/dist/lib/core/backend/backendPipe.d.ts +1 -1
  96. package/dist/lib/core/backend/backendPipe.js +9 -1
  97. package/dist/lib/core/backend/backendPlugin.d.ts +2 -2
  98. package/dist/lib/core/backend/backendSubscription.d.ts +2 -2
  99. package/dist/lib/core/backend/backendVault.d.ts +1 -1
  100. package/dist/lib/core/backend/backendVault.js +8 -1
  101. package/dist/lib/core/cache/cacheEngine.d.ts +7 -4
  102. package/dist/lib/core/cache/cacheEngine.js +25 -8
  103. package/dist/lib/core/debug/kuzzleDebugger.d.ts +2 -1
  104. package/dist/lib/core/debug/kuzzleDebugger.js +31 -17
  105. package/dist/lib/core/network/accessLogger.d.ts +33 -18
  106. package/dist/lib/core/network/accessLogger.js +135 -73
  107. package/dist/lib/core/network/clientConnection.d.ts +13 -11
  108. package/dist/lib/core/network/clientConnection.js +33 -9
  109. package/dist/lib/core/network/context.d.ts +17 -22
  110. package/dist/lib/core/network/context.js +43 -26
  111. package/dist/lib/core/network/entryPoint.d.ts +38 -16
  112. package/dist/lib/core/network/entryPoint.js +119 -48
  113. package/dist/lib/core/network/httpRouter/index.d.ts +20 -50
  114. package/dist/lib/core/network/httpRouter/index.js +61 -75
  115. package/dist/lib/core/network/httpRouter/routeHandler.d.ts +17 -32
  116. package/dist/lib/core/network/httpRouter/routeHandler.js +26 -36
  117. package/dist/lib/core/network/httpRouter/routePart.d.ts +9 -18
  118. package/dist/lib/core/network/httpRouter/routePart.js +61 -43
  119. package/dist/lib/core/network/httpRouter/routeTypes.d.ts +3 -0
  120. package/dist/lib/core/network/httpRouter/routeTypes.js +23 -0
  121. package/dist/lib/core/network/networkEntryPoint.d.ts +20 -0
  122. package/dist/lib/core/network/networkEntryPoint.js +23 -0
  123. package/dist/lib/core/network/protocolManifest.d.ts +5 -4
  124. package/dist/lib/core/network/protocolManifest.js +6 -3
  125. package/dist/lib/core/network/protocols/httpMessage.d.ts +25 -18
  126. package/dist/lib/core/network/protocols/httpMessage.js +14 -11
  127. package/dist/lib/core/network/protocols/httpwsProtocol.d.ts +84 -93
  128. package/dist/lib/core/network/protocols/httpwsProtocol.js +284 -129
  129. package/dist/lib/core/network/protocols/internalProtocol.d.ts +26 -15
  130. package/dist/lib/core/network/protocols/internalProtocol.js +17 -16
  131. package/dist/lib/core/network/protocols/mqttProtocol.d.ts +56 -32
  132. package/dist/lib/core/network/protocols/mqttProtocol.js +91 -44
  133. package/dist/lib/core/network/protocols/protocol.d.ts +85 -21
  134. package/dist/lib/core/network/protocols/protocol.js +83 -27
  135. package/dist/lib/core/network/router.d.ts +13 -22
  136. package/dist/lib/core/network/router.js +59 -46
  137. package/dist/lib/core/plugin/plugin.d.ts +57 -51
  138. package/dist/lib/core/plugin/plugin.js +218 -103
  139. package/dist/lib/core/plugin/pluginContext.d.ts +54 -11
  140. package/dist/lib/core/plugin/pluginContext.js +99 -58
  141. package/dist/lib/core/plugin/pluginManifest.d.ts +6 -2
  142. package/dist/lib/core/plugin/pluginManifest.js +18 -11
  143. package/dist/lib/core/plugin/pluginRepository.d.ts +35 -44
  144. package/dist/lib/core/plugin/pluginRepository.js +35 -50
  145. package/dist/lib/core/plugin/pluginsManager.d.ts +128 -46
  146. package/dist/lib/core/plugin/pluginsManager.js +468 -231
  147. package/dist/lib/core/plugin/privilegedContext.d.ts +4 -9
  148. package/dist/lib/core/plugin/privilegedContext.js +5 -10
  149. package/dist/lib/core/realtime/actionEnum.d.ts +12 -21
  150. package/dist/lib/core/realtime/actionEnum.js +6 -7
  151. package/dist/lib/core/realtime/channel.d.ts +11 -5
  152. package/dist/lib/core/realtime/channel.js +17 -2
  153. package/dist/lib/core/realtime/connectionRooms.d.ts +2 -2
  154. package/dist/lib/core/realtime/hotelClerk.d.ts +12 -6
  155. package/dist/lib/core/realtime/hotelClerk.js +29 -11
  156. package/dist/lib/core/realtime/index.d.ts +8 -3
  157. package/dist/lib/core/realtime/index.js +12 -5
  158. package/dist/lib/core/realtime/notification/document.d.ts +54 -25
  159. package/dist/lib/core/realtime/notification/document.js +10 -13
  160. package/dist/lib/core/realtime/notification/index.d.ts +9 -3
  161. package/dist/lib/core/realtime/notification/index.js +10 -4
  162. package/dist/lib/core/realtime/notification/server.d.ts +7 -10
  163. package/dist/lib/core/realtime/notification/server.js +4 -7
  164. package/dist/lib/core/realtime/notification/user.d.ts +45 -21
  165. package/dist/lib/core/realtime/notification/user.js +8 -9
  166. package/dist/lib/core/realtime/notifier.d.ts +52 -40
  167. package/dist/lib/core/realtime/notifier.js +60 -25
  168. package/dist/lib/core/realtime/room.d.ts +1 -1
  169. package/dist/lib/core/realtime/subscription.d.ts +11 -6
  170. package/dist/lib/core/realtime/subscription.js +5 -1
  171. package/dist/lib/core/security/index.d.ts +14 -6
  172. package/dist/lib/core/security/index.js +27 -13
  173. package/dist/lib/core/security/profileRepository.d.ts +24 -19
  174. package/dist/lib/core/security/profileRepository.js +23 -10
  175. package/dist/lib/core/security/roleRepository.d.ts +60 -23
  176. package/dist/lib/core/security/roleRepository.js +122 -53
  177. package/dist/lib/core/security/securityLoader.d.ts +33 -18
  178. package/dist/lib/core/security/securityLoader.js +43 -16
  179. package/dist/lib/core/security/tokenRepository.d.ts +21 -7
  180. package/dist/lib/core/security/tokenRepository.js +50 -23
  181. package/dist/lib/core/security/userRepository.d.ts +44 -21
  182. package/dist/lib/core/security/userRepository.js +59 -19
  183. package/dist/lib/core/shared/KoncordeWrapper.d.ts +1 -1
  184. package/dist/lib/core/shared/ObjectRepository.d.ts +80 -18
  185. package/dist/lib/core/shared/ObjectRepository.js +57 -29
  186. package/dist/lib/core/shared/abstractManifest.d.ts +21 -8
  187. package/dist/lib/core/shared/abstractManifest.js +57 -17
  188. package/dist/lib/core/shared/sdk/embeddedSdk.d.ts +3 -1
  189. package/dist/lib/core/shared/sdk/embeddedSdk.js +8 -7
  190. package/dist/lib/core/shared/sdk/funnelProtocol.d.ts +2 -1
  191. package/dist/lib/core/shared/sdk/funnelProtocol.js +12 -3
  192. package/dist/lib/core/shared/sdk/impersonatedSdk.d.ts +11 -5
  193. package/dist/lib/core/shared/sdk/impersonatedSdk.js +22 -9
  194. package/dist/lib/core/shared/store.d.ts +45 -29
  195. package/dist/lib/core/shared/store.js +48 -27
  196. package/dist/lib/core/statistics/statistics.d.ts +1 -1
  197. package/dist/lib/core/storage/clientAdapter.d.ts +39 -21
  198. package/dist/lib/core/storage/clientAdapter.js +88 -48
  199. package/dist/lib/core/storage/indexCache.d.ts +8 -0
  200. package/dist/lib/core/storage/indexCache.js +16 -7
  201. package/dist/lib/core/storage/storageEngine.d.ts +7 -6
  202. package/dist/lib/core/storage/storageEngine.js +11 -8
  203. package/dist/lib/core/validation/baseType.d.ts +22 -22
  204. package/dist/lib/core/validation/baseType.js +11 -26
  205. package/dist/lib/core/validation/specification.d.ts +148 -0
  206. package/dist/lib/core/validation/specification.js +34 -0
  207. package/dist/lib/core/validation/typeOptions.d.ts +62 -0
  208. package/dist/lib/core/validation/typeOptions.js +23 -0
  209. package/dist/lib/core/validation/types/anything.d.ts +3 -6
  210. package/dist/lib/core/validation/types/anything.js +7 -7
  211. package/dist/lib/core/validation/types/boolean.d.ts +5 -12
  212. package/dist/lib/core/validation/types/boolean.js +7 -12
  213. package/dist/lib/core/validation/types/date.d.ts +19 -11
  214. package/dist/lib/core/validation/types/date.js +212 -161
  215. package/dist/lib/core/validation/types/email.d.ts +7 -11
  216. package/dist/lib/core/validation/types/email.js +13 -17
  217. package/dist/lib/core/validation/types/enum.d.ts +7 -11
  218. package/dist/lib/core/validation/types/enum.js +39 -20
  219. package/dist/lib/core/validation/types/geoPoint.d.ts +5 -13
  220. package/dist/lib/core/validation/types/geoPoint.js +10 -15
  221. package/dist/lib/core/validation/types/geoShape.d.ts +22 -21
  222. package/dist/lib/core/validation/types/geoShape.js +113 -129
  223. package/dist/lib/core/validation/types/geoShapeUtils.d.ts +15 -0
  224. package/dist/lib/core/validation/types/geoShapeUtils.js +75 -0
  225. package/dist/lib/core/validation/types/integer.d.ts +7 -5
  226. package/dist/lib/core/validation/types/integer.js +7 -13
  227. package/dist/lib/core/validation/types/ipAddress.d.ts +7 -11
  228. package/dist/lib/core/validation/types/ipAddress.js +13 -17
  229. package/dist/lib/core/validation/types/numeric.d.ts +7 -11
  230. package/dist/lib/core/validation/types/numeric.js +22 -29
  231. package/dist/lib/core/validation/types/object.d.ts +8 -15
  232. package/dist/lib/core/validation/types/object.js +12 -21
  233. package/dist/lib/core/validation/types/string.d.ts +7 -11
  234. package/dist/lib/core/validation/types/string.js +22 -29
  235. package/dist/lib/core/validation/types/url.d.ts +7 -11
  236. package/dist/lib/core/validation/types/url.js +14 -18
  237. package/dist/lib/core/validation/validation.d.ts +119 -80
  238. package/dist/lib/core/validation/validation.js +470 -412
  239. package/dist/lib/core/validation/validationUtils.d.ts +31 -0
  240. package/dist/lib/core/validation/validationUtils.js +190 -0
  241. package/dist/lib/kerror/codes/4-plugin.json +0 -12
  242. package/dist/lib/kerror/codes/index.d.ts +12 -2
  243. package/dist/lib/kerror/codes/index.js +5 -4
  244. package/dist/lib/kerror/errors/badRequestError.d.ts +1 -1
  245. package/dist/lib/kerror/errors/badRequestError.js +1 -1
  246. package/dist/lib/kerror/errors/externalServiceError.d.ts +1 -1
  247. package/dist/lib/kerror/errors/externalServiceError.js +1 -1
  248. package/dist/lib/kerror/errors/forbiddenError.d.ts +1 -1
  249. package/dist/lib/kerror/errors/forbiddenError.js +1 -1
  250. package/dist/lib/kerror/errors/gatewayTimeoutError.d.ts +1 -1
  251. package/dist/lib/kerror/errors/gatewayTimeoutError.js +1 -1
  252. package/dist/lib/kerror/errors/internalError.d.ts +1 -1
  253. package/dist/lib/kerror/errors/internalError.js +1 -1
  254. package/dist/lib/kerror/errors/kuzzleError.d.ts +32 -3
  255. package/dist/lib/kerror/errors/kuzzleError.js +21 -7
  256. package/dist/lib/kerror/errors/multipleErrorsError.d.ts +2 -2
  257. package/dist/lib/kerror/errors/multipleErrorsError.js +2 -2
  258. package/dist/lib/kerror/errors/notFoundError.d.ts +1 -1
  259. package/dist/lib/kerror/errors/notFoundError.js +1 -1
  260. package/dist/lib/kerror/errors/partialError.d.ts +8 -2
  261. package/dist/lib/kerror/errors/partialError.js +22 -9
  262. package/dist/lib/kerror/errors/pluginImplementationError.d.ts +9 -1
  263. package/dist/lib/kerror/errors/pluginImplementationError.js +9 -3
  264. package/dist/lib/kerror/errors/preconditionError.d.ts +1 -1
  265. package/dist/lib/kerror/errors/preconditionError.js +1 -1
  266. package/dist/lib/kerror/errors/serviceUnavailableError.d.ts +1 -1
  267. package/dist/lib/kerror/errors/serviceUnavailableError.js +1 -1
  268. package/dist/lib/kerror/errors/sizeLimitError.d.ts +1 -1
  269. package/dist/lib/kerror/errors/sizeLimitError.js +1 -1
  270. package/dist/lib/kerror/errors/tooManyRequestsError.d.ts +1 -1
  271. package/dist/lib/kerror/errors/tooManyRequestsError.js +1 -1
  272. package/dist/lib/kerror/errors/unauthorizedError.d.ts +1 -1
  273. package/dist/lib/kerror/errors/unauthorizedError.js +1 -1
  274. package/dist/lib/kerror/index.d.ts +19 -13
  275. package/dist/lib/kerror/index.js +60 -19
  276. package/dist/lib/kuzzle/Logger.d.ts +2 -2
  277. package/dist/lib/kuzzle/dumpGenerator.d.ts +12 -8
  278. package/dist/lib/kuzzle/dumpGenerator.js +130 -62
  279. package/dist/lib/kuzzle/event/KuzzleEventEmitter.d.ts +18 -9
  280. package/dist/lib/kuzzle/event/KuzzleEventEmitter.js +45 -18
  281. package/dist/lib/kuzzle/event/pipeRunner.d.ts +37 -16
  282. package/dist/lib/kuzzle/event/pipeRunner.js +73 -26
  283. package/dist/lib/kuzzle/event/waterfall.d.ts +11 -1
  284. package/dist/lib/kuzzle/event/waterfall.js +38 -13
  285. package/dist/lib/kuzzle/internalIndexHandler.d.ts +11 -174
  286. package/dist/lib/kuzzle/internalIndexHandler.js +58 -29
  287. package/dist/lib/kuzzle/kuzzle.d.ts +25 -10
  288. package/dist/lib/kuzzle/kuzzle.js +74 -17
  289. package/dist/lib/kuzzle/kuzzleStateEnum.d.ts +16 -12
  290. package/dist/lib/kuzzle/kuzzleStateEnum.js +5 -7
  291. package/dist/lib/kuzzle/vault.d.ts +5 -1
  292. package/dist/lib/kuzzle/vault.js +29 -17
  293. package/dist/lib/model/security/profile.d.ts +34 -5
  294. package/dist/lib/model/security/profile.js +6 -5
  295. package/dist/lib/model/security/rights.d.ts +12 -4
  296. package/dist/lib/model/security/rights.js +7 -6
  297. package/dist/lib/model/security/role.d.ts +8 -4
  298. package/dist/lib/model/security/role.js +12 -6
  299. package/dist/lib/model/security/token.d.ts +8 -0
  300. package/dist/lib/model/security/user.d.ts +8 -2
  301. package/dist/lib/model/security/user.js +7 -4
  302. package/dist/lib/model/storage/apiKey.d.ts +55 -26
  303. package/dist/lib/model/storage/apiKey.js +97 -24
  304. package/dist/lib/model/storage/baseModel.d.ts +77 -66
  305. package/dist/lib/model/storage/baseModel.js +21 -34
  306. package/dist/lib/service/cache/redis.d.ts +53 -36
  307. package/dist/lib/service/cache/redis.js +148 -71
  308. package/dist/lib/service/service.d.ts +14 -19
  309. package/dist/lib/service/service.js +41 -22
  310. package/dist/lib/service/storage/7/elasticsearch.d.ts +136 -93
  311. package/dist/lib/service/storage/7/elasticsearch.js +218 -165
  312. package/dist/lib/service/storage/7/esWrapper.d.ts +30 -13
  313. package/dist/lib/service/storage/7/esWrapper.js +58 -37
  314. package/dist/lib/service/storage/8/elasticsearch.d.ts +153 -119
  315. package/dist/lib/service/storage/8/elasticsearch.js +286 -213
  316. package/dist/lib/service/storage/8/esWrapper.d.ts +30 -13
  317. package/dist/lib/service/storage/8/esWrapper.js +59 -38
  318. package/dist/lib/service/storage/commons/queryTranslator.d.ts +3 -3
  319. package/dist/lib/service/storage/commons/queryTranslator.js +71 -35
  320. package/dist/lib/types/ApiRoute.d.ts +12 -0
  321. package/dist/lib/types/ApiRoute.js +23 -0
  322. package/dist/lib/types/ClientConnection.d.ts +1 -1
  323. package/dist/lib/types/EventHandler.d.ts +10 -0
  324. package/dist/lib/types/Global.d.ts +8 -3
  325. package/dist/lib/types/HttpMessage.d.ts +2 -2
  326. package/dist/lib/types/HttpStream.d.ts +1 -1
  327. package/dist/lib/types/HttpStream.js +3 -1
  328. package/dist/lib/types/JSONObject.d.ts +9 -0
  329. package/dist/lib/types/JSONObject.js +23 -0
  330. package/dist/lib/types/Kuzzle.d.ts +5 -3
  331. package/dist/lib/types/KuzzleDocument.d.ts +1 -1
  332. package/dist/lib/types/KuzzleWebSocket.d.ts +24 -0
  333. package/dist/lib/types/KuzzleWebSocket.js +23 -0
  334. package/dist/lib/types/OpenApiDefinition.d.ts +1 -1
  335. package/dist/lib/types/Plugin.d.ts +33 -8
  336. package/dist/lib/types/PluginInstance.d.ts +67 -0
  337. package/dist/lib/types/PluginInstance.js +23 -0
  338. package/dist/lib/types/Policy.d.ts +1 -1
  339. package/dist/lib/types/Target.d.ts +8 -0
  340. package/dist/lib/types/Token.d.ts +14 -2
  341. package/dist/lib/types/config/HttpConfiguration.d.ts +5 -0
  342. package/dist/lib/types/config/KuzzleConfiguration.d.ts +102 -1
  343. package/dist/lib/types/config/PluginsConfiguration.d.ts +3 -2
  344. package/dist/lib/types/config/SecurityConfiguration.d.ts +6 -2
  345. package/dist/lib/types/config/ServerConfiguration.d.ts +2 -2
  346. package/dist/lib/types/config/ServicesConfiguration.d.ts +1 -1
  347. package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.d.ts +131 -0
  348. package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.js +3 -0
  349. package/dist/lib/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +2 -106
  350. package/dist/lib/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +2 -26
  351. package/dist/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +3 -0
  352. package/dist/lib/types/controllers/Controller.d.ts +12 -3
  353. package/dist/lib/types/controllers/ControllerDefinition.d.ts +2 -2
  354. package/dist/lib/types/controllers/{adminControlller.type.js → adminController.type.js} +1 -1
  355. package/dist/lib/types/controllers/authController.type.d.ts +2 -2
  356. package/dist/lib/types/core/auth/formatProcessing.type.d.ts +7 -1
  357. package/dist/lib/types/errors/ErrorDomains.d.ts +1 -1
  358. package/dist/lib/types/events/EventGenericDocument.d.ts +10 -9
  359. package/dist/lib/types/events/EventProtocol.d.ts +4 -4
  360. package/dist/lib/types/index.d.ts +7 -0
  361. package/dist/lib/types/index.js +7 -0
  362. package/dist/lib/types/shared/StoreCollectionsDefinition.d.ts +1 -1
  363. package/dist/lib/types/storage/7/Elasticsearch.d.ts +62 -13
  364. package/dist/lib/types/storage/8/Elasticsearch.d.ts +62 -13
  365. package/dist/lib/util/Inflector.d.ts +4 -1
  366. package/dist/lib/util/Inflector.js +0 -3
  367. package/dist/lib/util/assertType.d.ts +24 -27
  368. package/dist/lib/util/assertType.js +28 -39
  369. package/dist/lib/util/async.js +19 -6
  370. package/dist/lib/util/asyncStore.js +1 -1
  371. package/dist/lib/util/bufferedPassThrough.d.ts +9 -0
  372. package/dist/lib/util/bufferedPassThrough.js +27 -13
  373. package/dist/lib/util/bytes.d.ts +1 -1
  374. package/dist/lib/util/bytes.js +6 -2
  375. package/dist/lib/util/debug.d.ts +3 -1
  376. package/dist/lib/util/debug.js +42 -10
  377. package/dist/lib/util/deprecate.d.ts +9 -1
  378. package/dist/lib/util/deprecate.js +10 -6
  379. package/dist/lib/util/didYouMean.d.ts +2 -1
  380. package/dist/lib/util/didYouMean.js +8 -4
  381. package/dist/lib/util/distributedLock.d.ts +56 -0
  382. package/dist/lib/util/distributedLock.js +166 -0
  383. package/dist/lib/util/dump-collection.d.ts +1 -1
  384. package/dist/lib/util/dump-collection.js +4 -5
  385. package/dist/lib/util/extractFields.d.ts +15 -11
  386. package/dist/lib/util/extractFields.js +8 -9
  387. package/dist/lib/util/koncordeCompat.d.ts +2 -2
  388. package/dist/lib/util/koncordeCompat.js +33 -0
  389. package/dist/lib/util/memoize.d.ts +7 -6
  390. package/dist/lib/util/memoize.js +3 -3
  391. package/dist/lib/util/mutex.d.ts +22 -2
  392. package/dist/lib/util/mutex.js +39 -1
  393. package/dist/lib/util/name-generator.js +14 -2
  394. package/dist/lib/util/promback.d.ts +20 -11
  395. package/dist/lib/util/promback.js +14 -7
  396. package/dist/lib/util/requestAssertions.d.ts +30 -10
  397. package/dist/lib/util/requestAssertions.js +125 -121
  398. package/dist/lib/util/safeObject.d.ts +3 -3
  399. package/dist/lib/util/safeObject.js +7 -3
  400. package/dist/lib/util/stackTrace.d.ts +13 -5
  401. package/dist/lib/util/stackTrace.js +17 -12
  402. package/dist/lib/util/thrown.d.ts +13 -0
  403. package/dist/lib/util/thrown.js +46 -0
  404. package/dist/package.json +26 -19
  405. package/package.json +26 -19
  406. package/dist/lib/util/wildcard.d.ts +0 -1
  407. package/dist/lib/util/wildcard.js +0 -46
  408. /package/dist/lib/types/controllers/{adminControlller.type.d.ts → adminController.type.d.ts} +0 -0
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /*
2
3
  * Kuzzle, a backend software, self-hostable and ready to use
3
4
  * to power modern apps
@@ -18,26 +19,81 @@
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 semver = require("semver");
25
- const { PluginContext } = require("./pluginContext");
26
- const PrivilegedPluginContext = require("./privilegedContext");
27
- const kerror = require("../../kerror");
28
- const errorCodes = require("../../kerror/codes");
29
- const Manifest = require("./pluginManifest");
30
- const { has, isPlainObject } = require("../../util/safeObject");
31
- const defaultConfig = require("../../config/default.config");
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_path_1 = __importDefault(require("node:path"));
50
+ const semver = __importStar(require("semver"));
51
+ const default_config_1 = __importDefault(require("../../config/default.config"));
52
+ const kerror = __importStar(require("../../kerror"));
53
+ const errorCodes = __importStar(require("../../kerror/codes"));
54
+ const safeObject_1 = require("../../util/safeObject");
55
+ const pluginManifest_1 = __importDefault(require("./pluginManifest"));
56
+ const pluginContext_1 = require("./pluginContext");
57
+ const privilegedContext_1 = __importDefault(require("./privilegedContext"));
32
58
  const assertionError = kerror.wrap("plugin", "assert");
33
59
  const runtimeError = kerror.wrap("plugin", "runtime");
34
60
  const PLUGIN_NAME_REGEX = /^[a-z-\d]+$/;
35
- const HTTP_VERBS = ["get", "head", "post", "put", "delete", "patch", "options"];
61
+ const HTTP_VERBS = new Set([
62
+ "get",
63
+ "head",
64
+ "post",
65
+ "put",
66
+ "delete",
67
+ "patch",
68
+ "options",
69
+ ]);
70
+ /**
71
+ * Kuzzle's own wrapper around a plugin: its name, config, context and manifest,
72
+ * plus the assertions a plugin must satisfy before it is loaded.
73
+ *
74
+ * Not to be confused with `lib/types/Plugin.ts`'s `Plugin`, which is the
75
+ * abstract class a plugin author extends. This one wraps an instance of that.
76
+ */
36
77
  class Plugin {
37
- constructor(instance, { name, application = false, deprecationWarning = true } = {}) {
78
+ constructor(instance, { name, application = false, deprecationWarning = true, } = {}) {
79
+ /**
80
+ * Set by `PluginsManager` once the plugin's own `init` has resolved.
81
+ *
82
+ * The JavaScript declared a `_initCalled` in the constructor and never read
83
+ * it: what the manager actually sets, and what the specs assert, is this
84
+ * public `initCalled`, created ad hoc on the object. The dead field is gone
85
+ * and the live one is declared.
86
+ */
87
+ this.initCalled = false;
88
+ /**
89
+ * Set from the outside by `Backend`, which reads it from the git tree — the
90
+ * wrapper has no way to derive it. `info()` reports it for an application.
91
+ */
92
+ this.commit = null;
93
+ /** Set from the outside by `Backend`, like `commit`. */
94
+ this.openApi = null;
38
95
  this._instance = instance;
39
96
  this._application = application;
40
- this._initCalled = false;
41
97
  this._config = {};
42
98
  this._context = null;
43
99
  this._version = instance.version || "";
@@ -50,27 +106,31 @@ class Plugin {
50
106
  }
51
107
  init(name) {
52
108
  this.name = name;
53
- if (global.kuzzle.config.plugins[this.name]) {
54
- this.config = JSON.parse(JSON.stringify(global.kuzzle.config.plugins[this.name]));
109
+ const configured = global.kuzzle.config.plugins[this.name];
110
+ if (configured) {
111
+ // structuredClone is not equivalent: a plugin's configuration is user
112
+ // data that has been through JSON, and swapping clone semantics in a
113
+ // conversion is out of scope.
114
+ this.config = JSON.parse(JSON.stringify(configured)); // NOSONAR
55
115
  }
56
116
  // check plugin privileged prerequisites
57
117
  // user need to acknowledge privileged mode in plugin configuration
58
118
  if (this.config.privileged) {
59
- if (!this.manifest || !this.manifest.privileged) {
119
+ if (!this.manifest?.privileged) {
60
120
  throw assertionError.get("privileged_not_supported", this.name);
61
121
  }
62
122
  }
63
- else if (this.manifest && this.manifest.privileged) {
123
+ else if (this.manifest?.privileged) {
64
124
  throw assertionError.get("privileged_not_set", this.name);
65
125
  }
66
- if (this.manifest && this.manifest.kuzzleVersion) {
126
+ if (this.manifest?.kuzzleVersion) {
67
127
  if (!semver.satisfies(global.kuzzle.config.version, this.manifest.kuzzleVersion, { includePrerelease: true })) {
68
128
  throw kerror.get("plugin", "manifest", "version_mismatch", this.name, global.kuzzle.config.version, this.manifest.kuzzleVersion);
69
129
  }
70
130
  }
71
131
  this._context = this.config.privileged
72
- ? new PrivilegedPluginContext(this.name)
73
- : new PluginContext(this.name);
132
+ ? new privilegedContext_1.default(this.name)
133
+ : new pluginContext_1.PluginContext(this.name);
74
134
  }
75
135
  info() {
76
136
  /* eslint-disable sort-keys */
@@ -80,8 +140,8 @@ class Plugin {
80
140
  version: this.version,
81
141
  commit: this.commit,
82
142
  controllers: this.instance.api,
83
- pipes: Object.keys(this.instance.pipes),
84
- hooks: Object.keys(this.instance.hooks),
143
+ pipes: Object.keys(this.instance.pipes ?? {}),
144
+ hooks: Object.keys(this.instance.hooks ?? {}),
85
145
  };
86
146
  }
87
147
  const description = {
@@ -95,23 +155,23 @@ class Plugin {
95
155
  imports: {},
96
156
  };
97
157
  /* eslint-enable sort-keys */
98
- if (has(this.instance, "imports")) {
99
- description.imports = Object.keys(this.instance.imports);
158
+ if ((0, safeObject_1.has)(this.instance, "imports")) {
159
+ description.imports = Object.keys(this.instance.imports ?? {});
100
160
  }
101
- if (has(this.instance, "hooks")) {
102
- description.hooks = Object.keys(this.instance.hooks);
161
+ if ((0, safeObject_1.has)(this.instance, "hooks")) {
162
+ description.hooks = Object.keys(this.instance.hooks ?? {});
103
163
  }
104
- if (has(this.instance, "pipes")) {
105
- description.pipes = Object.keys(this.instance.pipes);
164
+ if ((0, safeObject_1.has)(this.instance, "pipes")) {
165
+ description.pipes = Object.keys(this.instance.pipes ?? {});
106
166
  }
107
- if (has(this.instance, "controllers")) {
108
- description.controllers = Object.keys(this.instance.controllers).map((controller) => `${this.name}/${controller}`);
167
+ if ((0, safeObject_1.has)(this.instance, "controllers")) {
168
+ description.controllers = Object.keys(this.instance.controllers ?? {}).map((controller) => `${this.name}/${controller}`);
109
169
  }
110
- if (has(this.instance, "routes")) {
111
- description.routes = this.instance.routes;
170
+ if ((0, safeObject_1.has)(this.instance, "routes")) {
171
+ description.routes = this.instance.routes ?? [];
112
172
  }
113
- if (has(this.instance, "strategies")) {
114
- description.strategies = Object.keys(this.instance.strategies);
173
+ if ((0, safeObject_1.has)(this.instance, "strategies")) {
174
+ description.strategies = Object.keys(this.instance.strategies ?? {});
115
175
  }
116
176
  return description;
117
177
  }
@@ -155,7 +215,10 @@ class Plugin {
155
215
  return this._name;
156
216
  }
157
217
  set name(name) {
158
- if (!this.constructor.checkName(name)) {
218
+ // `Plugin.checkName` rather than `this.constructor.checkName`: nothing
219
+ // extends this class, and the static-through-instance form is not typable
220
+ // without an assertion.
221
+ if (!Plugin.checkName(name)) {
159
222
  this.printDeprecation("Plugin names should be in kebab-case. This behavior will be enforced in futur versions of Kuzzle.");
160
223
  }
161
224
  this._name = name;
@@ -168,49 +231,43 @@ class Plugin {
168
231
  }
169
232
  // static methods ============================================================
170
233
  static loadFromDirectory(pluginPath) {
171
- if (!fs.statSync(pluginPath).isDirectory()) {
234
+ if (!node_fs_1.default.statSync(pluginPath).isDirectory()) {
172
235
  throw assertionError.get("cannot_load", pluginPath, "Not a directory.");
173
236
  }
174
237
  let plugin;
175
- let PluginClass = {};
238
+ // Captured before the instantiation that may fail, because the catch
239
+ // below names it — the class itself used to be held in a `let` seeded with
240
+ // `null`, which is what the error path would have read on a failed require.
241
+ let pluginClassName;
176
242
  try {
177
- PluginClass = require(pluginPath);
178
- const pluginInstance = new PluginClass();
179
- plugin = new Plugin(pluginInstance);
243
+ // A plugin is loaded from disk at runtime: the path is only known then,
244
+ // so this require is the feature, not an unconverted import.
245
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
246
+ const PluginClass = require(pluginPath);
247
+ pluginClassName = PluginClass.name;
248
+ plugin = new Plugin(new PluginClass());
180
249
  }
181
250
  catch (error) {
182
- if (error.message.match(/not a constructor/i)) {
183
- throw assertionError.get("not_a_constructor", PluginClass.name);
251
+ const cause = error instanceof Error ? error : new Error(String(error));
252
+ if (/not a constructor/i.exec(cause.message)) {
253
+ throw assertionError.get("not_a_constructor", pluginClassName);
184
254
  }
185
- throw runtimeError.getFrom(error, "unexpected_error", error.message);
255
+ throw runtimeError.getFrom(cause, "unexpected_error", cause.message);
186
256
  }
187
257
  // load manifest
188
- plugin.manifest = new Manifest(pluginPath);
258
+ plugin.manifest = new pluginManifest_1.default(pluginPath);
189
259
  plugin.manifest.load();
190
- plugin.name = plugin.manifest.name;
260
+ const manifest = plugin.manifest;
261
+ // `load()` above throws `missing_name` rather than leave it unset.
262
+ plugin.name = manifest.name ?? "";
191
263
  // load plugin version if exists
192
- const packageJsonPath = path.join(pluginPath, "package.json");
193
- if (fs.existsSync(packageJsonPath) && !plugin.version) {
264
+ const packageJsonPath = node_path_1.default.join(pluginPath, "package.json");
265
+ if (node_fs_1.default.existsSync(packageJsonPath) && !plugin.version) {
266
+ // Same as the plugin's own module above: a path known only at runtime.
267
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
194
268
  plugin.version = require(packageJsonPath).version;
195
269
  }
196
- // load customs errors configuration file
197
- if (plugin.manifest.raw.errors) {
198
- try {
199
- // we use the manifest name instead of the lowerCased plugin name
200
- // to ensure to match the plugin original name in the configuration
201
- const config = global.kuzzle.config[plugin.manifest.name];
202
- const pluginCode = config && config._pluginCode ? config._pluginCode : 0x00;
203
- errorCodes.loadPluginsErrors(plugin.manifest.raw, pluginCode);
204
- global.kuzzle.log.info(`${plugin.logPrefix} Custom errors successfully loaded.`);
205
- }
206
- catch (err) {
207
- if (err.message.match(/Error configuration file/i) ||
208
- err instanceof SyntaxError) {
209
- throw kerror.getFrom(err, "plugin", "manifest", "invalid_errors", plugin.manifest.name, err.message);
210
- }
211
- throw err;
212
- }
213
- }
270
+ loadPluginErrors(plugin);
214
271
  // check if the plugin exposes a "init" method
215
272
  if (typeof plugin.instance.init !== "function") {
216
273
  throw assertionError.get("init_not_found", plugin.name);
@@ -224,51 +281,109 @@ class Plugin {
224
281
  if (typeof name !== "string") {
225
282
  throw assertionError.get("invalid_controller_definition", "Controller name must be a string");
226
283
  }
227
- if (!isPlainObject(definition)) {
284
+ if (!(0, safeObject_1.isPlainObject)(definition)) {
228
285
  throw assertionError.get("invalid_controller_definition", name, "Controller definition must be an object");
229
286
  }
230
- if (!isPlainObject(definition.actions)) {
287
+ if (!(0, safeObject_1.isPlainObject)(definition.actions)) {
231
288
  throw assertionError.get("invalid_controller_definition", name, 'Controller definition "actions" property must be an object');
232
289
  }
233
290
  for (const [action, actionDefinition] of Object.entries(definition.actions)) {
234
- if (!global.app.config.content.controllers?.definition
235
- ?.allowAdditionalActionProperties ??
236
- defaultConfig.controllers.definition.allowAdditionalActionProperties) {
237
- const actionProperties = Object.keys(actionDefinition).filter((prop) => prop !== "handler" && prop !== "http");
238
- if (actionProperties.length > 0) {
239
- throw assertionError.get("invalid_controller_definition", name, `action "${action}" has invalid properties: ${actionProperties.join(", ")}`);
240
- }
241
- }
242
- if (typeof action !== "string") {
243
- throw assertionError.get("invalid_controller_definition", name, "action names must be strings");
244
- }
245
- if (typeof actionDefinition.handler !== "function") {
246
- throw assertionError.get("invalid_controller_definition", name, `action "${action}" handler must be a function`);
247
- }
248
- if (actionDefinition.http) {
249
- if (!Array.isArray(actionDefinition.http)) {
250
- throw assertionError.get("invalid_controller_definition", name, `action "${action}" http definition must be an array`);
251
- }
252
- for (const route of actionDefinition.http) {
253
- if (typeof route.verb !== "string" || route.verb.length === 0) {
254
- throw assertionError.get("invalid_controller_definition", name, `action "${action}" http "verb" property must be a non-empty string`);
255
- }
256
- if (!HTTP_VERBS.includes(route.verb.toLowerCase())) {
257
- throw assertionError.get("invalid_controller_definition", name, `action "${action}" http verb "${route.verb}" is not a valid http verb`);
258
- }
259
- checkHttpRouteProperties(route, action, name, application);
260
- const routeProperties = Object.keys(route);
261
- if (routeProperties.length > 3) {
262
- routeProperties.splice(routeProperties.indexOf("url"), 1);
263
- routeProperties.splice(routeProperties.indexOf("path"), 1);
264
- routeProperties.splice(routeProperties.indexOf("verb"), 1);
265
- routeProperties.splice(routeProperties.indexOf("openapi"), 1);
266
- throw assertionError.get("invalid_controller_definition", name, `action "${action}" has invalid http properties: ${routeProperties.join(", ")}`);
267
- }
268
- }
291
+ checkActionDefinition(name, action, actionDefinition, application);
292
+ }
293
+ }
294
+ }
295
+ /**
296
+ * Checks one action of a controller definition. Lifted verbatim out of
297
+ * `Plugin.checkControllerDefinition`, whose cognitive complexity the
298
+ * `.js` → `.ts` rename re-scored as new code.
299
+ */
300
+ /**
301
+ * Loads a plugin's custom error definitions, if its manifest declares any.
302
+ * Lifted verbatim out of `Plugin.loadFromDirectory` for the same gate reason.
303
+ */
304
+ function loadPluginErrors(plugin) {
305
+ // A plugin loaded from a directory always has one: `loadFromDirectory`
306
+ // builds it two lines before calling this.
307
+ const manifest = plugin.manifest;
308
+ if (manifest?.raw?.errors) {
309
+ try {
310
+ // we use the manifest name instead of the lowerCased plugin name
311
+ // to ensure to match the plugin original name in the configuration
312
+ // A plugin's section is keyed by its own name, which no declared
313
+ // configuration shape can carry — `get` is the prototype-safe read the
314
+ // rest of the codebase uses for exactly this.
315
+ const config = (0, safeObject_1.get)(global.kuzzle.config, manifest.name ?? "");
316
+ const configuredCode = (0, safeObject_1.isPlainObject)(config)
317
+ ? config._pluginCode
318
+ : undefined;
319
+ const pluginCode = typeof configuredCode === "number" ? configuredCode : 0x00;
320
+ // The two properties `loadPluginsErrors` reads, named explicitly:
321
+ // `raw` is a JSONObject and cannot be narrowed to the shape it wants
322
+ // without an assertion. Same values, same call.
323
+ errorCodes.loadPluginsErrors({
324
+ errors: manifest.raw.errors,
325
+ name: manifest.raw.name,
326
+ }, pluginCode);
327
+ global.kuzzle.log.info(`${plugin.logPrefix} Custom errors successfully loaded.`);
328
+ }
329
+ catch (err) {
330
+ const cause = err instanceof Error ? err : new Error(String(err));
331
+ if (/Error configuration file/i.exec(cause.message) ||
332
+ err instanceof SyntaxError) {
333
+ throw kerror.getFrom(cause, "plugin", "manifest", "invalid_errors", manifest.name, cause.message);
269
334
  }
335
+ throw err;
336
+ }
337
+ }
338
+ }
339
+ function checkActionDefinition(name, action, actionDefinition, application) {
340
+ // Parenthesised: `!a?.b ?? c` parses as `(!a?.b) ?? c`, and `!x` is never
341
+ // nullish, so the fallback was dead code. It happens to be equivalent
342
+ // today only because the packaged default is `false` — it would not be if
343
+ // that default ever became `true`.
344
+ if (!(global.app.config.content.controllers?.definition
345
+ ?.allowAdditionalActionProperties ??
346
+ default_config_1.default.controllers.definition.allowAdditionalActionProperties)) {
347
+ const actionProperties = Object.keys(actionDefinition).filter((prop) => prop !== "handler" && prop !== "http");
348
+ if (actionProperties.length > 0) {
349
+ throw assertionError.get("invalid_controller_definition", name, `action "${action}" has invalid properties: ${actionProperties.join(", ")}`);
270
350
  }
271
351
  }
352
+ if (typeof action !== "string") {
353
+ throw assertionError.get("invalid_controller_definition", name, "action names must be strings");
354
+ }
355
+ if (typeof actionDefinition.handler !== "function") {
356
+ throw assertionError.get("invalid_controller_definition", name, `action "${action}" handler must be a function`);
357
+ }
358
+ if (actionDefinition.http) {
359
+ if (!Array.isArray(actionDefinition.http)) {
360
+ throw assertionError.get("invalid_controller_definition", name, `action "${action}" http definition must be an array`);
361
+ }
362
+ for (const route of actionDefinition.http) {
363
+ checkHttpRoute(route, action, name, application);
364
+ }
365
+ }
366
+ }
367
+ /**
368
+ * Checks one HTTP route of an action definition. Second half of the same
369
+ * gate-driven split as `checkActionDefinition`.
370
+ */
371
+ function checkHttpRoute(route, action, name, application) {
372
+ if (typeof route.verb !== "string" || route.verb.length === 0) {
373
+ throw assertionError.get("invalid_controller_definition", name, `action "${action}" http "verb" property must be a non-empty string`);
374
+ }
375
+ if (!HTTP_VERBS.has(route.verb.toLowerCase())) {
376
+ throw assertionError.get("invalid_controller_definition", name, `action "${action}" http verb "${route.verb}" is not a valid http verb`);
377
+ }
378
+ checkHttpRouteProperties(route, action, name, application);
379
+ const routeProperties = Object.keys(route);
380
+ if (routeProperties.length > 3) {
381
+ routeProperties.splice(routeProperties.indexOf("url"), 1);
382
+ routeProperties.splice(routeProperties.indexOf("path"), 1);
383
+ routeProperties.splice(routeProperties.indexOf("verb"), 1);
384
+ routeProperties.splice(routeProperties.indexOf("openapi"), 1);
385
+ throw assertionError.get("invalid_controller_definition", name, `action "${action}" has invalid http properties: ${routeProperties.join(", ")}`);
386
+ }
272
387
  }
273
388
  function checkHttpRouteProperties(route, action, name, application) {
274
389
  if (typeof route.path !== "string" || route.path.length === 0) {
@@ -1,10 +1,11 @@
1
1
  import { Koncorde } from "../shared/KoncordeWrapper";
2
- import { JSONObject } from "kuzzle-sdk";
3
- import { KuzzleRequest, RequestContext, RequestInput } from "../../../index";
2
+ import type { JSONObject } from "../../types/JSONObject";
3
+ import { KuzzleRequest, RequestContext, RequestInput } from "../../api/request";
4
4
  import { Mutex } from "../../util/mutex";
5
- import { BackendCluster } from "../backend";
5
+ import { BackendCluster } from "../backend/backendCluster";
6
6
  import { EmbeddedSDK } from "../shared/sdk/embeddedSdk";
7
- import { KuzzleLogger } from "kuzzle-logger/dist";
7
+ import type { KuzzleLogger } from "kuzzle-logger/dist";
8
+ import type { Kuzzle } from "../../kuzzle";
8
9
  export interface Repository {
9
10
  create(document: JSONObject, options: any): Promise<any>;
10
11
  createOrReplace(document: JSONObject, options: any): Promise<any>;
@@ -50,7 +51,11 @@ export declare class PluginContext {
50
51
  *
51
52
  * @deprecated use "accessors.sdk" instead (unless you need the original context)
52
53
  */
53
- execute: (request: KuzzleRequest, callback?: any) => Promise<KuzzleRequest>;
54
+ /**
55
+ * Declared as returning a promise, as v2.56.0 declared it — see
56
+ * {@link PluginExecute}.
57
+ */
58
+ execute: PluginExecute;
54
59
  /**
55
60
  * Adds or removes realtime subscriptions from the backend.
56
61
  */
@@ -88,6 +93,13 @@ export declare class PluginContext {
88
93
  * Current Kuzzle node unique identifier
89
94
  */
90
95
  nodeId: string;
96
+ /**
97
+ * The Kuzzle instance itself.
98
+ *
99
+ * Only present for plugins declared `privileged` in their manifest:
100
+ * `PrivilegedPluginContext` is what sets it.
101
+ */
102
+ kuzzle?: Kuzzle;
91
103
  };
92
104
  config: JSONObject;
93
105
  constructors: {
@@ -98,7 +110,7 @@ export declare class PluginContext {
98
110
  /**
99
111
  * @deprecated import directly: `import { Koncorde } from 'kuzzle'`
100
112
  */
101
- Koncorde: Koncorde;
113
+ Koncorde: typeof Koncorde;
102
114
  /**
103
115
  * Mutex class
104
116
  */
@@ -108,17 +120,17 @@ export declare class PluginContext {
108
120
  */
109
121
  Repository: new (collection: string, objectConstructor: any) => Repository;
110
122
  /**
111
- * Instantiate a new Request from the original one.
123
+ * Instantiate a new Request from the original one, or from raw data.
112
124
  */
113
- Request: KuzzleRequest;
125
+ Request: PluginRequestConstructor;
114
126
  /**
115
127
  * @deprecated import directly: `import { RequestContext } from 'kuzzle'`
116
128
  */
117
- RequestContext: RequestContext;
129
+ RequestContext: typeof RequestContext;
118
130
  /**
119
131
  * @deprecated import directly: `import { RequestInput } from 'kuzzle'`
120
132
  */
121
- RequestInput: RequestInput;
133
+ RequestInput: typeof RequestInput;
122
134
  /**
123
135
  * Constructor for Elasticsearch SDK Client
124
136
  */
@@ -155,5 +167,36 @@ export declare class PluginContext {
155
167
  verbose: (message: any) => void;
156
168
  warn: (message: any) => void;
157
169
  };
158
- constructor(pluginName: any);
170
+ constructor(pluginName: string);
159
171
  }
172
+ /**
173
+ * `context.accessors.execute`, as v2.56.0 declared it.
174
+ *
175
+ * Without a callback (or with `null`), the answer is a promise of the
176
+ * request. With a callback — called as `callback(error, request)` — the
177
+ * answer goes there, and **nothing is returned at runtime** (`null`): the
178
+ * declared promise does not exist in that form, so do not chain on it. It is
179
+ * declared all the same because v2.56.0 declared it so, and code compiled
180
+ * against that (`execute(request, callback).then(...)`) must still compile;
181
+ * a `Promise | null` return made every `await execute(request)` of a
182
+ * `strict` plugin a compile error.
183
+ */
184
+ export type PluginExecute = (request: KuzzleRequest, callback?: unknown) => Promise<KuzzleRequest>;
185
+ /**
186
+ * Instantiates a new Request object, using the provided one
187
+ * to set the context informations
188
+ *
189
+ * @throws
190
+ * @param {Request} request
191
+ * @param {Object} data
192
+ * @param {Object} [options]
193
+ * @returns {Request}
194
+ */
195
+ /**
196
+ * `context.constructors.Request`'s two call shapes: from an original request,
197
+ * whose context and input the new one inherits, or from raw request data.
198
+ */
199
+ export type PluginRequestConstructor = {
200
+ new (request: KuzzleRequest, data?: JSONObject, options?: JSONObject): KuzzleRequest;
201
+ new (data: JSONObject, options?: JSONObject): KuzzleRequest;
202
+ };