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,24 +19,59 @@
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 { Publisher } = require("zeromq");
23
- const protobuf = require("protobufjs");
24
- const Long = require("long");
25
- const Bluebird = require("bluebird");
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 bluebird_1 = __importDefault(require("bluebird"));
49
+ const long_1 = __importDefault(require("long"));
50
+ const protobuf = __importStar(require("protobufjs"));
51
+ const zeromq_1 = require("zeromq");
26
52
  const STATE = Object.freeze({
27
53
  READY: 1,
28
54
  SENDING: 2,
29
55
  });
56
+ /**
57
+ * Test-only fault injection: when set to N > 0, every Nth **heartbeat** this
58
+ * node publishes is recorded as sent but never handed to the socket, so that
59
+ * the functional suites exercise the retransmission path. Unset in production.
60
+ *
61
+ * Heartbeats only: a loss is noticed when the sender's *next* message arrives,
62
+ * up to one heartbeat later, so dropping a state message (a new collection,
63
+ * say) would let a scenario read another node before the gap is filled — a
64
+ * timing artefact of the injection, not a retransmission failure.
65
+ */
66
+ const DROP_HEARTBEAT_EVERY_ENV = "KUZZLE_TEST_CLUSTER_DROP_HEARTBEAT_EVERY";
30
67
  // Handles messages publication to other nodes
31
68
  class ClusterPublisher {
32
69
  /**
33
- * @constructor
34
- * @param {ClusterNode} node
70
+ * @param node the cluster node this publisher belongs to
35
71
  */
36
72
  constructor(node) {
37
73
  this.node = node;
38
- this.lastMessageId = new Long(0, 0, true);
74
+ this.lastMessageId = new long_1.default(0, 0, true);
39
75
  this.socket = null;
40
76
  this.protoroot = null;
41
77
  // Only one call to socket.send can be performed at any given time, and it
@@ -46,17 +82,23 @@ class ClusterPublisher {
46
82
  // by bufferizing requests to send
47
83
  this.state = STATE.READY;
48
84
  this.buffer = [];
85
+ this.history = [];
86
+ this.historyBytes = 0;
87
+ const dropEvery = Number.parseInt(process.env[DROP_HEARTBEAT_EVERY_ENV] ?? "", 10);
88
+ this.dropHeartbeatEvery =
89
+ Number.isInteger(dropEvery) && dropEvery > 0 ? dropEvery : 0;
90
+ this.heartbeatsSent = 0;
49
91
  }
50
92
  async init() {
51
- this.socket = new Publisher();
93
+ this.socket = new zeromq_1.Publisher();
52
94
  await this.socket.bind(`tcp://*:${this.node.config.ports.sync}`);
53
95
  this.protoroot = await protobuf.load(`${__dirname}/protobuf/sync.proto`);
54
96
  }
55
97
  /**
56
98
  * Publishes an event telling them that this node has created a new room
57
99
  *
58
- * @param {NormalizedFilter} normalized - Obtained with Koncorde.normalize()
59
- * @return {Long} ID of the message sent to other nodes
100
+ * @param normalized - Obtained with Koncorde.normalize()
101
+ * @return ID of the message sent to other nodes
60
102
  */
61
103
  sendNewRealtimeRoom(normalized) {
62
104
  const payload = {
@@ -70,16 +112,16 @@ class ClusterPublisher {
70
112
  * Publishes an event telling telling them that this node
71
113
  * no longer has subscribers on the provided realtime room.
72
114
  *
73
- * @param {string} roomId
74
- * @return {Long} ID of the message sent to other nodes
115
+ * @param roomId
116
+ * @return ID of the message sent to other nodes
75
117
  */
76
118
  sendRemoveRealtimeRoom(roomId) {
77
119
  return this.send("RemoveRealtimeRoom", { roomId });
78
120
  }
79
121
  /**
80
122
  * Publishes an event telling that a room has one less subscriber
81
- * @param {string} roomId
82
- * @return {Long} ID of the message sent to other nodes
123
+ * @param roomId
124
+ * @return ID of the message sent to other nodes
83
125
  */
84
126
  sendUnsubscription(roomId) {
85
127
  return this.send("Unsubscription", { roomId });
@@ -88,8 +130,8 @@ class ClusterPublisher {
88
130
  * Publishes an event telling that a new subscription has been made
89
131
  * made to an existing room
90
132
  *
91
- * @param {string} roomId
92
- * @return {Long} Id of the message sent to other nodes
133
+ * @param roomId
134
+ * @return Id of the message sent to other nodes
93
135
  */
94
136
  sendSubscription(roomId) {
95
137
  return this.send("Subscription", { roomId });
@@ -98,9 +140,9 @@ class ClusterPublisher {
98
140
  * Publishes an event telling that a document notification must be
99
141
  * propagated
100
142
  *
101
- * @param {Array.<string>} rooms - Koncorde rooms
102
- * @param {DocumentNotification} notification
103
- * @return {Long} Id of the message sent to other nodes
143
+ * @param rooms - Koncorde rooms
144
+ * @param notification
145
+ * @return Id of the message sent to other nodes
104
146
  */
105
147
  sendDocumentNotification(rooms, notification) {
106
148
  return this.send("DocumentNotification", {
@@ -122,9 +164,9 @@ class ClusterPublisher {
122
164
  * Publishes an event telling that a user notification must be
123
165
  * propagated
124
166
  *
125
- * @param {string} room - Koncorde room
126
- * @param {UserNotification} notification
127
- * @return {Long} Id of the message sent to other nodes
167
+ * @param room - Koncorde room
168
+ * @param notification
169
+ * @return Id of the message sent to other nodes
128
170
  */
129
171
  sendUserNotification(room, notification) {
130
172
  return this.send("UserNotification", {
@@ -145,10 +187,10 @@ class ClusterPublisher {
145
187
  * Publishes an event telling that a new authentication strategy has been
146
188
  * dynamically added
147
189
  *
148
- * @param {string} strategyName
149
- * @param {string} pluginName
150
- * @param {Object} strategy
151
- * @return {Long} Id of the message sent to other nodes
190
+ * @param strategyName
191
+ * @param pluginName
192
+ * @param strategy
193
+ * @return Id of the message sent to other nodes
152
194
  */
153
195
  sendNewAuthStrategy(strategyName, pluginName, strategy) {
154
196
  return this.send("NewAuthStrategy", {
@@ -161,10 +203,9 @@ class ClusterPublisher {
161
203
  * Publishes an event telling that a new authentication strategy has been
162
204
  * dynamically added
163
205
  *
164
- * @param {string} strategyName
165
- * @param {string} pluginName
166
- * @param {Object} strategyObject
167
- * @return {Long} Id of the message sent to other nodes
206
+ * @param strategyName
207
+ * @param pluginName
208
+ * @return Id of the message sent to other nodes
168
209
  */
169
210
  sendRemoveAuthStrategy(strategyName, pluginName) {
170
211
  return this.send("RemoveAuthStrategy", {
@@ -175,8 +216,8 @@ class ClusterPublisher {
175
216
  /**
176
217
  * Publishes an event telling other nodes to create an info dump
177
218
  *
178
- * @param {string} suffix - dump directory suffix name
179
- * @returns {Long} ID of the message sent
219
+ * @param suffix - dump directory suffix name
220
+ * @returns ID of the message sent
180
221
  */
181
222
  sendDumpRequest(suffix) {
182
223
  return this.send("DumpRequest", { suffix });
@@ -184,9 +225,9 @@ class ClusterPublisher {
184
225
  /**
185
226
  * Publishes an event about a new index being added
186
227
  *
187
- * @param {storeScopeEnum} scope
188
- * @param {string} index
189
- * @returns {Long} ID of the message sent
228
+ * @param scope
229
+ * @param index
230
+ * @returns ID of the message sent
190
231
  */
191
232
  sendAddIndex(scope, index) {
192
233
  return this.send("AddIndex", { index, scope });
@@ -194,10 +235,10 @@ class ClusterPublisher {
194
235
  /**
195
236
  * Publishes an event about a new collection being added
196
237
  *
197
- * @param {storeScopeEnum} scope
198
- * @param {string} index
199
- * @param {string} collection
200
- * @returns {Long} ID of the message sent
238
+ * @param scope
239
+ * @param index
240
+ * @param collection
241
+ * @returns ID of the message sent
201
242
  */
202
243
  sendAddCollection(scope, index, collection) {
203
244
  return this.send("AddCollection", { collection, index, scope });
@@ -205,9 +246,9 @@ class ClusterPublisher {
205
246
  /**
206
247
  * Publishes an event about indexes been removed
207
248
  *
208
- * @param {storeScopeEnum} scope
209
- * @param {Array.<string>} indexes
210
- * @returns {Long} ID of the message sent
249
+ * @param scope
250
+ * @param indexes
251
+ * @returns ID of the message sent
211
252
  */
212
253
  sendRemoveIndexes(scope, indexes) {
213
254
  return this.send("RemoveIndexes", { indexes, scope });
@@ -215,10 +256,10 @@ class ClusterPublisher {
215
256
  /**
216
257
  * Publishes an event about a collection been removed
217
258
  *
218
- * @param {storeScopeEnum} scope
219
- * @param {string} index
220
- * @param {string} collection
221
- * @returns {Long} ID of the message sent
259
+ * @param scope
260
+ * @param index
261
+ * @param collection
262
+ * @returns ID of the message sent
222
263
  */
223
264
  sendRemoveCollection(scope, index, collection) {
224
265
  return this.send("RemoveCollection", { collection, index, scope });
@@ -226,9 +267,9 @@ class ClusterPublisher {
226
267
  /**
227
268
  * Publishes an event about a cluster-wide event emission
228
269
  *
229
- * @param {string} event name
230
- * @param {Object} payload - event payload
231
- * @returns {Long} ID of the message sent
270
+ * @param event name
271
+ * @param payload - event payload
272
+ * @returns ID of the message sent
232
273
  */
233
274
  sendClusterWideEvent(event, payload) {
234
275
  return this.send("ClusterWideEvent", {
@@ -239,18 +280,18 @@ class ClusterPublisher {
239
280
  /**
240
281
  * Publishes an event about shutdown
241
282
  *
242
- * @param {Object} nodeId - node ID
283
+ * @param nodeId - node ID
243
284
  *
244
- * @returns {Long} ID of the message sent
285
+ * @returns ID of the message sent
245
286
  */
246
287
  sendNodeShutdown(nodeId) {
247
288
  return this.send("NodeShutdown", { nodeId });
248
289
  }
249
290
  /**
250
291
  * Publishes an event about the node being in debug mode
251
- * @param {bool} evictionPrevented
292
+ * @param evictionPrevented
252
293
  *
253
- * @returns {Long} ID of the message sent
294
+ * @returns ID of the message sent
254
295
  */
255
296
  sendNodePreventEviction(evictionPrevented) {
256
297
  return this.send("NodePreventEviction", { evictionPrevented });
@@ -258,11 +299,11 @@ class ClusterPublisher {
258
299
  /**
259
300
  * Publishes an event about a node being evicted
260
301
  *
261
- * @param {string} evictor node ID of the evictor
262
- * @param {Object} nodeId - node ID of the node being evicted
263
- * @param {Object} reason - reason of the eviction
302
+ * @param evictor node ID of the evictor
303
+ * @param nodeId - node ID of the node being evicted
304
+ * @param reason - reason of the eviction
264
305
  *
265
- * @returns {Long} ID of the message sent
306
+ * @returns ID of the message sent
266
307
  */
267
308
  sendNodeEvicted(evictor, nodeId, reason) {
268
309
  return this.send("NodeEvicted", { evictor, nodeId, reason });
@@ -270,9 +311,9 @@ class ClusterPublisher {
270
311
  /**
271
312
  * Publishes an event about heartbeat
272
313
  *
273
- * @param {string} address node sync address
314
+ * @param address node sync address
274
315
  *
275
- * @returns {Long} ID of the message sent
316
+ * @returns ID of the message sent
276
317
  */
277
318
  sendHeartbeat(address) {
278
319
  return this.send("Heartbeat", { address });
@@ -282,19 +323,29 @@ class ClusterPublisher {
282
323
  * Returns immediately, but the message to be sent migh be bufferized and send
283
324
  * later.
284
325
  *
285
- * @param {String} topic name
286
- * @param {Object} data
287
- * @returns {Long} ID of the message sent
326
+ * @param topic name
327
+ * @param data
328
+ * @returns ID of the message sent
288
329
  * @throws If the topic's protobuf type cannot be found
289
330
  */
290
331
  send(topic, data) {
291
- if (this.socket === null) {
292
- return Long.NEG_ONE;
332
+ // `socket` and `protoroot` are both filled by `init()` and nulled by
333
+ // `dispose()`, together: one guard answers for both, where the old one
334
+ // answered for the socket and left `protoroot` to be taken on trust.
335
+ if (this.socket === null || this.protoroot === null) {
336
+ return long_1.default.NEG_ONE;
293
337
  }
294
338
  this.lastMessageId = this.lastMessageId.add(1);
295
- const payload = Object.assign({ messageId: this.lastMessageId }, data);
339
+ const payload = { messageId: this.lastMessageId, ...data };
296
340
  const type = this.protoroot.lookupType(topic);
297
341
  const buffer = type.encode(type.create(payload)).finish();
342
+ this.remember(this.lastMessageId, topic, buffer);
343
+ if (this.dropHeartbeatEvery > 0 && topic === "Heartbeat") {
344
+ this.heartbeatsSent++;
345
+ if (this.heartbeatsSent % this.dropHeartbeatEvery === 0) {
346
+ return this.lastMessageId;
347
+ }
348
+ }
298
349
  // DO NOT AWAIT: bufferSend is built to bufferize payloads to be sent, and
299
350
  // it makes sure that they are sent in order and serially (0mq publisher
300
351
  // sockets can only send 1 message at a time, otherwise it throws with a
@@ -306,13 +357,53 @@ class ClusterPublisher {
306
357
  this.bufferSend(topic, buffer);
307
358
  return this.lastMessageId;
308
359
  }
360
+ /**
361
+ * The messages sent with ids `from` to `to`, both included, in order — or
362
+ * `null` if any of them is no longer kept (or never was).
363
+ */
364
+ replay(from, to) {
365
+ const oldest = this.history[0];
366
+ const newest = this.history.at(-1);
367
+ if (oldest === undefined ||
368
+ newest === undefined ||
369
+ from.greaterThan(to) ||
370
+ from.lessThan(oldest.messageId) ||
371
+ to.greaterThan(newest.messageId)) {
372
+ return null;
373
+ }
374
+ // Ids are contiguous, so offsets are plain differences; both are bounded
375
+ // by the history's length, far below 2^53.
376
+ const start = from.subtract(oldest.messageId).toNumber();
377
+ const end = to.subtract(oldest.messageId).toNumber();
378
+ return this.history
379
+ .slice(start, end + 1)
380
+ .map(({ data, topic }) => ({ data, topic }));
381
+ }
382
+ /**
383
+ * Keeps a sent message for `replay()`, then trims the oldest ones until
384
+ * both of `cluster.retransmitBuffer`'s bounds hold. A bound of 0 keeps
385
+ * nothing: retransmission is disabled.
386
+ */
387
+ remember(messageId, topic, data) {
388
+ // Always loaded; optional in the public type (see IKuzzleConfiguration).
389
+ const { bytes, messages } = this.node.config.retransmitBuffer;
390
+ if (messages <= 0 || bytes <= 0) {
391
+ return;
392
+ }
393
+ this.history.push({ data, messageId, topic });
394
+ this.historyBytes += data.byteLength;
395
+ while (this.history.length > messages ||
396
+ (this.historyBytes > bytes && this.history.length > 0)) {
397
+ const dropped = this.history.shift();
398
+ this.historyBytes -= dropped?.data.byteLength ?? 0;
399
+ }
400
+ }
309
401
  /**
310
402
  * Sends the provided message, and then sends all pending ones waiting in
311
403
  * the buffer, in order
312
404
  *
313
- * @param {string} topic
314
- * @param {Buffer} data
315
- * @return {void}
405
+ * @param topic
406
+ * @param data
316
407
  */
317
408
  async bufferSend(topic, data) {
318
409
  this.buffer.push({ data, topic });
@@ -323,8 +414,19 @@ class ClusterPublisher {
323
414
  do {
324
415
  const _buffer = this.buffer;
325
416
  this.buffer = [];
326
- for (let i = 0; i < _buffer.length; i++) {
327
- const payload = _buffer[i];
417
+ // `_buffer` is a local snapshot — `this.buffer` is reassigned to a new
418
+ // array above, never mutated in place — so iterating it directly is the
419
+ // same traversal as the index loop this replaces, without the
420
+ // `noUncheckedIndexedAccess` noise.
421
+ for (const payload of _buffer) {
422
+ // `dispose()` can null the socket while this loop awaits. Before, that
423
+ // surfaced as a TypeError on the next iteration; there is nothing left
424
+ // to flush once the socket is gone.
425
+ if (this.socket === null) {
426
+ this.buffer = [];
427
+ this.state = STATE.READY;
428
+ return;
429
+ }
328
430
  // This method will never return a rejected promise
329
431
  // http://zeromq.github.io/zeromq.js/classes/publisher.html#send
330
432
  await this.socket.send([payload.topic, payload.data]);
@@ -335,7 +437,7 @@ class ClusterPublisher {
335
437
  async dispose() {
336
438
  // waits for the buffer to be empty before closing
337
439
  while (this.state !== STATE.READY) {
338
- await Bluebird.delay(100);
440
+ await bluebird_1.default.delay(100);
339
441
  }
340
442
  if (this.socket !== null) {
341
443
  this.socket.close();
@@ -1,7 +1,8 @@
1
1
  import { NormalizedFilter } from "koncorde";
2
- import { JSONObject } from "kuzzle-sdk";
3
- import { RoomList } from "../types";
4
- import Long from "long";
2
+ import type { JSONObject } from "../types/JSONObject";
3
+ import type { RoomList } from "../types";
4
+ import type { FullStateAuthStrategy } from "./protobuf/commandMessages";
5
+ import type Long from "long";
5
6
  import "../types/Global";
6
7
  export type SerializedRoomSubscriptions = {
7
8
  nodeId: string;
@@ -26,13 +27,13 @@ export default class State {
26
27
  *
27
28
  * Map<roomId, RoomState>
28
29
  */
29
- private realtime;
30
+ private readonly realtime;
30
31
  /**
31
32
  * State of authentication strategies
32
33
  *
33
34
  * Map<strategyName, strategyDefinition>
34
35
  */
35
- private strategies;
36
+ private readonly strategies;
36
37
  /**
37
38
  * Adds a new realtime room to the state
38
39
  *
@@ -70,10 +71,10 @@ export default class State {
70
71
  * Adds a new dynamic strategy to the full state
71
72
  *
72
73
  */
73
- addAuthStrategy(strategyObject: JSONObject): void;
74
+ addAuthStrategy(strategyObject: FullStateAuthStrategy): void;
74
75
  removeAuthStrategy(strategyName: string): void;
75
76
  serialize(): {
76
- authStrategies: JSONObject[];
77
+ authStrategies: FullStateAuthStrategy[];
77
78
  rooms: SerializedRoomState[];
78
79
  };
79
80
  /**
@@ -86,9 +87,14 @@ export default class State {
86
87
  *
87
88
  * @param serialized POJO object of a full realtime state
88
89
  */
89
- loadFullState(serialized: SerializedState): void;
90
+ /**
91
+ * `Partial`: this reads a full state off the wire, and protobuf leaves an
92
+ * absent field undefined. Both branches below already guard for it; the
93
+ * parameter described what `serialize()` produces, not what arrives.
94
+ */
95
+ loadFullState(serialized: Partial<SerializedState>): void;
90
96
  }
91
97
  export type SerializedState = {
92
- authStrategies: JSONObject[];
98
+ authStrategies: FullStateAuthStrategy[];
93
99
  rooms: SerializedRoomState[];
94
100
  };
@@ -250,15 +250,15 @@ class State {
250
250
  return room.countSubscriptions();
251
251
  }
252
252
  listRealtimeRooms() {
253
+ var _a, _b;
253
254
  const list = {};
254
255
  for (const room of this.realtime.values()) {
255
- if (!list[room.index]) {
256
- list[room.index] = {};
257
- }
258
- if (!list[room.index][room.collection]) {
259
- list[room.index][room.collection] = {};
260
- }
261
- list[room.index][room.collection][room.id] = room.countSubscriptions();
256
+ // Held in locals rather than re-indexed: the compiler cannot see that the
257
+ // branch above just assigned the entry, so each re-read was a "possibly
258
+ // undefined". Same lookups, one per level instead of three.
259
+ const index = (list[_a = room.index] ?? (list[_a] = {}));
260
+ const collection = (index[_b = room.collection] ?? (index[_b] = {}));
261
+ collection[room.id] = room.countSubscriptions();
262
262
  }
263
263
  return list;
264
264
  }
@@ -312,6 +312,11 @@ class State {
312
312
  *
313
313
  * @param serialized POJO object of a full realtime state
314
314
  */
315
+ /**
316
+ * `Partial`: this reads a full state off the wire, and protobuf leaves an
317
+ * absent field undefined. Both branches below already guard for it; the
318
+ * parameter described what `serialize()` produces, not what arrives.
319
+ */
315
320
  loadFullState(serialized) {
316
321
  if (serialized.rooms) {
317
322
  for (const state of serialized.rooms) {
@@ -329,5 +334,4 @@ class State {
329
334
  }
330
335
  }
331
336
  exports.default = State;
332
- module.exports = State;
333
337
  //# sourceMappingURL=state.js.map