kuzzle 2.56.0 → 2.57.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/dist/bin/copy-binaries.js +71 -4
  2. package/dist/bin/start-kuzzle-server +191 -97
  3. package/dist/index.d.ts +31 -1
  4. package/dist/index.js +45 -2
  5. package/dist/lib/api/controllers/adminController.d.ts +4 -3
  6. package/dist/lib/api/controllers/adminController.js +1 -2
  7. package/dist/lib/api/controllers/authController.d.ts +37 -16
  8. package/dist/lib/api/controllers/authController.js +88 -39
  9. package/dist/lib/api/controllers/baseController.d.ts +10 -5
  10. package/dist/lib/api/controllers/baseController.js +36 -15
  11. package/dist/lib/api/controllers/bulkController.d.ts +11 -7
  12. package/dist/lib/api/controllers/bulkController.js +28 -5
  13. package/dist/lib/api/controllers/clusterController.d.ts +2 -2
  14. package/dist/lib/api/controllers/clusterController.js +3 -3
  15. package/dist/lib/api/controllers/collectionController.d.ts +57 -21
  16. package/dist/lib/api/controllers/collectionController.js +40 -11
  17. package/dist/lib/api/controllers/debugController.d.ts +1 -1
  18. package/dist/lib/api/controllers/documentController.d.ts +137 -28
  19. package/dist/lib/api/controllers/documentController.js +156 -125
  20. package/dist/lib/api/controllers/index.d.ts +27 -12
  21. package/dist/lib/api/controllers/index.js +28 -13
  22. package/dist/lib/api/controllers/indexController.d.ts +17 -10
  23. package/dist/lib/api/controllers/indexController.js +13 -11
  24. package/dist/lib/api/controllers/memoryStorageController.d.ts +2 -5
  25. package/dist/lib/api/controllers/memoryStorageController.js +199 -127
  26. package/dist/lib/api/controllers/realtimeController.d.ts +19 -9
  27. package/dist/lib/api/controllers/realtimeController.js +8 -4
  28. package/dist/lib/api/controllers/securityController.d.ts +42 -29
  29. package/dist/lib/api/controllers/securityController.js +35 -19
  30. package/dist/lib/api/controllers/serverController.d.ts +114 -19
  31. package/dist/lib/api/controllers/serverController.js +69 -29
  32. package/dist/lib/api/documentExtractor.d.ts +9 -7
  33. package/dist/lib/api/documentExtractor.js +105 -41
  34. package/dist/lib/api/funnel.d.ts +131 -29
  35. package/dist/lib/api/funnel.js +436 -225
  36. package/dist/lib/api/httpRoutes.d.ts +16 -11
  37. package/dist/lib/api/httpRoutes.js +272 -2
  38. package/dist/lib/api/openapi/OpenApiManager.d.ts +1 -1
  39. package/dist/lib/api/openapi/openApiGenerator.d.ts +1 -1
  40. package/dist/lib/api/rateLimiter.d.ts +15 -5
  41. package/dist/lib/api/rateLimiter.js +42 -14
  42. package/dist/lib/api/request/kuzzleRequest.d.ts +83 -12
  43. package/dist/lib/api/request/kuzzleRequest.js +88 -23
  44. package/dist/lib/api/request/requestContext.d.ts +20 -5
  45. package/dist/lib/api/request/requestContext.js +14 -4
  46. package/dist/lib/api/request/requestInput.d.ts +37 -6
  47. package/dist/lib/api/request/requestInput.js +22 -9
  48. package/dist/lib/api/request/requestResponse.d.ts +45 -9
  49. package/dist/lib/api/request/requestResponse.js +34 -3
  50. package/dist/lib/cluster/command.d.ts +131 -37
  51. package/dist/lib/cluster/command.js +243 -71
  52. package/dist/lib/cluster/idCardHandler.d.ts +18 -5
  53. package/dist/lib/cluster/idCardHandler.js +52 -19
  54. package/dist/lib/cluster/index.d.ts +8 -2
  55. package/dist/lib/cluster/index.js +6 -2
  56. package/dist/lib/cluster/node.d.ts +127 -49
  57. package/dist/lib/cluster/node.js +412 -179
  58. package/dist/lib/cluster/protobuf/command.proto +18 -0
  59. package/dist/lib/cluster/protobuf/commandMessages.d.ts +104 -0
  60. package/dist/lib/cluster/protobuf/commandMessages.js +30 -0
  61. package/dist/lib/cluster/protobuf/syncMessages.d.ts +184 -0
  62. package/dist/lib/cluster/protobuf/syncMessages.js +23 -0
  63. package/dist/lib/cluster/publisher.d.ts +118 -78
  64. package/dist/lib/cluster/publisher.js +174 -72
  65. package/dist/lib/cluster/state.d.ts +15 -9
  66. package/dist/lib/cluster/state.js +12 -8
  67. package/dist/lib/cluster/subscriber.d.ts +185 -131
  68. package/dist/lib/cluster/subscriber.js +357 -95
  69. package/dist/lib/cluster/workers/IDCardRenewer.d.ts +39 -8
  70. package/dist/lib/cluster/workers/IDCardRenewer.js +88 -23
  71. package/dist/lib/config/default.config.d.ts +2 -2
  72. package/dist/lib/config/default.config.js +10 -3
  73. package/dist/lib/config/documentEventAliases.d.ts +1 -1
  74. package/dist/lib/config/index.d.ts +2 -5
  75. package/dist/lib/config/index.js +30 -17
  76. package/dist/lib/core/auth/formatProcessing.d.ts +3 -3
  77. package/dist/lib/core/auth/passportResponse.d.ts +1 -1
  78. package/dist/lib/core/auth/passportWrapper.d.ts +1 -1
  79. package/dist/lib/core/auth/passportWrapper.js +14 -13
  80. package/dist/lib/core/auth/tokenManager.d.ts +24 -3
  81. package/dist/lib/core/auth/tokenManager.js +47 -19
  82. package/dist/lib/core/backend/applicationManager.d.ts +2 -2
  83. package/dist/lib/core/backend/backend.d.ts +16 -5
  84. package/dist/lib/core/backend/backend.js +14 -6
  85. package/dist/lib/core/backend/backendCluster.d.ts +1 -1
  86. package/dist/lib/core/backend/backendConfig.d.ts +17 -5
  87. package/dist/lib/core/backend/backendConfig.js +1 -0
  88. package/dist/lib/core/backend/backendController.d.ts +1 -1
  89. package/dist/lib/core/backend/backendController.js +8 -1
  90. package/dist/lib/core/backend/backendErrors.d.ts +15 -8
  91. package/dist/lib/core/backend/backendErrors.js +5 -0
  92. package/dist/lib/core/backend/backendHook.d.ts +1 -1
  93. package/dist/lib/core/backend/backendImport.d.ts +1 -1
  94. package/dist/lib/core/backend/backendOpenApi.d.ts +3 -2
  95. package/dist/lib/core/backend/backendPipe.d.ts +1 -1
  96. package/dist/lib/core/backend/backendPipe.js +9 -1
  97. package/dist/lib/core/backend/backendPlugin.d.ts +2 -2
  98. package/dist/lib/core/backend/backendSubscription.d.ts +2 -2
  99. package/dist/lib/core/backend/backendVault.d.ts +1 -1
  100. package/dist/lib/core/backend/backendVault.js +8 -1
  101. package/dist/lib/core/cache/cacheEngine.d.ts +7 -4
  102. package/dist/lib/core/cache/cacheEngine.js +25 -8
  103. package/dist/lib/core/debug/kuzzleDebugger.d.ts +2 -1
  104. package/dist/lib/core/debug/kuzzleDebugger.js +31 -17
  105. package/dist/lib/core/network/accessLogger.d.ts +33 -18
  106. package/dist/lib/core/network/accessLogger.js +135 -73
  107. package/dist/lib/core/network/clientConnection.d.ts +13 -11
  108. package/dist/lib/core/network/clientConnection.js +33 -9
  109. package/dist/lib/core/network/context.d.ts +17 -22
  110. package/dist/lib/core/network/context.js +43 -26
  111. package/dist/lib/core/network/entryPoint.d.ts +38 -16
  112. package/dist/lib/core/network/entryPoint.js +119 -48
  113. package/dist/lib/core/network/httpRouter/index.d.ts +20 -50
  114. package/dist/lib/core/network/httpRouter/index.js +61 -75
  115. package/dist/lib/core/network/httpRouter/routeHandler.d.ts +17 -32
  116. package/dist/lib/core/network/httpRouter/routeHandler.js +26 -36
  117. package/dist/lib/core/network/httpRouter/routePart.d.ts +9 -18
  118. package/dist/lib/core/network/httpRouter/routePart.js +61 -43
  119. package/dist/lib/core/network/httpRouter/routeTypes.d.ts +3 -0
  120. package/dist/lib/core/network/httpRouter/routeTypes.js +23 -0
  121. package/dist/lib/core/network/networkEntryPoint.d.ts +20 -0
  122. package/dist/lib/core/network/networkEntryPoint.js +23 -0
  123. package/dist/lib/core/network/protocolManifest.d.ts +5 -4
  124. package/dist/lib/core/network/protocolManifest.js +6 -3
  125. package/dist/lib/core/network/protocols/httpMessage.d.ts +25 -18
  126. package/dist/lib/core/network/protocols/httpMessage.js +14 -11
  127. package/dist/lib/core/network/protocols/httpwsProtocol.d.ts +84 -93
  128. package/dist/lib/core/network/protocols/httpwsProtocol.js +284 -129
  129. package/dist/lib/core/network/protocols/internalProtocol.d.ts +26 -15
  130. package/dist/lib/core/network/protocols/internalProtocol.js +17 -16
  131. package/dist/lib/core/network/protocols/mqttProtocol.d.ts +56 -32
  132. package/dist/lib/core/network/protocols/mqttProtocol.js +91 -44
  133. package/dist/lib/core/network/protocols/protocol.d.ts +85 -21
  134. package/dist/lib/core/network/protocols/protocol.js +83 -27
  135. package/dist/lib/core/network/router.d.ts +13 -22
  136. package/dist/lib/core/network/router.js +59 -46
  137. package/dist/lib/core/plugin/plugin.d.ts +57 -51
  138. package/dist/lib/core/plugin/plugin.js +218 -103
  139. package/dist/lib/core/plugin/pluginContext.d.ts +54 -11
  140. package/dist/lib/core/plugin/pluginContext.js +99 -58
  141. package/dist/lib/core/plugin/pluginManifest.d.ts +6 -2
  142. package/dist/lib/core/plugin/pluginManifest.js +18 -11
  143. package/dist/lib/core/plugin/pluginRepository.d.ts +35 -44
  144. package/dist/lib/core/plugin/pluginRepository.js +35 -50
  145. package/dist/lib/core/plugin/pluginsManager.d.ts +128 -46
  146. package/dist/lib/core/plugin/pluginsManager.js +468 -231
  147. package/dist/lib/core/plugin/privilegedContext.d.ts +4 -9
  148. package/dist/lib/core/plugin/privilegedContext.js +5 -10
  149. package/dist/lib/core/realtime/actionEnum.d.ts +12 -21
  150. package/dist/lib/core/realtime/actionEnum.js +6 -7
  151. package/dist/lib/core/realtime/channel.d.ts +11 -5
  152. package/dist/lib/core/realtime/channel.js +17 -2
  153. package/dist/lib/core/realtime/connectionRooms.d.ts +2 -2
  154. package/dist/lib/core/realtime/hotelClerk.d.ts +12 -6
  155. package/dist/lib/core/realtime/hotelClerk.js +29 -11
  156. package/dist/lib/core/realtime/index.d.ts +8 -3
  157. package/dist/lib/core/realtime/index.js +12 -5
  158. package/dist/lib/core/realtime/notification/document.d.ts +54 -25
  159. package/dist/lib/core/realtime/notification/document.js +10 -13
  160. package/dist/lib/core/realtime/notification/index.d.ts +9 -3
  161. package/dist/lib/core/realtime/notification/index.js +10 -4
  162. package/dist/lib/core/realtime/notification/server.d.ts +7 -10
  163. package/dist/lib/core/realtime/notification/server.js +4 -7
  164. package/dist/lib/core/realtime/notification/user.d.ts +45 -21
  165. package/dist/lib/core/realtime/notification/user.js +8 -9
  166. package/dist/lib/core/realtime/notifier.d.ts +52 -40
  167. package/dist/lib/core/realtime/notifier.js +60 -25
  168. package/dist/lib/core/realtime/room.d.ts +1 -1
  169. package/dist/lib/core/realtime/subscription.d.ts +11 -6
  170. package/dist/lib/core/realtime/subscription.js +5 -1
  171. package/dist/lib/core/security/index.d.ts +14 -6
  172. package/dist/lib/core/security/index.js +27 -13
  173. package/dist/lib/core/security/profileRepository.d.ts +24 -19
  174. package/dist/lib/core/security/profileRepository.js +23 -10
  175. package/dist/lib/core/security/roleRepository.d.ts +60 -23
  176. package/dist/lib/core/security/roleRepository.js +122 -53
  177. package/dist/lib/core/security/securityLoader.d.ts +33 -18
  178. package/dist/lib/core/security/securityLoader.js +43 -16
  179. package/dist/lib/core/security/tokenRepository.d.ts +21 -7
  180. package/dist/lib/core/security/tokenRepository.js +50 -23
  181. package/dist/lib/core/security/userRepository.d.ts +44 -21
  182. package/dist/lib/core/security/userRepository.js +59 -19
  183. package/dist/lib/core/shared/KoncordeWrapper.d.ts +1 -1
  184. package/dist/lib/core/shared/ObjectRepository.d.ts +80 -18
  185. package/dist/lib/core/shared/ObjectRepository.js +57 -29
  186. package/dist/lib/core/shared/abstractManifest.d.ts +21 -8
  187. package/dist/lib/core/shared/abstractManifest.js +57 -17
  188. package/dist/lib/core/shared/sdk/embeddedSdk.d.ts +3 -1
  189. package/dist/lib/core/shared/sdk/embeddedSdk.js +8 -7
  190. package/dist/lib/core/shared/sdk/funnelProtocol.d.ts +2 -1
  191. package/dist/lib/core/shared/sdk/funnelProtocol.js +12 -3
  192. package/dist/lib/core/shared/sdk/impersonatedSdk.d.ts +11 -5
  193. package/dist/lib/core/shared/sdk/impersonatedSdk.js +22 -9
  194. package/dist/lib/core/shared/store.d.ts +45 -29
  195. package/dist/lib/core/shared/store.js +48 -27
  196. package/dist/lib/core/statistics/statistics.d.ts +1 -1
  197. package/dist/lib/core/storage/clientAdapter.d.ts +39 -21
  198. package/dist/lib/core/storage/clientAdapter.js +88 -48
  199. package/dist/lib/core/storage/indexCache.d.ts +8 -0
  200. package/dist/lib/core/storage/indexCache.js +16 -7
  201. package/dist/lib/core/storage/storageEngine.d.ts +7 -6
  202. package/dist/lib/core/storage/storageEngine.js +11 -8
  203. package/dist/lib/core/validation/baseType.d.ts +22 -22
  204. package/dist/lib/core/validation/baseType.js +11 -26
  205. package/dist/lib/core/validation/specification.d.ts +148 -0
  206. package/dist/lib/core/validation/specification.js +34 -0
  207. package/dist/lib/core/validation/typeOptions.d.ts +62 -0
  208. package/dist/lib/core/validation/typeOptions.js +23 -0
  209. package/dist/lib/core/validation/types/anything.d.ts +3 -6
  210. package/dist/lib/core/validation/types/anything.js +7 -7
  211. package/dist/lib/core/validation/types/boolean.d.ts +5 -12
  212. package/dist/lib/core/validation/types/boolean.js +7 -12
  213. package/dist/lib/core/validation/types/date.d.ts +19 -11
  214. package/dist/lib/core/validation/types/date.js +212 -161
  215. package/dist/lib/core/validation/types/email.d.ts +7 -11
  216. package/dist/lib/core/validation/types/email.js +13 -17
  217. package/dist/lib/core/validation/types/enum.d.ts +7 -11
  218. package/dist/lib/core/validation/types/enum.js +39 -20
  219. package/dist/lib/core/validation/types/geoPoint.d.ts +5 -13
  220. package/dist/lib/core/validation/types/geoPoint.js +10 -15
  221. package/dist/lib/core/validation/types/geoShape.d.ts +22 -21
  222. package/dist/lib/core/validation/types/geoShape.js +113 -129
  223. package/dist/lib/core/validation/types/geoShapeUtils.d.ts +15 -0
  224. package/dist/lib/core/validation/types/geoShapeUtils.js +75 -0
  225. package/dist/lib/core/validation/types/integer.d.ts +7 -5
  226. package/dist/lib/core/validation/types/integer.js +7 -13
  227. package/dist/lib/core/validation/types/ipAddress.d.ts +7 -11
  228. package/dist/lib/core/validation/types/ipAddress.js +13 -17
  229. package/dist/lib/core/validation/types/numeric.d.ts +7 -11
  230. package/dist/lib/core/validation/types/numeric.js +22 -29
  231. package/dist/lib/core/validation/types/object.d.ts +8 -15
  232. package/dist/lib/core/validation/types/object.js +12 -21
  233. package/dist/lib/core/validation/types/string.d.ts +7 -11
  234. package/dist/lib/core/validation/types/string.js +22 -29
  235. package/dist/lib/core/validation/types/url.d.ts +7 -11
  236. package/dist/lib/core/validation/types/url.js +14 -18
  237. package/dist/lib/core/validation/validation.d.ts +119 -80
  238. package/dist/lib/core/validation/validation.js +470 -412
  239. package/dist/lib/core/validation/validationUtils.d.ts +31 -0
  240. package/dist/lib/core/validation/validationUtils.js +190 -0
  241. package/dist/lib/kerror/codes/4-plugin.json +0 -12
  242. package/dist/lib/kerror/codes/index.d.ts +12 -2
  243. package/dist/lib/kerror/codes/index.js +5 -4
  244. package/dist/lib/kerror/errors/badRequestError.d.ts +1 -1
  245. package/dist/lib/kerror/errors/badRequestError.js +1 -1
  246. package/dist/lib/kerror/errors/externalServiceError.d.ts +1 -1
  247. package/dist/lib/kerror/errors/externalServiceError.js +1 -1
  248. package/dist/lib/kerror/errors/forbiddenError.d.ts +1 -1
  249. package/dist/lib/kerror/errors/forbiddenError.js +1 -1
  250. package/dist/lib/kerror/errors/gatewayTimeoutError.d.ts +1 -1
  251. package/dist/lib/kerror/errors/gatewayTimeoutError.js +1 -1
  252. package/dist/lib/kerror/errors/internalError.d.ts +1 -1
  253. package/dist/lib/kerror/errors/internalError.js +1 -1
  254. package/dist/lib/kerror/errors/kuzzleError.d.ts +32 -3
  255. package/dist/lib/kerror/errors/kuzzleError.js +21 -7
  256. package/dist/lib/kerror/errors/multipleErrorsError.d.ts +2 -2
  257. package/dist/lib/kerror/errors/multipleErrorsError.js +2 -2
  258. package/dist/lib/kerror/errors/notFoundError.d.ts +1 -1
  259. package/dist/lib/kerror/errors/notFoundError.js +1 -1
  260. package/dist/lib/kerror/errors/partialError.d.ts +8 -2
  261. package/dist/lib/kerror/errors/partialError.js +22 -9
  262. package/dist/lib/kerror/errors/pluginImplementationError.d.ts +9 -1
  263. package/dist/lib/kerror/errors/pluginImplementationError.js +9 -3
  264. package/dist/lib/kerror/errors/preconditionError.d.ts +1 -1
  265. package/dist/lib/kerror/errors/preconditionError.js +1 -1
  266. package/dist/lib/kerror/errors/serviceUnavailableError.d.ts +1 -1
  267. package/dist/lib/kerror/errors/serviceUnavailableError.js +1 -1
  268. package/dist/lib/kerror/errors/sizeLimitError.d.ts +1 -1
  269. package/dist/lib/kerror/errors/sizeLimitError.js +1 -1
  270. package/dist/lib/kerror/errors/tooManyRequestsError.d.ts +1 -1
  271. package/dist/lib/kerror/errors/tooManyRequestsError.js +1 -1
  272. package/dist/lib/kerror/errors/unauthorizedError.d.ts +1 -1
  273. package/dist/lib/kerror/errors/unauthorizedError.js +1 -1
  274. package/dist/lib/kerror/index.d.ts +19 -13
  275. package/dist/lib/kerror/index.js +60 -19
  276. package/dist/lib/kuzzle/Logger.d.ts +2 -2
  277. package/dist/lib/kuzzle/dumpGenerator.d.ts +12 -8
  278. package/dist/lib/kuzzle/dumpGenerator.js +130 -62
  279. package/dist/lib/kuzzle/event/KuzzleEventEmitter.d.ts +18 -9
  280. package/dist/lib/kuzzle/event/KuzzleEventEmitter.js +45 -18
  281. package/dist/lib/kuzzle/event/pipeRunner.d.ts +37 -16
  282. package/dist/lib/kuzzle/event/pipeRunner.js +73 -26
  283. package/dist/lib/kuzzle/event/waterfall.d.ts +11 -1
  284. package/dist/lib/kuzzle/event/waterfall.js +38 -13
  285. package/dist/lib/kuzzle/internalIndexHandler.d.ts +11 -174
  286. package/dist/lib/kuzzle/internalIndexHandler.js +58 -29
  287. package/dist/lib/kuzzle/kuzzle.d.ts +25 -10
  288. package/dist/lib/kuzzle/kuzzle.js +74 -17
  289. package/dist/lib/kuzzle/kuzzleStateEnum.d.ts +16 -12
  290. package/dist/lib/kuzzle/kuzzleStateEnum.js +5 -7
  291. package/dist/lib/kuzzle/vault.d.ts +5 -1
  292. package/dist/lib/kuzzle/vault.js +29 -17
  293. package/dist/lib/model/security/profile.d.ts +34 -5
  294. package/dist/lib/model/security/profile.js +6 -5
  295. package/dist/lib/model/security/rights.d.ts +12 -4
  296. package/dist/lib/model/security/rights.js +7 -6
  297. package/dist/lib/model/security/role.d.ts +8 -4
  298. package/dist/lib/model/security/role.js +12 -6
  299. package/dist/lib/model/security/token.d.ts +8 -0
  300. package/dist/lib/model/security/user.d.ts +8 -2
  301. package/dist/lib/model/security/user.js +7 -4
  302. package/dist/lib/model/storage/apiKey.d.ts +55 -26
  303. package/dist/lib/model/storage/apiKey.js +97 -24
  304. package/dist/lib/model/storage/baseModel.d.ts +77 -66
  305. package/dist/lib/model/storage/baseModel.js +21 -34
  306. package/dist/lib/service/cache/redis.d.ts +53 -36
  307. package/dist/lib/service/cache/redis.js +148 -71
  308. package/dist/lib/service/service.d.ts +14 -19
  309. package/dist/lib/service/service.js +41 -22
  310. package/dist/lib/service/storage/7/elasticsearch.d.ts +136 -93
  311. package/dist/lib/service/storage/7/elasticsearch.js +218 -165
  312. package/dist/lib/service/storage/7/esWrapper.d.ts +30 -13
  313. package/dist/lib/service/storage/7/esWrapper.js +58 -37
  314. package/dist/lib/service/storage/8/elasticsearch.d.ts +153 -119
  315. package/dist/lib/service/storage/8/elasticsearch.js +286 -213
  316. package/dist/lib/service/storage/8/esWrapper.d.ts +30 -13
  317. package/dist/lib/service/storage/8/esWrapper.js +59 -38
  318. package/dist/lib/service/storage/commons/queryTranslator.d.ts +3 -3
  319. package/dist/lib/service/storage/commons/queryTranslator.js +71 -35
  320. package/dist/lib/types/ApiRoute.d.ts +12 -0
  321. package/dist/lib/types/ApiRoute.js +23 -0
  322. package/dist/lib/types/ClientConnection.d.ts +1 -1
  323. package/dist/lib/types/EventHandler.d.ts +10 -0
  324. package/dist/lib/types/Global.d.ts +8 -3
  325. package/dist/lib/types/HttpMessage.d.ts +2 -2
  326. package/dist/lib/types/HttpStream.d.ts +1 -1
  327. package/dist/lib/types/HttpStream.js +3 -1
  328. package/dist/lib/types/JSONObject.d.ts +9 -0
  329. package/dist/lib/types/JSONObject.js +23 -0
  330. package/dist/lib/types/Kuzzle.d.ts +5 -3
  331. package/dist/lib/types/KuzzleDocument.d.ts +1 -1
  332. package/dist/lib/types/KuzzleWebSocket.d.ts +24 -0
  333. package/dist/lib/types/KuzzleWebSocket.js +23 -0
  334. package/dist/lib/types/OpenApiDefinition.d.ts +1 -1
  335. package/dist/lib/types/Plugin.d.ts +33 -8
  336. package/dist/lib/types/PluginInstance.d.ts +67 -0
  337. package/dist/lib/types/PluginInstance.js +23 -0
  338. package/dist/lib/types/Policy.d.ts +1 -1
  339. package/dist/lib/types/Target.d.ts +8 -0
  340. package/dist/lib/types/Token.d.ts +14 -2
  341. package/dist/lib/types/config/HttpConfiguration.d.ts +5 -0
  342. package/dist/lib/types/config/KuzzleConfiguration.d.ts +102 -1
  343. package/dist/lib/types/config/PluginsConfiguration.d.ts +3 -2
  344. package/dist/lib/types/config/SecurityConfiguration.d.ts +6 -2
  345. package/dist/lib/types/config/ServerConfiguration.d.ts +2 -2
  346. package/dist/lib/types/config/ServicesConfiguration.d.ts +1 -1
  347. package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.d.ts +131 -0
  348. package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.js +3 -0
  349. package/dist/lib/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +2 -106
  350. package/dist/lib/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +2 -26
  351. package/dist/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +3 -0
  352. package/dist/lib/types/controllers/Controller.d.ts +12 -3
  353. package/dist/lib/types/controllers/ControllerDefinition.d.ts +2 -2
  354. package/dist/lib/types/controllers/{adminControlller.type.js → adminController.type.js} +1 -1
  355. package/dist/lib/types/controllers/authController.type.d.ts +2 -2
  356. package/dist/lib/types/core/auth/formatProcessing.type.d.ts +7 -1
  357. package/dist/lib/types/errors/ErrorDomains.d.ts +1 -1
  358. package/dist/lib/types/events/EventGenericDocument.d.ts +10 -9
  359. package/dist/lib/types/events/EventProtocol.d.ts +4 -4
  360. package/dist/lib/types/index.d.ts +7 -0
  361. package/dist/lib/types/index.js +7 -0
  362. package/dist/lib/types/shared/StoreCollectionsDefinition.d.ts +1 -1
  363. package/dist/lib/types/storage/7/Elasticsearch.d.ts +62 -13
  364. package/dist/lib/types/storage/8/Elasticsearch.d.ts +62 -13
  365. package/dist/lib/util/Inflector.d.ts +4 -1
  366. package/dist/lib/util/Inflector.js +0 -3
  367. package/dist/lib/util/assertType.d.ts +24 -27
  368. package/dist/lib/util/assertType.js +28 -39
  369. package/dist/lib/util/async.js +19 -6
  370. package/dist/lib/util/asyncStore.js +1 -1
  371. package/dist/lib/util/bufferedPassThrough.d.ts +9 -0
  372. package/dist/lib/util/bufferedPassThrough.js +27 -13
  373. package/dist/lib/util/bytes.d.ts +1 -1
  374. package/dist/lib/util/bytes.js +6 -2
  375. package/dist/lib/util/debug.d.ts +3 -1
  376. package/dist/lib/util/debug.js +42 -10
  377. package/dist/lib/util/deprecate.d.ts +9 -1
  378. package/dist/lib/util/deprecate.js +10 -6
  379. package/dist/lib/util/didYouMean.d.ts +2 -1
  380. package/dist/lib/util/didYouMean.js +8 -4
  381. package/dist/lib/util/distributedLock.d.ts +56 -0
  382. package/dist/lib/util/distributedLock.js +166 -0
  383. package/dist/lib/util/dump-collection.d.ts +1 -1
  384. package/dist/lib/util/dump-collection.js +4 -5
  385. package/dist/lib/util/extractFields.d.ts +15 -11
  386. package/dist/lib/util/extractFields.js +8 -9
  387. package/dist/lib/util/koncordeCompat.d.ts +2 -2
  388. package/dist/lib/util/koncordeCompat.js +33 -0
  389. package/dist/lib/util/memoize.d.ts +7 -6
  390. package/dist/lib/util/memoize.js +3 -3
  391. package/dist/lib/util/mutex.d.ts +22 -2
  392. package/dist/lib/util/mutex.js +39 -1
  393. package/dist/lib/util/name-generator.js +14 -2
  394. package/dist/lib/util/promback.d.ts +20 -11
  395. package/dist/lib/util/promback.js +14 -7
  396. package/dist/lib/util/requestAssertions.d.ts +30 -10
  397. package/dist/lib/util/requestAssertions.js +125 -121
  398. package/dist/lib/util/safeObject.d.ts +3 -3
  399. package/dist/lib/util/safeObject.js +7 -3
  400. package/dist/lib/util/stackTrace.d.ts +13 -5
  401. package/dist/lib/util/stackTrace.js +17 -12
  402. package/dist/lib/util/thrown.d.ts +13 -0
  403. package/dist/lib/util/thrown.js +46 -0
  404. package/dist/package.json +26 -19
  405. package/package.json +26 -19
  406. package/dist/lib/util/wildcard.d.ts +0 -1
  407. package/dist/lib/util/wildcard.js +0 -46
  408. /package/dist/lib/types/controllers/{adminControlller.type.d.ts → adminController.type.d.ts} +0 -0
@@ -1,4 +1,11 @@
1
- export = InternalProtocol;
1
+ import type { JSONObject } from "../../../types/JSONObject";
2
+ import ClientConnection from "../clientConnection";
3
+ import type { NetworkEntryPoint } from "../networkEntryPoint";
4
+ import Protocol from "./protocol";
5
+ interface InternalMessage {
6
+ channels: string[];
7
+ payload: JSONObject;
8
+ }
2
9
  /**
3
10
  * Internal protocol to use SDK realtime subscription from plugins.
4
11
  *
@@ -8,20 +15,24 @@ export = InternalProtocol;
8
15
  * - 'core:network:internal:message'
9
16
  */
10
17
  declare class InternalProtocol extends Protocol {
11
- constructor();
12
18
  connection: ClientConnection;
13
- /**
14
- * List of channel IDs
15
- * @type {Set<string>}
16
- */
19
+ /** List of channel IDs */
17
20
  channels: Set<string>;
18
- init(entryPoint: any): Promise<void>;
19
- joinChannel(channel: any, connectionId: any): void;
20
- leaveChannel(channel: any, connectionId: any): void;
21
- disconnect(connectionId: any): void;
22
- broadcast(data: any): void;
23
- notify(data: any): void;
24
- _send(data: any): void;
21
+ constructor();
22
+ init(entryPoint: NetworkEntryPoint): Promise<boolean>;
23
+ /** @deprecated pass the name to the constructor and call `init(entryPoint)` */
24
+ init(name: null, entryPoint: NetworkEntryPoint): Promise<boolean>;
25
+ joinChannel(channel: string, connectionId: string): {
26
+ channel: string;
27
+ connectionId: string;
28
+ };
29
+ leaveChannel(channel: string, connectionId: string): {
30
+ channel: string;
31
+ connectionId: string;
32
+ };
33
+ disconnect(connectionId: string): void;
34
+ broadcast(data: InternalMessage): void;
35
+ notify(data: InternalMessage): void;
36
+ _send(data: InternalMessage): void;
25
37
  }
26
- import Protocol = require("./protocol");
27
- import ClientConnection = require("../clientConnection");
38
+ export = InternalProtocol;
@@ -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,10 +19,13 @@
18
19
  * See the License for the specific language governing permissions and
19
20
  * limitations under the License.
20
21
  */
21
- "use strict";
22
- const Protocol = require("./protocol");
23
- const ClientConnection = require("../clientConnection");
24
- const debug = require("../../../util/debug")("kuzzle:network:protocols:internal");
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ const debug_1 = __importDefault(require("../../../util/debug"));
26
+ const clientConnection_1 = __importDefault(require("../clientConnection"));
27
+ const protocol_1 = __importDefault(require("./protocol"));
28
+ const debug = (0, debug_1.default)("kuzzle:network:protocols:internal");
25
29
  /**
26
30
  * Internal protocol to use SDK realtime subscription from plugins.
27
31
  *
@@ -30,34 +34,31 @@ const debug = require("../../../util/debug")("kuzzle:network:protocols:internal"
30
34
  * Messages to the embedded SDK are dispatched with the following event:
31
35
  * - 'core:network:internal:message'
32
36
  */
33
- class InternalProtocol extends Protocol {
37
+ class InternalProtocol extends protocol_1.default {
34
38
  constructor() {
35
39
  super("internal");
36
- this.connection = new ClientConnection(this.name, ["127.0.0.1"]);
37
- /**
38
- * List of channel IDs
39
- * @type {Set<string>}
40
- */
40
+ this.connection = new clientConnection_1.default(this.name, ["127.0.0.1"]);
41
41
  this.channels = new Set();
42
42
  }
43
- async init(entryPoint) {
44
- await super.init(null, entryPoint);
43
+ async init(...args) {
44
+ await super.init(protocol_1.default.entryPointOf(args));
45
45
  debug("initializing InternalProtocol");
46
46
  this.entryPoint.newConnection(this.connection);
47
47
  /**
48
48
  * Returns the internal connection ID used by the protocol.
49
- *
50
- * @returns {string} connectionId
51
49
  */
52
50
  global.kuzzle.onAsk("core:network:internal:connectionId:get", () => this.connection.id);
51
+ return true;
53
52
  }
54
53
  joinChannel(channel, connectionId) {
55
54
  debug("joinChannel: %s", channel, connectionId);
56
55
  this.channels.add(channel);
56
+ return { channel, connectionId };
57
57
  }
58
58
  leaveChannel(channel, connectionId) {
59
59
  debug("leaveChannel: %s", channel, connectionId);
60
60
  this.channels.delete(channel);
61
+ return { channel, connectionId };
61
62
  }
62
63
  disconnect(connectionId) {
63
64
  debug("disconnect: %s", connectionId);
@@ -72,8 +73,8 @@ class InternalProtocol extends Protocol {
72
73
  this._send(data);
73
74
  }
74
75
  _send(data) {
75
- for (let i = 0; i < data.channels.length; i++) {
76
- const message = { ...data.payload, room: data.channels[i] };
76
+ for (const channel of data.channels) {
77
+ const message = { ...data.payload, room: channel };
77
78
  global.kuzzle.emit("core:network:internal:message", message);
78
79
  }
79
80
  }
@@ -1,39 +1,63 @@
1
1
  /// <reference types="node" />
2
- export = MqttProtocol;
3
- /**
4
- * @class MqttProtocol
5
- */
6
- declare class MqttProtocol extends Protocol {
7
- constructor();
8
- aedes: any;
2
+ import * as net from "node:net";
3
+ import type { AedesPublishPacket, Client, PublishPacket, Subscription } from "aedes";
4
+ import Aedes from "aedes";
5
+ import type { JSONObject } from "../../../types/JSONObject";
6
+ import ClientConnection from "../clientConnection";
7
+ import type { NetworkEntryPoint } from "../networkEntryPoint";
8
+ import Protocol from "./protocol";
9
+ /** `server.protocols.mqtt` in the Kuzzle configuration */
10
+ interface MqttConfig {
11
+ enabled?: boolean;
12
+ allowPubSub: boolean;
13
+ developmentMode: boolean;
14
+ disconnectDelay: number;
15
+ requestTopic: string;
16
+ responseTopic: string;
17
+ server: {
18
+ port: number;
19
+ };
20
+ }
21
+ interface MqttNotification {
22
+ channels: string[];
23
+ connectionId?: string;
24
+ payload: JSONObject;
25
+ }
26
+ declare class MqttProtocol extends Protocol<MqttConfig> {
27
+ aedes: Aedes;
9
28
  server: net.Server;
10
- connections: Map<any, any>;
11
- connectionsById: Map<any, any>;
12
- logger: import("../../../kuzzle/Logger").Logger;
13
- publishCallback: (error: any) => void;
14
- init(entryPoint: any): Promise<boolean>;
15
- broadcast(data: any): void;
16
- disconnect(connectionId: any, message?: string): void;
17
- joinChannel(): void;
18
- leaveChannel(): void;
19
- notify(data: any): void;
29
+ connections: Map<Client, ClientConnection>;
30
+ connectionsById: Map<string, Client>;
31
+ publishCallback: (error?: Error) => void;
32
+ private readonly logger;
33
+ constructor();
34
+ init(entryPoint: NetworkEntryPoint): Promise<boolean>;
35
+ /** @deprecated pass the name to the constructor and call `init(entryPoint)` */
36
+ init(name: null, entryPoint: NetworkEntryPoint): Promise<boolean>;
37
+ broadcast(data: MqttNotification): void;
20
38
  /**
21
- * @param {Client} client
39
+ * @param message - **unused.** aedes' `close()` takes a callback and nothing
40
+ * else, so this never reached the client; #2723 removed the call that
41
+ * pretended to pass it. Kept in the signature because `disconnect` is
42
+ * reached by name from the entry point and by protocol plugins.
43
+ * ADR-0001, TD-41 (#2728).
22
44
  */
45
+ disconnect(connectionId: string, message?: string): void;
46
+ joinChannel(channel: string, connectionId: string): {
47
+ channel: string;
48
+ connectionId: string;
49
+ };
50
+ leaveChannel(channel: string, connectionId: string): {
51
+ channel: string;
52
+ connectionId: string;
53
+ };
54
+ notify(data: MqttNotification): void;
23
55
  onConnection(client: Client): void;
24
- /**
25
- * @param {Client} client
26
- */
27
56
  onDisconnection(client: Client): void;
28
- /**
29
- * @param packet
30
- * @param client
31
- */
32
- onMessage(packet: any, client: any): void;
33
- _respond(client: any, response: any): void;
34
- _respondError(client: any, error: any): void;
35
- _authorizePublish(client: any, packet: any, callback: any): void;
36
- _authorizeSubscribe(client: any, sub: any, callback: any): void;
57
+ onMessage(packet: AedesPublishPacket, client: Client | null): void;
58
+ _respond(client: Client, response: JSONObject): void;
59
+ _respondError(client: Client, error: Error): void;
60
+ _authorizePublish(client: Client | null, packet: PublishPacket, callback: (error?: Error | null) => void): void;
61
+ _authorizeSubscribe(client: Client, sub: Subscription, callback: (error: Error | null, subscription?: Subscription | null) => void): void;
37
62
  }
38
- import Protocol = require("./protocol");
39
- import net = require("net");
63
+ export = MqttProtocol;
@@ -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,41 +19,70 @@
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 net = require("net");
23
- const Aedes = require("aedes");
24
- const ClientConnection = require("../clientConnection");
25
- const Protocol = require("./protocol");
26
- const { Request } = require("../../../api/request");
27
- const { removeStacktrace } = require("../../../util/stackTrace");
28
- const kerror = require("../../../kerror").wrap("network", "mqtt");
29
- const debug = require("../../../util/debug")("kuzzle:network:protocols:mqtt");
30
- /**
31
- * @class MqttProtocol
32
- */
33
- class MqttProtocol extends Protocol {
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 net = __importStar(require("node:net"));
49
+ const node_util_1 = require("node:util");
50
+ const aedes_1 = __importDefault(require("aedes"));
51
+ const request_1 = require("../../../api/request");
52
+ const kerror_1 = require("../../../kerror");
53
+ const debug_1 = __importDefault(require("../../../util/debug"));
54
+ const stackTrace_1 = require("../../../util/stackTrace");
55
+ const clientConnection_1 = __importDefault(require("../clientConnection"));
56
+ const protocol_1 = __importDefault(require("./protocol"));
57
+ const kerror = (0, kerror_1.wrap)("network", "mqtt");
58
+ const debug = (0, debug_1.default)("kuzzle:network:protocols:mqtt");
59
+ class MqttProtocol extends protocol_1.default {
34
60
  constructor() {
35
61
  super("mqtt");
62
+ this.logger = global.kuzzle.log.child("core:network:protocols:mqtt");
36
63
  // eslint-disable-next-line new-cap
37
- this.aedes = new Aedes();
64
+ this.aedes = new aedes_1.default();
38
65
  this.server = net.createServer(this.aedes.handle);
39
66
  this.connections = new Map();
40
67
  this.connectionsById = new Map();
41
- this.logger = global.kuzzle.log.child("core:network:protocols:mqtt");
42
68
  // needs to be bound to this object's context
43
- this.publishCallback = function pubcb(error) {
69
+ this.publishCallback = (error) => {
44
70
  if (error) {
45
71
  this.logger.info(`[MQTT] Publishing message failed: ${error}`);
46
72
  }
47
73
  };
48
74
  }
49
- async init(entryPoint) {
50
- await super.init(null, entryPoint);
75
+ async init(...args) {
76
+ await super.init(protocol_1.default.entryPointOf(args));
51
77
  if (this.config.enabled === false) {
52
78
  return false;
53
79
  }
54
80
  debug("initializing MQTT Server with config: %a", this.config);
55
- this.config = Object.assign({
81
+ // The defaults in their own object: written as literal keys before the
82
+ // spread, every one of them is a property the compiler can see being
83
+ // overwritten on the next line (TS2783), which is exactly the intent but
84
+ // not something worth restating six times.
85
+ const defaults = {
56
86
  allowPubSub: false,
57
87
  developmentMode: false,
58
88
  disconnectDelay: 250,
@@ -61,7 +91,8 @@ class MqttProtocol extends Protocol {
61
91
  server: {
62
92
  port: 1883,
63
93
  },
64
- }, this.config);
94
+ };
95
+ this.config = { ...defaults, ...this.config };
65
96
  /*
66
97
  * To avoid ill-use of our topics, we need to configure authorizations:
67
98
  * "requestTopic": should be publish-only, so no one but this plugin can
@@ -86,43 +117,56 @@ class MqttProtocol extends Protocol {
86
117
  this.aedes.publish({ payload, topic: channel }, this.publishCallback);
87
118
  }
88
119
  }
89
- disconnect(connectionId, message = "Connection closed by remote host") {
120
+ /**
121
+ * @param message - **unused.** aedes' `close()` takes a callback and nothing
122
+ * else, so this never reached the client; #2723 removed the call that
123
+ * pretended to pass it. Kept in the signature because `disconnect` is
124
+ * reached by name from the entry point and by protocol plugins.
125
+ * ADR-0001, TD-41 (#2728).
126
+ */
127
+ disconnect(connectionId,
128
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
129
+ message = "Connection closed by remote host") {
90
130
  debug("disconnect: connection id: %s, message %s", connectionId, message);
91
131
  const client = this.connectionsById.get(connectionId);
92
132
  if (client) {
93
- client.close(undefined, message);
133
+ // aedes' close() takes a callback and nothing else: `message` has never
134
+ // reached the client
135
+ client.close();
94
136
  }
95
137
  }
96
- joinChannel() {
138
+ joinChannel(channel, connectionId) {
97
139
  // do nothing
140
+ return { channel, connectionId };
98
141
  }
99
- leaveChannel() {
142
+ leaveChannel(channel, connectionId) {
100
143
  // do nothing
144
+ return { channel, connectionId };
101
145
  }
102
146
  notify(data) {
103
147
  debug("notify %a", data);
104
- const client = this.connectionsById.get(data.connectionId);
148
+ const client = data.connectionId === undefined
149
+ ? undefined
150
+ : this.connectionsById.get(data.connectionId);
105
151
  if (!client) {
106
152
  return;
107
153
  }
108
154
  const payload = Buffer.from(JSON.stringify(data.payload));
109
- data.channels.forEach((topic) => {
155
+ for (const topic of data.channels) {
110
156
  client.publish({ payload, topic }, this.publishCallback);
111
- });
157
+ }
112
158
  }
113
- /**
114
- * @param {Client} client
115
- */
116
159
  onConnection(client) {
117
160
  debug("onConnection: %s", client.id);
118
- const connection = new ClientConnection(this.name, [client.conn.remoteAddress], {});
161
+ // A socket with no remote address is one that closed between the
162
+ // connection event and this line; the empty string is what
163
+ // `ClientConnection` was already given for it.
164
+ const remoteAddress = client.conn.remoteAddress ?? "";
165
+ const connection = new clientConnection_1.default(this.name, [remoteAddress], {});
119
166
  this.entryPoint.newConnection(connection);
120
167
  this.connections.set(client, connection);
121
168
  this.connectionsById.set(connection.id, client);
122
169
  }
123
- /**
124
- * @param {Client} client
125
- */
126
170
  onDisconnection(client) {
127
171
  debug("onDisconnection %s", client.id);
128
172
  if (this.connections.has(client)) {
@@ -136,12 +180,12 @@ class MqttProtocol extends Protocol {
136
180
  }, this.config.disconnectDelay);
137
181
  }
138
182
  }
139
- /**
140
- * @param packet
141
- * @param client
142
- */
143
183
  onMessage(packet, client) {
144
- if (packet.topic !== this.config.requestTopic ||
184
+ // `client` is null for a publish aedes made itself — a will message, or
185
+ // one the broker originated. There is nobody to answer, which is what
186
+ // the two `_respond` calls below need.
187
+ if (client === null ||
188
+ packet.topic !== this.config.requestTopic ||
145
189
  packet.payload === null ||
146
190
  client.id === null) {
147
191
  return;
@@ -155,11 +199,11 @@ class MqttProtocol extends Protocol {
155
199
  try {
156
200
  const payload = JSON.parse(packet.payload.toString());
157
201
  debug("onMessage payload: %o", payload);
158
- const request = new Request(payload, { connection });
202
+ const request = new request_1.Request(payload, { connection });
159
203
  this.entryPoint.execute(connection, request, (response) => this._respond(client, response));
160
204
  }
161
205
  catch (error) {
162
- this._respondError(client, error);
206
+ this._respondError(client, error instanceof Error ? error : new Error((0, node_util_1.inspect)(error)));
163
207
  }
164
208
  }
165
209
  _respond(client, response) {
@@ -178,13 +222,16 @@ class MqttProtocol extends Protocol {
178
222
  }
179
223
  _respondError(client, error) {
180
224
  const connection = this.connections.get(client);
181
- const errReq = new Request({}, {
225
+ const errReq = new request_1.Request({}, {
182
226
  connection,
183
227
  error: kerror.getFrom(error, "unexpected_error", error.message),
184
228
  });
185
- this._respond(client, removeStacktrace(errReq.response.toJSON()));
229
+ this._respond(client, (0, stackTrace_1.removeStacktrace)(errReq.response.toJSON()));
186
230
  }
187
- _authorizePublish(client, packet, callback) {
231
+ _authorizePublish(
232
+ // Aedes' own signature: it authorises broker-originated publishes too,
233
+ // and this method reads nothing off the client.
234
+ client, packet, callback) {
188
235
  const topic = packet.topic.toString();
189
236
  if (this.config.allowPubSub) {
190
237
  if (topic === this.config.responseTopic) {
@@ -1,26 +1,90 @@
1
- export = Protocol;
2
- declare class Protocol {
3
- constructor(name: any);
4
- maxRequestSize: number;
5
- entryPoint: any;
6
- name: any;
7
- config: {};
1
+ import type { NetworkEntryPoint } from "../networkEntryPoint";
2
+ /**
3
+ * @typeParam TConfig - the shape of `server.protocols.<name>` in the Kuzzle
4
+ * configuration, which is what `init` copies into
5
+ * `this.config`
6
+ */
7
+ declare class Protocol<TConfig = Record<string, unknown>> {
8
+ private _maxRequestSize;
9
+ private _entryPoint;
10
+ name: string;
11
+ config: TConfig;
8
12
  initCalled: boolean;
9
13
  /**
10
- * @param {string} name - Protocol name (used for accessor) @deprecated
11
- * @param {EmbeddedEntryPoint} entryPoint
14
+ * The entry point that owns this protocol, and the request size limit it
15
+ * published. Both are set by `init` and read by everything a protocol does
16
+ * afterwards — a handler cannot run before the server it is registered on
17
+ * has been created.
18
+ *
19
+ * Declaring them nullable and reading them anyway is what the subclasses
20
+ * did: 20 unchecked dereferences across the three of them, each one taking
21
+ * on trust what `init` establishes. These two accessors say it once, where
22
+ * it can actually fail.
23
+ */
24
+ get entryPoint(): NetworkEntryPoint;
25
+ get maxRequestSize(): number;
26
+ set maxRequestSize(size: number);
27
+ /**
28
+ * Normalises the two `init` call shapes into the entry point they both
29
+ * carry. Every subclass overriding `init` has to accept both shapes too —
30
+ * a subclass that only took the live one would not honour the contract its
31
+ * base class publishes, and `init(null, entryPoint)` on it would throw —
32
+ * so the normalisation lives here rather than being written out four times.
12
33
  *
13
- * @returns {Promise<boolean>}
34
+ * The old shape puts the entry point second. Reading `args[1]`
35
+ * unconditionally is what the first conversion did: `init(entryPoint)`
36
+ * type-checked and threw on `entryPoint.config` (TD-41).
14
37
  */
15
- init(name: string, entryPoint: EmbeddedEntryPoint): Promise<boolean>;
16
- broadcast(): void;
17
- joinChannel(channel: any, connectionId: any): {
18
- channel: any;
19
- connectionId: any;
20
- };
21
- leaveChannel(channel: any, connectionId: any): {
22
- channel: any;
23
- connectionId: any;
24
- };
25
- notify(): void;
38
+ static entryPointOf(args: Protocol.InitArgs): NetworkEntryPoint;
39
+ constructor(name?: string);
40
+ /**
41
+ * Initializes the protocol against the entry point that owns it.
42
+ *
43
+ * Two call shapes reach this method, and only one of them is alive:
44
+ *
45
+ * - `init(entryPoint)` — what `entryPoint.js` calls on every protocol, and
46
+ * what a subclass should call on `super`;
47
+ * - `init(null, entryPoint)` — what the three in-tree subclasses currently
48
+ * call, and what a third-party protocol written against an older version
49
+ * still calls. Kept working, hence the implementation signature below.
50
+ *
51
+ * A *string* first argument is **not** a third shape. The parameter was
52
+ * deprecated in #1645 (2020-06-16) by an assert that reads
53
+ * `assert(this.name && !name)`, so passing a name here has thrown ever since
54
+ * — including when no name was given to the constructor, which is the only
55
+ * case the deprecation was meant to still allow. The signature says `null`
56
+ * because `null` is what this method can accept. Widening it to
57
+ * `string | null`, as the first TypeScript conversion did, advertised a call
58
+ * that throws. ADR-0001, TD-41 (#2728).
59
+ *
60
+ * The assert is left exactly as it is: fixing it would re-open a path that
61
+ * has been closed for five years, which is a decision about the plugin API,
62
+ * not about this method's type.
63
+ */
64
+ init(entryPoint: NetworkEntryPoint): Promise<boolean>;
65
+ /** @deprecated pass the name to the constructor and call `init(entryPoint)` */
66
+ init(name: null, entryPoint: NetworkEntryPoint): Promise<boolean>;
67
+ broadcast(data?: unknown): void;
68
+ joinChannel(channel: string, connectionId: string): {
69
+ channel: string;
70
+ connectionId: string;
71
+ } | void;
72
+ leaveChannel(channel: string, connectionId: string): {
73
+ channel: string;
74
+ connectionId: string;
75
+ } | void;
76
+ notify(data?: unknown): void;
26
77
  }
78
+ declare namespace Protocol {
79
+ /**
80
+ * The two shapes `Protocol.init` accepts, as one tuple union — see `init`.
81
+ * A subclass overriding `init` declares the same two overloads and takes
82
+ * this as its implementation signature, which is what makes the override
83
+ * assignable to the base method.
84
+ *
85
+ * It lives in a namespace merged with the class because `export =` leaves
86
+ * no room for a second export.
87
+ */
88
+ type InitArgs = [entryPoint: NetworkEntryPoint] | [name: null, entryPoint: NetworkEntryPoint];
89
+ }
90
+ export = Protocol;