kuzzle 2.49.1 → 2.50.0-beta.4

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 (591) hide show
  1. package/dist/bin/copy-protobuf.js +17 -0
  2. package/dist/lib/api/controllers/adminController.d.ts +51 -0
  3. package/dist/lib/api/controllers/adminController.js +191 -0
  4. package/{lib → dist/lib}/api/controllers/authController.d.ts +20 -40
  5. package/{lib → dist/lib}/api/controllers/authController.js +23 -24
  6. package/dist/lib/api/controllers/bulkController.d.ts +46 -0
  7. package/dist/lib/api/controllers/bulkController.js +132 -0
  8. package/dist/lib/api/controllers/clusterController.d.ts +6 -0
  9. package/{lib → dist/lib}/api/controllers/clusterController.js +7 -11
  10. package/dist/lib/api/controllers/collectionController.d.ts +136 -0
  11. package/dist/lib/api/controllers/collectionController.js +356 -0
  12. package/dist/lib/api/controllers/documentController.d.ts +181 -0
  13. package/dist/lib/api/controllers/documentController.js +768 -0
  14. package/dist/lib/api/controllers/index.d.ts +12 -0
  15. package/{lib → dist/lib}/api/controllers/index.js +13 -14
  16. package/dist/lib/api/controllers/indexController.d.ts +65 -0
  17. package/dist/lib/api/controllers/indexController.js +139 -0
  18. package/dist/lib/api/controllers/memoryStorageController.d.ts +8 -0
  19. package/dist/lib/api/controllers/memoryStorageController.js +867 -0
  20. package/dist/lib/api/controllers/realtimeController.d.ts +47 -0
  21. package/dist/lib/api/controllers/realtimeController.js +128 -0
  22. package/dist/lib/api/controllers/securityController.d.ts +423 -0
  23. package/dist/lib/api/controllers/securityController.js +1139 -0
  24. package/dist/lib/api/controllers/serverController.d.ts +82 -0
  25. package/dist/lib/api/controllers/serverController.js +321 -0
  26. package/dist/lib/api/documentExtractor.d.ts +9 -0
  27. package/dist/lib/api/documentExtractor.js +274 -0
  28. package/dist/lib/api/funnel.d.ts +183 -0
  29. package/dist/lib/api/funnel.js +821 -0
  30. package/dist/lib/api/httpRoutes.d.ts +17 -0
  31. package/dist/lib/api/httpRoutes.js +1496 -0
  32. package/dist/lib/api/rateLimiter.d.ts +18 -0
  33. package/dist/lib/api/rateLimiter.js +74 -0
  34. package/{lib → dist/lib}/api/request/kuzzleRequest.d.ts +2 -2
  35. package/{lib → dist/lib}/api/request/requestContext.d.ts +2 -1
  36. package/dist/lib/cluster/command.d.ts +73 -0
  37. package/dist/lib/cluster/command.js +236 -0
  38. package/dist/lib/cluster/index.d.ts +2 -0
  39. package/{lib → dist/lib}/cluster/index.js +1 -2
  40. package/dist/lib/cluster/node.d.ts +278 -0
  41. package/dist/lib/cluster/node.js +876 -0
  42. package/dist/lib/cluster/publisher.d.ts +188 -0
  43. package/dist/lib/cluster/publisher.js +347 -0
  44. package/dist/lib/cluster/subscriber.d.ts +269 -0
  45. package/dist/lib/cluster/subscriber.js +555 -0
  46. package/dist/lib/cluster/workers/IDCardRenewer.d.ts +13 -0
  47. package/dist/lib/cluster/workers/IDCardRenewer.js +120 -0
  48. package/{lib → dist/lib}/config/documentEventAliases.d.ts +1 -2
  49. package/dist/lib/config/index.d.ts +5 -0
  50. package/dist/lib/config/index.js +244 -0
  51. package/dist/lib/config/sdkCompatibility.json +9 -0
  52. package/dist/lib/core/auth/formatProcessing.d.ts +30 -0
  53. package/dist/lib/core/auth/formatProcessing.js +55 -0
  54. package/dist/lib/core/auth/passportResponse.d.ts +15 -0
  55. package/{lib → dist/lib}/core/auth/passportResponse.js +24 -30
  56. package/dist/lib/core/auth/passportWrapper.d.ts +28 -0
  57. package/dist/lib/core/auth/passportWrapper.js +126 -0
  58. package/{lib → dist/lib}/core/backend/backendConfig.js +2 -2
  59. package/{lib → dist/lib}/core/backend/backendErrors.js +9 -12
  60. package/dist/lib/core/cache/cacheEngine.d.ts +15 -0
  61. package/dist/lib/core/cache/cacheEngine.js +205 -0
  62. package/dist/lib/core/network/accessLogger.d.ts +29 -0
  63. package/dist/lib/core/network/accessLogger.js +250 -0
  64. package/dist/lib/core/network/clientConnection.d.ts +15 -0
  65. package/{lib → dist/lib}/core/network/clientConnection.js +17 -24
  66. package/dist/lib/core/network/context.d.ts +42 -0
  67. package/dist/lib/core/network/context.js +57 -0
  68. package/dist/lib/core/network/entryPoint.d.ts +62 -0
  69. package/dist/lib/core/network/entryPoint.js +261 -0
  70. package/dist/lib/core/network/httpRouter/index.d.ts +85 -0
  71. package/dist/lib/core/network/httpRouter/index.js +258 -0
  72. package/dist/lib/core/network/httpRouter/routeHandler.d.ts +46 -0
  73. package/dist/lib/core/network/httpRouter/routeHandler.js +101 -0
  74. package/dist/lib/core/network/httpRouter/routePart.d.ts +35 -0
  75. package/dist/lib/core/network/httpRouter/routePart.js +117 -0
  76. package/dist/lib/core/network/protocolManifest.d.ts +6 -0
  77. package/{lib → dist/lib}/core/network/protocolManifest.js +5 -9
  78. package/dist/lib/core/network/protocols/httpMessage.d.ts +22 -0
  79. package/dist/lib/core/network/protocols/httpMessage.js +62 -0
  80. package/dist/lib/core/network/protocols/httpwsProtocol.d.ts +171 -0
  81. package/dist/lib/core/network/protocols/httpwsProtocol.js +921 -0
  82. package/dist/lib/core/network/protocols/internalProtocol.d.ts +27 -0
  83. package/dist/lib/core/network/protocols/internalProtocol.js +82 -0
  84. package/dist/lib/core/network/protocols/mqttProtocol.d.ts +39 -0
  85. package/dist/lib/core/network/protocols/mqttProtocol.js +219 -0
  86. package/dist/lib/core/network/protocols/protocol.d.ts +26 -0
  87. package/dist/lib/core/network/protocols/protocol.js +74 -0
  88. package/dist/lib/core/network/router.d.ts +49 -0
  89. package/dist/lib/core/network/router.js +193 -0
  90. package/dist/lib/core/plugin/plugin.d.ts +56 -0
  91. package/dist/lib/core/plugin/plugin.js +282 -0
  92. package/{lib → dist/lib}/core/plugin/pluginContext.js +2 -2
  93. package/dist/lib/core/plugin/pluginManifest.d.ts +5 -0
  94. package/{lib → dist/lib}/core/plugin/pluginManifest.js +16 -27
  95. package/dist/lib/core/plugin/pluginRepository.d.ts +53 -0
  96. package/dist/lib/core/plugin/pluginRepository.js +112 -0
  97. package/dist/lib/core/plugin/pluginsManager.d.ts +190 -0
  98. package/dist/lib/core/plugin/pluginsManager.js +817 -0
  99. package/dist/lib/core/plugin/privilegedContext.d.ts +14 -0
  100. package/{lib → dist/lib}/core/plugin/privilegedContext.js +10 -14
  101. package/dist/lib/core/realtime/actionEnum.d.ts +25 -0
  102. package/{lib → dist/lib}/core/realtime/actionEnum.js +7 -10
  103. package/dist/lib/core/realtime/index.d.ts +8 -0
  104. package/{lib → dist/lib}/core/realtime/index.js +9 -13
  105. package/dist/lib/core/realtime/notification/document.d.ts +34 -0
  106. package/dist/lib/core/realtime/notification/document.js +98 -0
  107. package/dist/lib/core/realtime/notification/index.d.ts +3 -0
  108. package/{lib → dist/lib}/core/realtime/notification/index.js +4 -5
  109. package/dist/lib/core/realtime/notification/server.d.ts +17 -0
  110. package/{lib → dist/lib}/core/realtime/notification/server.js +8 -10
  111. package/dist/lib/core/realtime/notification/user.d.ts +29 -0
  112. package/dist/lib/core/realtime/notification/user.js +66 -0
  113. package/dist/lib/core/realtime/notifier.d.ts +171 -0
  114. package/dist/lib/core/realtime/notifier.js +405 -0
  115. package/dist/lib/core/security/index.d.ts +14 -0
  116. package/{lib → dist/lib}/core/security/index.js +15 -19
  117. package/dist/lib/core/security/roleRepository.d.ts +143 -0
  118. package/dist/lib/core/security/roleRepository.js +445 -0
  119. package/dist/lib/core/security/securityLoader.d.ts +24 -0
  120. package/dist/lib/core/security/securityLoader.js +125 -0
  121. package/{lib → dist/lib}/core/security/tokenRepository.js +1 -1
  122. package/dist/lib/core/security/userRepository.d.ts +81 -0
  123. package/dist/lib/core/security/userRepository.js +346 -0
  124. package/dist/lib/core/shared/abstractManifest.d.ts +27 -0
  125. package/dist/lib/core/shared/abstractManifest.js +85 -0
  126. package/dist/lib/core/shared/sdk/impersonatedSdk.d.ts +7 -0
  127. package/dist/lib/core/shared/sdk/impersonatedSdk.js +80 -0
  128. package/{lib → dist/lib}/core/shared/store.d.ts +2 -2
  129. package/dist/lib/core/statistics/statistics.d.ts +94 -0
  130. package/dist/lib/core/statistics/statistics.js +287 -0
  131. package/dist/lib/core/storage/clientAdapter.d.ts +62 -0
  132. package/dist/lib/core/storage/clientAdapter.js +756 -0
  133. package/dist/lib/core/storage/storageEngine.d.ts +13 -0
  134. package/dist/lib/core/storage/storageEngine.js +52 -0
  135. package/dist/lib/core/validation/baseType.d.ts +35 -0
  136. package/dist/lib/core/validation/baseType.js +70 -0
  137. package/dist/lib/core/validation/types/anything.d.ts +10 -0
  138. package/{lib → dist/lib}/core/validation/types/anything.js +7 -10
  139. package/dist/lib/core/validation/types/boolean.d.ts +16 -0
  140. package/{lib → dist/lib}/core/validation/types/boolean.js +18 -23
  141. package/dist/lib/core/validation/types/date.d.ts +17 -0
  142. package/dist/lib/core/validation/types/date.js +215 -0
  143. package/dist/lib/core/validation/types/email.d.ts +17 -0
  144. package/dist/lib/core/validation/types/email.js +80 -0
  145. package/dist/lib/core/validation/types/enum.d.ts +17 -0
  146. package/dist/lib/core/validation/types/enum.js +70 -0
  147. package/dist/lib/core/validation/types/geoPoint.d.ts +17 -0
  148. package/{lib → dist/lib}/core/validation/types/geoPoint.js +19 -24
  149. package/dist/lib/core/validation/types/geoShape.d.ts +31 -0
  150. package/dist/lib/core/validation/types/geoShape.js +280 -0
  151. package/dist/lib/core/validation/types/integer.d.ts +7 -0
  152. package/{lib → dist/lib}/core/validation/types/integer.js +21 -27
  153. package/dist/lib/core/validation/types/ipAddress.d.ts +17 -0
  154. package/dist/lib/core/validation/types/ipAddress.js +73 -0
  155. package/dist/lib/core/validation/types/numeric.d.ts +17 -0
  156. package/dist/lib/core/validation/types/numeric.js +84 -0
  157. package/dist/lib/core/validation/types/object.d.ts +24 -0
  158. package/dist/lib/core/validation/types/object.js +74 -0
  159. package/dist/lib/core/validation/types/string.d.ts +17 -0
  160. package/dist/lib/core/validation/types/string.js +85 -0
  161. package/dist/lib/core/validation/types/url.d.ts +17 -0
  162. package/dist/lib/core/validation/types/url.js +73 -0
  163. package/dist/lib/core/validation/validation.d.ts +113 -0
  164. package/dist/lib/core/validation/validation.js +692 -0
  165. package/dist/lib/kerror/codes/0-core.json +194 -0
  166. package/dist/lib/kerror/codes/1-services.json +351 -0
  167. package/dist/lib/kerror/codes/2-api.json +195 -0
  168. package/dist/lib/kerror/codes/3-network.json +151 -0
  169. package/dist/lib/kerror/codes/4-plugin.json +498 -0
  170. package/dist/lib/kerror/codes/5-validation.json +158 -0
  171. package/dist/lib/kerror/codes/6-protocol.json +28 -0
  172. package/dist/lib/kerror/codes/7-security.json +283 -0
  173. package/dist/lib/kerror/codes/8-cluster.json +16 -0
  174. package/dist/lib/kerror/codes/index.d.ts +24 -0
  175. package/dist/lib/kerror/codes/index.js +140 -0
  176. package/{lib → dist/lib}/kerror/index.d.ts +5 -5
  177. package/{lib → dist/lib}/kuzzle/Logger.d.ts +6 -0
  178. package/{lib → dist/lib}/kuzzle/Logger.js +26 -5
  179. package/dist/lib/kuzzle/dumpGenerator.d.ts +14 -0
  180. package/dist/lib/kuzzle/dumpGenerator.js +180 -0
  181. package/dist/lib/kuzzle/event/pipeRunner.d.ts +30 -0
  182. package/dist/lib/kuzzle/event/pipeRunner.js +119 -0
  183. package/dist/lib/kuzzle/event/waterfall.d.ts +2 -0
  184. package/dist/lib/kuzzle/event/waterfall.js +90 -0
  185. package/dist/lib/kuzzle/internalIndexHandler.d.ts +186 -0
  186. package/dist/lib/kuzzle/internalIndexHandler.js +174 -0
  187. package/{lib → dist/lib}/kuzzle/kuzzle.d.ts +6 -7
  188. package/{lib → dist/lib}/kuzzle/kuzzle.js +5 -2
  189. package/dist/lib/kuzzle/kuzzleStateEnum.d.ts +20 -0
  190. package/{lib → dist/lib}/kuzzle/kuzzleStateEnum.js +5 -8
  191. package/dist/lib/kuzzle/vault.d.ts +2 -0
  192. package/dist/lib/kuzzle/vault.js +63 -0
  193. package/dist/lib/model/security/rights.d.ts +8 -0
  194. package/{lib → dist/lib}/model/security/rights.js +4 -8
  195. package/{lib → dist/lib}/model/security/role.d.ts +1 -1
  196. package/{lib → dist/lib}/model/security/user.d.ts +1 -0
  197. package/dist/lib/model/storage/apiKey.d.ts +49 -0
  198. package/dist/lib/model/storage/apiKey.js +126 -0
  199. package/dist/lib/model/storage/baseModel.d.ts +100 -0
  200. package/dist/lib/model/storage/baseModel.js +211 -0
  201. package/dist/lib/service/cache/redis.d.ts +74 -0
  202. package/dist/lib/service/cache/redis.js +237 -0
  203. package/dist/lib/service/service.d.ts +30 -0
  204. package/dist/lib/service/service.js +74 -0
  205. package/{lib → dist/lib}/service/storage/7/elasticsearch.d.ts +2 -2
  206. package/{lib → dist/lib}/service/storage/7/elasticsearch.js +23 -25
  207. package/dist/lib/service/storage/7/esWrapper.d.ts +19 -0
  208. package/dist/lib/service/storage/7/esWrapper.js +245 -0
  209. package/{lib → dist/lib}/service/storage/8/elasticsearch.js +23 -25
  210. package/dist/lib/service/storage/8/esWrapper.d.ts +19 -0
  211. package/dist/lib/service/storage/8/esWrapper.js +245 -0
  212. package/{lib → dist/lib}/types/Plugin.d.ts +1 -1
  213. package/{lib/types → dist/lib/types/controllers}/Controller.d.ts +2 -2
  214. package/{lib/types → dist/lib/types/controllers}/ControllerDefinition.d.ts +1 -1
  215. package/dist/lib/types/controllers/adminControlller.type.d.ts +5 -0
  216. package/dist/lib/types/controllers/adminControlller.type.js +3 -0
  217. package/dist/lib/types/controllers/authController.type.d.ts +5 -0
  218. package/dist/lib/types/controllers/authController.type.js +3 -0
  219. package/dist/lib/types/core/auth/formatProcessing.type.d.ts +7 -0
  220. package/dist/lib/types/core/auth/formatProcessing.type.js +3 -0
  221. package/{lib → dist/lib}/types/index.d.ts +3 -3
  222. package/{lib → dist/lib}/types/index.js +3 -3
  223. package/dist/lib/util/assertType.d.ts +41 -0
  224. package/{lib → dist/lib}/util/assertType.js +38 -56
  225. package/dist/lib/util/asyncStore.d.ts +38 -0
  226. package/dist/lib/util/asyncStore.js +70 -0
  227. package/dist/lib/util/bytes.d.ts +2 -0
  228. package/dist/lib/util/bytes.js +33 -0
  229. package/dist/lib/util/debug.d.ts +2 -0
  230. package/{lib → dist/lib}/util/debug.js +15 -23
  231. package/dist/lib/util/deprecate.d.ts +1 -0
  232. package/dist/lib/util/deprecate.js +64 -0
  233. package/dist/lib/util/didYouMean.d.ts +2 -0
  234. package/{lib → dist/lib}/util/didYouMean.js +9 -15
  235. package/dist/lib/util/extractFields.d.ts +17 -0
  236. package/{lib → dist/lib}/util/extractFields.js +18 -32
  237. package/dist/lib/util/memoize.d.ts +7 -0
  238. package/{lib → dist/lib}/util/memoize.js +14 -21
  239. package/dist/lib/util/promback.d.ts +13 -0
  240. package/dist/lib/util/promback.js +60 -0
  241. package/dist/lib/util/requestAssertions.d.ts +10 -0
  242. package/dist/lib/util/requestAssertions.js +143 -0
  243. package/dist/lib/util/safeObject.d.ts +3 -0
  244. package/{lib → dist/lib}/util/safeObject.js +7 -13
  245. package/dist/lib/util/stackTrace.d.ts +19 -0
  246. package/{lib → dist/lib}/util/stackTrace.js +35 -41
  247. package/dist/lib/util/wildcard.d.ts +1 -0
  248. package/{lib → dist/lib}/util/wildcard.js +21 -30
  249. package/dist/package.json +119 -0
  250. package/package.json +44 -58
  251. package/bin/start-kuzzle-server +0 -126
  252. package/check-node-version.js +0 -17
  253. package/lib/api/controllers/adminController.js +0 -229
  254. package/lib/api/controllers/bulkController.js +0 -210
  255. package/lib/api/controllers/collectionController.js +0 -502
  256. package/lib/api/controllers/documentController.js +0 -1156
  257. package/lib/api/controllers/indexController.js +0 -179
  258. package/lib/api/controllers/memoryStorageController.js +0 -1023
  259. package/lib/api/controllers/realtimeController.js +0 -155
  260. package/lib/api/controllers/securityController.js +0 -1571
  261. package/lib/api/controllers/serverController.js +0 -381
  262. package/lib/api/documentExtractor.js +0 -309
  263. package/lib/api/funnel.js +0 -1143
  264. package/lib/api/httpRoutes.js +0 -1547
  265. package/lib/api/rateLimiter.js +0 -87
  266. package/lib/cluster/command.js +0 -284
  267. package/lib/cluster/node.js +0 -1203
  268. package/lib/cluster/publisher.js +0 -386
  269. package/lib/cluster/subscriber.js +0 -776
  270. package/lib/cluster/workers/IDCardRenewer.js +0 -144
  271. package/lib/config/index.js +0 -351
  272. package/lib/config/sdkCompatibility.json +0 -9
  273. package/lib/core/auth/formatProcessing.js +0 -66
  274. package/lib/core/auth/passportWrapper.js +0 -126
  275. package/lib/core/cache/cacheEngine.js +0 -278
  276. package/lib/core/network/accessLogger.js +0 -322
  277. package/lib/core/network/context.js +0 -80
  278. package/lib/core/network/entryPoint.js +0 -358
  279. package/lib/core/network/httpRouter/index.js +0 -316
  280. package/lib/core/network/httpRouter/routeHandler.js +0 -111
  281. package/lib/core/network/httpRouter/routePart.js +0 -147
  282. package/lib/core/network/protocols/httpMessage.js +0 -69
  283. package/lib/core/network/protocols/httpwsProtocol.js +0 -1254
  284. package/lib/core/network/protocols/internalProtocol.js +0 -109
  285. package/lib/core/network/protocols/mqttProtocol.js +0 -291
  286. package/lib/core/network/protocols/protocol.js +0 -102
  287. package/lib/core/network/router.js +0 -255
  288. package/lib/core/plugin/plugin.js +0 -436
  289. package/lib/core/plugin/pluginRepository.js +0 -132
  290. package/lib/core/plugin/pluginsManager.js +0 -1244
  291. package/lib/core/realtime/notification/document.js +0 -108
  292. package/lib/core/realtime/notification/user.js +0 -70
  293. package/lib/core/realtime/notifier.js +0 -541
  294. package/lib/core/security/README.md +0 -223
  295. package/lib/core/security/roleRepository.js +0 -569
  296. package/lib/core/security/securityLoader.js +0 -174
  297. package/lib/core/security/userRepository.js +0 -446
  298. package/lib/core/shared/README.md +0 -3
  299. package/lib/core/shared/abstractManifest.js +0 -102
  300. package/lib/core/shared/sdk/impersonatedSdk.js +0 -94
  301. package/lib/core/statistics/index.js +0 -24
  302. package/lib/core/statistics/statistics.js +0 -373
  303. package/lib/core/storage/clientAdapter.js +0 -1045
  304. package/lib/core/storage/storageEngine.js +0 -63
  305. package/lib/core/validation/baseType.js +0 -80
  306. package/lib/core/validation/index.js +0 -24
  307. package/lib/core/validation/types/date.js +0 -284
  308. package/lib/core/validation/types/email.js +0 -92
  309. package/lib/core/validation/types/enum.js +0 -100
  310. package/lib/core/validation/types/geoShape.js +0 -370
  311. package/lib/core/validation/types/ipAddress.js +0 -83
  312. package/lib/core/validation/types/numeric.js +0 -108
  313. package/lib/core/validation/types/object.js +0 -88
  314. package/lib/core/validation/types/string.js +0 -110
  315. package/lib/core/validation/types/url.js +0 -83
  316. package/lib/core/validation/validation.js +0 -1180
  317. package/lib/kerror/codes/0-core.json +0 -194
  318. package/lib/kerror/codes/1-services.json +0 -351
  319. package/lib/kerror/codes/2-api.json +0 -195
  320. package/lib/kerror/codes/3-network.json +0 -151
  321. package/lib/kerror/codes/4-plugin.json +0 -498
  322. package/lib/kerror/codes/5-validation.json +0 -158
  323. package/lib/kerror/codes/6-protocol.json +0 -28
  324. package/lib/kerror/codes/7-security.json +0 -283
  325. package/lib/kerror/codes/8-cluster.json +0 -16
  326. package/lib/kerror/codes/index.js +0 -208
  327. package/lib/kuzzle/dumpGenerator.js +0 -259
  328. package/lib/kuzzle/event/pipeRunner.js +0 -144
  329. package/lib/kuzzle/event/waterfall.js +0 -101
  330. package/lib/kuzzle/internalIndexHandler.js +0 -234
  331. package/lib/kuzzle/vault.js +0 -89
  332. package/lib/model/storage/apiKey.js +0 -158
  333. package/lib/model/storage/baseModel.js +0 -275
  334. package/lib/service/cache/redis.js +0 -282
  335. package/lib/service/service.js +0 -84
  336. package/lib/service/storage/7/esWrapper.js +0 -303
  337. package/lib/service/storage/8/esWrapper.js +0 -303
  338. package/lib/util/asyncStore.js +0 -112
  339. package/lib/util/bytes.js +0 -36
  340. package/lib/util/deprecate.js +0 -82
  341. package/lib/util/promback.js +0 -66
  342. package/lib/util/readYamlFile.d.ts +0 -2
  343. package/lib/util/readYamlFile.js +0 -10
  344. package/lib/util/requestAssertions.js +0 -157
  345. /package/{index.d.ts → dist/index.d.ts} +0 -0
  346. /package/{index.js → dist/index.js} +0 -0
  347. /package/{lib → dist/lib}/api/controllers/baseController.d.ts +0 -0
  348. /package/{lib → dist/lib}/api/controllers/baseController.js +0 -0
  349. /package/{lib → dist/lib}/api/controllers/debugController.d.ts +0 -0
  350. /package/{lib → dist/lib}/api/controllers/debugController.js +0 -0
  351. /package/{lib → dist/lib}/api/openapi/OpenApiManager.d.ts +0 -0
  352. /package/{lib → dist/lib}/api/openapi/OpenApiManager.js +0 -0
  353. /package/{lib → dist/lib}/api/openapi/index.d.ts +0 -0
  354. /package/{lib → dist/lib}/api/openapi/index.js +0 -0
  355. /package/{lib → dist/lib}/api/openapi/openApiGenerator.d.ts +0 -0
  356. /package/{lib → dist/lib}/api/openapi/openApiGenerator.js +0 -0
  357. /package/{lib → dist/lib}/api/request/index.d.ts +0 -0
  358. /package/{lib → dist/lib}/api/request/index.js +0 -0
  359. /package/{lib → dist/lib}/api/request/kuzzleRequest.js +0 -0
  360. /package/{lib → dist/lib}/api/request/requestContext.js +0 -0
  361. /package/{lib → dist/lib}/api/request/requestInput.d.ts +0 -0
  362. /package/{lib → dist/lib}/api/request/requestInput.js +0 -0
  363. /package/{lib → dist/lib}/api/request/requestResponse.d.ts +0 -0
  364. /package/{lib → dist/lib}/api/request/requestResponse.js +0 -0
  365. /package/{lib → dist/lib}/cluster/idCardHandler.d.ts +0 -0
  366. /package/{lib → dist/lib}/cluster/idCardHandler.js +0 -0
  367. /package/{lib → dist/lib}/cluster/protobuf/command.proto +0 -0
  368. /package/{lib → dist/lib}/cluster/protobuf/sync.proto +0 -0
  369. /package/{lib → dist/lib}/cluster/state.d.ts +0 -0
  370. /package/{lib → dist/lib}/cluster/state.js +0 -0
  371. /package/{lib → dist/lib}/config/default.config.d.ts +0 -0
  372. /package/{lib → dist/lib}/config/default.config.js +0 -0
  373. /package/{lib → dist/lib}/config/documentEventAliases.js +0 -0
  374. /package/{lib → dist/lib}/core/auth/tokenManager.d.ts +0 -0
  375. /package/{lib → dist/lib}/core/auth/tokenManager.js +0 -0
  376. /package/{lib → dist/lib}/core/backend/applicationManager.d.ts +0 -0
  377. /package/{lib → dist/lib}/core/backend/applicationManager.js +0 -0
  378. /package/{lib → dist/lib}/core/backend/backend.d.ts +0 -0
  379. /package/{lib → dist/lib}/core/backend/backend.js +0 -0
  380. /package/{lib → dist/lib}/core/backend/backendCluster.d.ts +0 -0
  381. /package/{lib → dist/lib}/core/backend/backendCluster.js +0 -0
  382. /package/{lib → dist/lib}/core/backend/backendConfig.d.ts +0 -0
  383. /package/{lib → dist/lib}/core/backend/backendController.d.ts +0 -0
  384. /package/{lib → dist/lib}/core/backend/backendController.js +0 -0
  385. /package/{lib → dist/lib}/core/backend/backendErrors.d.ts +0 -0
  386. /package/{lib → dist/lib}/core/backend/backendHook.d.ts +0 -0
  387. /package/{lib → dist/lib}/core/backend/backendHook.js +0 -0
  388. /package/{lib → dist/lib}/core/backend/backendImport.d.ts +0 -0
  389. /package/{lib → dist/lib}/core/backend/backendImport.js +0 -0
  390. /package/{lib → dist/lib}/core/backend/backendOpenApi.d.ts +0 -0
  391. /package/{lib → dist/lib}/core/backend/backendOpenApi.js +0 -0
  392. /package/{lib → dist/lib}/core/backend/backendPipe.d.ts +0 -0
  393. /package/{lib → dist/lib}/core/backend/backendPipe.js +0 -0
  394. /package/{lib → dist/lib}/core/backend/backendPlugin.d.ts +0 -0
  395. /package/{lib → dist/lib}/core/backend/backendPlugin.js +0 -0
  396. /package/{lib → dist/lib}/core/backend/backendStorage.d.ts +0 -0
  397. /package/{lib → dist/lib}/core/backend/backendStorage.js +0 -0
  398. /package/{lib → dist/lib}/core/backend/backendSubscription.d.ts +0 -0
  399. /package/{lib → dist/lib}/core/backend/backendSubscription.js +0 -0
  400. /package/{lib → dist/lib}/core/backend/backendVault.d.ts +0 -0
  401. /package/{lib → dist/lib}/core/backend/backendVault.js +0 -0
  402. /package/{lib → dist/lib}/core/backend/index.d.ts +0 -0
  403. /package/{lib → dist/lib}/core/backend/index.js +0 -0
  404. /package/{lib → dist/lib}/core/backend/internalLogger.d.ts +0 -0
  405. /package/{lib → dist/lib}/core/backend/internalLogger.js +0 -0
  406. /package/{lib → dist/lib}/core/cache/cacheDbEnum.d.ts +0 -0
  407. /package/{lib → dist/lib}/core/cache/cacheDbEnum.js +0 -0
  408. /package/{lib → dist/lib}/core/debug/kuzzleDebugger.d.ts +0 -0
  409. /package/{lib → dist/lib}/core/debug/kuzzleDebugger.js +0 -0
  410. /package/{lib → dist/lib}/core/plugin/pluginContext.d.ts +0 -0
  411. /package/{lib → dist/lib}/core/realtime/channel.d.ts +0 -0
  412. /package/{lib → dist/lib}/core/realtime/channel.js +0 -0
  413. /package/{lib → dist/lib}/core/realtime/connectionRooms.d.ts +0 -0
  414. /package/{lib → dist/lib}/core/realtime/connectionRooms.js +0 -0
  415. /package/{lib → dist/lib}/core/realtime/hotelClerk.d.ts +0 -0
  416. /package/{lib → dist/lib}/core/realtime/hotelClerk.js +0 -0
  417. /package/{lib → dist/lib}/core/realtime/room.d.ts +0 -0
  418. /package/{lib → dist/lib}/core/realtime/room.js +0 -0
  419. /package/{lib → dist/lib}/core/realtime/subscription.d.ts +0 -0
  420. /package/{lib → dist/lib}/core/realtime/subscription.js +0 -0
  421. /package/{lib → dist/lib}/core/security/profileRepository.d.ts +0 -0
  422. /package/{lib → dist/lib}/core/security/profileRepository.js +0 -0
  423. /package/{lib → dist/lib}/core/security/tokenRepository.d.ts +0 -0
  424. /package/{lib → dist/lib}/core/shared/KoncordeWrapper.d.ts +0 -0
  425. /package/{lib → dist/lib}/core/shared/KoncordeWrapper.js +0 -0
  426. /package/{lib → dist/lib}/core/shared/ObjectRepository.d.ts +0 -0
  427. /package/{lib → dist/lib}/core/shared/ObjectRepository.js +0 -0
  428. /package/{lib → dist/lib}/core/shared/sdk/embeddedSdk.d.ts +0 -0
  429. /package/{lib → dist/lib}/core/shared/sdk/embeddedSdk.js +0 -0
  430. /package/{lib → dist/lib}/core/shared/sdk/funnelProtocol.d.ts +0 -0
  431. /package/{lib → dist/lib}/core/shared/sdk/funnelProtocol.js +0 -0
  432. /package/{lib → dist/lib}/core/shared/store.js +0 -0
  433. /package/{lib → dist/lib}/core/storage/indexCache.d.ts +0 -0
  434. /package/{lib → dist/lib}/core/storage/indexCache.js +0 -0
  435. /package/{lib → dist/lib}/core/storage/storeScopeEnum.d.ts +0 -0
  436. /package/{lib → dist/lib}/core/storage/storeScopeEnum.js +0 -0
  437. /package/{lib → dist/lib}/kerror/errors/badRequestError.d.ts +0 -0
  438. /package/{lib → dist/lib}/kerror/errors/badRequestError.js +0 -0
  439. /package/{lib → dist/lib}/kerror/errors/externalServiceError.d.ts +0 -0
  440. /package/{lib → dist/lib}/kerror/errors/externalServiceError.js +0 -0
  441. /package/{lib → dist/lib}/kerror/errors/forbiddenError.d.ts +0 -0
  442. /package/{lib → dist/lib}/kerror/errors/forbiddenError.js +0 -0
  443. /package/{lib → dist/lib}/kerror/errors/gatewayTimeoutError.d.ts +0 -0
  444. /package/{lib → dist/lib}/kerror/errors/gatewayTimeoutError.js +0 -0
  445. /package/{lib → dist/lib}/kerror/errors/index.d.ts +0 -0
  446. /package/{lib → dist/lib}/kerror/errors/index.js +0 -0
  447. /package/{lib → dist/lib}/kerror/errors/internalError.d.ts +0 -0
  448. /package/{lib → dist/lib}/kerror/errors/internalError.js +0 -0
  449. /package/{lib → dist/lib}/kerror/errors/kuzzleError.d.ts +0 -0
  450. /package/{lib → dist/lib}/kerror/errors/kuzzleError.js +0 -0
  451. /package/{lib → dist/lib}/kerror/errors/multipleErrorsError.d.ts +0 -0
  452. /package/{lib → dist/lib}/kerror/errors/multipleErrorsError.js +0 -0
  453. /package/{lib → dist/lib}/kerror/errors/notFoundError.d.ts +0 -0
  454. /package/{lib → dist/lib}/kerror/errors/notFoundError.js +0 -0
  455. /package/{lib → dist/lib}/kerror/errors/partialError.d.ts +0 -0
  456. /package/{lib → dist/lib}/kerror/errors/partialError.js +0 -0
  457. /package/{lib → dist/lib}/kerror/errors/pluginImplementationError.d.ts +0 -0
  458. /package/{lib → dist/lib}/kerror/errors/pluginImplementationError.js +0 -0
  459. /package/{lib → dist/lib}/kerror/errors/preconditionError.d.ts +0 -0
  460. /package/{lib → dist/lib}/kerror/errors/preconditionError.js +0 -0
  461. /package/{lib → dist/lib}/kerror/errors/serviceUnavailableError.d.ts +0 -0
  462. /package/{lib → dist/lib}/kerror/errors/serviceUnavailableError.js +0 -0
  463. /package/{lib → dist/lib}/kerror/errors/sizeLimitError.d.ts +0 -0
  464. /package/{lib → dist/lib}/kerror/errors/sizeLimitError.js +0 -0
  465. /package/{lib → dist/lib}/kerror/errors/tooManyRequestsError.d.ts +0 -0
  466. /package/{lib → dist/lib}/kerror/errors/tooManyRequestsError.js +0 -0
  467. /package/{lib → dist/lib}/kerror/errors/unauthorizedError.d.ts +0 -0
  468. /package/{lib → dist/lib}/kerror/errors/unauthorizedError.js +0 -0
  469. /package/{lib → dist/lib}/kerror/index.js +0 -0
  470. /package/{lib → dist/lib}/kuzzle/event/KuzzleEventEmitter.d.ts +0 -0
  471. /package/{lib → dist/lib}/kuzzle/event/KuzzleEventEmitter.js +0 -0
  472. /package/{lib → dist/lib}/kuzzle/index.d.ts +0 -0
  473. /package/{lib → dist/lib}/kuzzle/index.js +0 -0
  474. /package/{lib → dist/lib}/model/security/profile.d.ts +0 -0
  475. /package/{lib → dist/lib}/model/security/profile.js +0 -0
  476. /package/{lib → dist/lib}/model/security/role.js +0 -0
  477. /package/{lib → dist/lib}/model/security/token.d.ts +0 -0
  478. /package/{lib → dist/lib}/model/security/token.js +0 -0
  479. /package/{lib → dist/lib}/model/security/user.js +0 -0
  480. /package/{lib → dist/lib}/service/storage/8/elasticsearch.d.ts +0 -0
  481. /package/{lib → dist/lib}/service/storage/Elasticsearch.d.ts +0 -0
  482. /package/{lib → dist/lib}/service/storage/Elasticsearch.js +0 -0
  483. /package/{lib → dist/lib}/service/storage/commons/queryTranslator.d.ts +0 -0
  484. /package/{lib → dist/lib}/service/storage/commons/queryTranslator.js +0 -0
  485. /package/{lib → dist/lib}/types/ClientConnection.d.ts +0 -0
  486. /package/{lib → dist/lib}/types/ClientConnection.js +0 -0
  487. /package/{lib → dist/lib}/types/Deprecation.d.ts +0 -0
  488. /package/{lib → dist/lib}/types/Deprecation.js +0 -0
  489. /package/{lib → dist/lib}/types/EventHandler.d.ts +0 -0
  490. /package/{lib → dist/lib}/types/EventHandler.js +0 -0
  491. /package/{lib → dist/lib}/types/Global.d.ts +0 -0
  492. /package/{lib → dist/lib}/types/Global.js +0 -0
  493. /package/{lib → dist/lib}/types/HttpMessage.d.ts +0 -0
  494. /package/{lib → dist/lib}/types/HttpMessage.js +0 -0
  495. /package/{lib → dist/lib}/types/HttpStream.d.ts +0 -0
  496. /package/{lib → dist/lib}/types/HttpStream.js +0 -0
  497. /package/{lib → dist/lib}/types/Kuzzle.d.ts +0 -0
  498. /package/{lib → dist/lib}/types/Kuzzle.js +0 -0
  499. /package/{lib → dist/lib}/types/KuzzleDocument.d.ts +0 -0
  500. /package/{lib → dist/lib}/types/KuzzleDocument.js +0 -0
  501. /package/{lib → dist/lib}/types/OpenApiDefinition.d.ts +0 -0
  502. /package/{lib → dist/lib}/types/OpenApiDefinition.js +0 -0
  503. /package/{lib → dist/lib}/types/PasswordPolicy.d.ts +0 -0
  504. /package/{lib → dist/lib}/types/PasswordPolicy.js +0 -0
  505. /package/{lib → dist/lib}/types/Plugin.js +0 -0
  506. /package/{lib → dist/lib}/types/PluginManifest.d.ts +0 -0
  507. /package/{lib → dist/lib}/types/PluginManifest.js +0 -0
  508. /package/{lib → dist/lib}/types/Policy.d.ts +0 -0
  509. /package/{lib → dist/lib}/types/Policy.js +0 -0
  510. /package/{lib → dist/lib}/types/PolicyRestrictions.d.ts +0 -0
  511. /package/{lib → dist/lib}/types/PolicyRestrictions.js +0 -0
  512. /package/{lib → dist/lib}/types/ProfileDefinition.d.ts +0 -0
  513. /package/{lib → dist/lib}/types/ProfileDefinition.js +0 -0
  514. /package/{lib → dist/lib}/types/RoleDefinition.d.ts +0 -0
  515. /package/{lib → dist/lib}/types/RoleDefinition.js +0 -0
  516. /package/{lib → dist/lib}/types/StrategyDefinition.d.ts +0 -0
  517. /package/{lib → dist/lib}/types/StrategyDefinition.js +0 -0
  518. /package/{lib → dist/lib}/types/Target.d.ts +0 -0
  519. /package/{lib → dist/lib}/types/Target.js +0 -0
  520. /package/{lib → dist/lib}/types/Token.d.ts +0 -0
  521. /package/{lib → dist/lib}/types/Token.js +0 -0
  522. /package/{lib → dist/lib}/types/User.d.ts +0 -0
  523. /package/{lib → dist/lib}/types/User.js +0 -0
  524. /package/{lib → dist/lib}/types/config/DumpConfiguration.d.ts +0 -0
  525. /package/{lib → dist/lib}/types/config/DumpConfiguration.js +0 -0
  526. /package/{lib → dist/lib}/types/config/HttpConfiguration.d.ts +0 -0
  527. /package/{lib → dist/lib}/types/config/HttpConfiguration.js +0 -0
  528. /package/{lib → dist/lib}/types/config/KuzzleConfiguration.d.ts +0 -0
  529. /package/{lib → dist/lib}/types/config/KuzzleConfiguration.js +0 -0
  530. /package/{lib → dist/lib}/types/config/LimitsConfiguration.d.ts +0 -0
  531. /package/{lib → dist/lib}/types/config/LimitsConfiguration.js +0 -0
  532. /package/{lib → dist/lib}/types/config/PluginsConfiguration.d.ts +0 -0
  533. /package/{lib → dist/lib}/types/config/PluginsConfiguration.js +0 -0
  534. /package/{lib → dist/lib}/types/config/SecurityConfiguration.d.ts +0 -0
  535. /package/{lib → dist/lib}/types/config/SecurityConfiguration.js +0 -0
  536. /package/{lib → dist/lib}/types/config/ServerConfiguration.d.ts +0 -0
  537. /package/{lib → dist/lib}/types/config/ServerConfiguration.js +0 -0
  538. /package/{lib → dist/lib}/types/config/ServicesConfiguration.d.ts +0 -0
  539. /package/{lib → dist/lib}/types/config/ServicesConfiguration.js +0 -0
  540. /package/{lib → dist/lib}/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +0 -0
  541. /package/{lib → dist/lib}/types/config/internalCache/InternalCacheRedisConfiguration.js +0 -0
  542. /package/{lib → dist/lib}/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +0 -0
  543. /package/{lib → dist/lib}/types/config/publicCache/PublicCacheRedisConfiguration.js +0 -0
  544. /package/{lib → dist/lib}/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +0 -0
  545. /package/{lib → dist/lib}/types/config/storageEngine/StorageEngineElasticsearchConfiguration.js +0 -0
  546. /package/{lib/types → dist/lib/types/controllers}/Controller.js +0 -0
  547. /package/{lib/types → dist/lib/types/controllers}/ControllerDefinition.js +0 -0
  548. /package/{lib/types → dist/lib/types/controllers}/ControllerRights.d.ts +0 -0
  549. /package/{lib/types → dist/lib/types/controllers}/ControllerRights.js +0 -0
  550. /package/{lib → dist/lib}/types/errors/ErrorDefinition.d.ts +0 -0
  551. /package/{lib → dist/lib}/types/errors/ErrorDefinition.js +0 -0
  552. /package/{lib → dist/lib}/types/errors/ErrorDomains.d.ts +0 -0
  553. /package/{lib → dist/lib}/types/errors/ErrorDomains.js +0 -0
  554. /package/{lib → dist/lib}/types/events/EventGenericDocument.d.ts +0 -0
  555. /package/{lib → dist/lib}/types/events/EventGenericDocument.js +0 -0
  556. /package/{lib → dist/lib}/types/events/EventProtocol.d.ts +0 -0
  557. /package/{lib → dist/lib}/types/events/EventProtocol.js +0 -0
  558. /package/{lib → dist/lib}/types/realtime/RealtimeScope.d.ts +0 -0
  559. /package/{lib → dist/lib}/types/realtime/RealtimeScope.js +0 -0
  560. /package/{lib → dist/lib}/types/realtime/RealtimeUsers.d.ts +0 -0
  561. /package/{lib → dist/lib}/types/realtime/RealtimeUsers.js +0 -0
  562. /package/{lib → dist/lib}/types/realtime/RoomList.d.ts +0 -0
  563. /package/{lib → dist/lib}/types/realtime/RoomList.js +0 -0
  564. /package/{lib → dist/lib}/types/shared/StoreCollectionsDefinition.d.ts +0 -0
  565. /package/{lib → dist/lib}/types/shared/StoreCollectionsDefinition.js +0 -0
  566. /package/{lib → dist/lib}/types/storage/7/Elasticsearch.d.ts +0 -0
  567. /package/{lib → dist/lib}/types/storage/7/Elasticsearch.js +0 -0
  568. /package/{lib → dist/lib}/types/storage/8/Elasticsearch.d.ts +0 -0
  569. /package/{lib → dist/lib}/types/storage/8/Elasticsearch.js +0 -0
  570. /package/{lib → dist/lib}/util/Inflector.d.ts +0 -0
  571. /package/{lib → dist/lib}/util/Inflector.js +0 -0
  572. /package/{lib → dist/lib}/util/array.d.ts +0 -0
  573. /package/{lib → dist/lib}/util/array.js +0 -0
  574. /package/{lib → dist/lib}/util/async.d.ts +0 -0
  575. /package/{lib → dist/lib}/util/async.js +0 -0
  576. /package/{lib → dist/lib}/util/bufferedPassThrough.d.ts +0 -0
  577. /package/{lib → dist/lib}/util/bufferedPassThrough.js +0 -0
  578. /package/{lib → dist/lib}/util/crypto.d.ts +0 -0
  579. /package/{lib → dist/lib}/util/crypto.js +0 -0
  580. /package/{lib → dist/lib}/util/dump-collection.d.ts +0 -0
  581. /package/{lib → dist/lib}/util/dump-collection.js +0 -0
  582. /package/{lib → dist/lib}/util/esRequest.d.ts +0 -0
  583. /package/{lib → dist/lib}/util/esRequest.js +0 -0
  584. /package/{lib → dist/lib}/util/koncordeCompat.d.ts +0 -0
  585. /package/{lib → dist/lib}/util/koncordeCompat.js +0 -0
  586. /package/{lib → dist/lib}/util/mutex.d.ts +0 -0
  587. /package/{lib → dist/lib}/util/mutex.js +0 -0
  588. /package/{lib → dist/lib}/util/name-generator.d.ts +0 -0
  589. /package/{lib → dist/lib}/util/name-generator.js +0 -0
  590. /package/{lib → dist/lib}/util/time.d.ts +0 -0
  591. /package/{lib → dist/lib}/util/time.js +0 -0
@@ -0,0 +1,405 @@
1
+ /*
2
+ * Kuzzle, a backend software, self-hostable and ready to use
3
+ * to power modern apps
4
+ *
5
+ * Copyright 2015-2022 Kuzzle
6
+ * mailto: support AT kuzzle.io
7
+ * website: http://kuzzle.io
8
+ *
9
+ * Licensed under the Apache License, Version 2.0 (the "License");
10
+ * you may not use this file except in compliance with the License.
11
+ * You may obtain a copy of the License at
12
+ *
13
+ * https://www.apache.org/licenses/LICENSE-2.0
14
+ *
15
+ * Unless required by applicable law or agreed to in writing, software
16
+ * distributed under the License is distributed on an "AS IS" BASIS,
17
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ * See the License for the specific language governing permissions and
19
+ * limitations under the License.
20
+ */
21
+ "use strict";
22
+ const { difference } = require("lodash");
23
+ const Bluebird = require("bluebird");
24
+ const kerror = require("../../kerror");
25
+ const actionEnum = require("./actionEnum");
26
+ const { koncordeTest } = require("../../util/koncordeCompat");
27
+ const { DocumentNotification, ServerNotification, UserNotification, } = require("./notification");
28
+ /**
29
+ * Notification are meant to be dispatched on "channels" created when subscribing.
30
+ * But some notification like TokenExpired don't have a specific channel to be received on,
31
+ * so we need a constant channel name to send Kuzzle notification without having to subscribe.
32
+ */
33
+ const KUZZLE_NOTIFICATION_CHANNEL = "kuzzle:notification:server";
34
+ /**
35
+ * @typedef {Object} DocumentChanges
36
+ * @property {string} _id of the document
37
+ * @property {Object} [_source] of the document
38
+ * @property {Object} [_updatedFields] applied to the document (for updates)
39
+ * @property {boolean} [created] -- tells if this is a CREATE or REPLACE
40
+ * (for actionEnum.WRITE)
41
+ */
42
+ /**
43
+ * @class NotifierController
44
+ */
45
+ class NotifierController {
46
+ constructor(realtimeModule) {
47
+ this.module = realtimeModule;
48
+ this.ttl = global.kuzzle.config.limits.subscriptionDocumentTTL;
49
+ this.logger = global.kuzzle.log.child("core:realtime:notifier");
50
+ }
51
+ async init() {
52
+ /**
53
+ * Low-level document notification method, allocating a new Notification
54
+ * message and dispatching it to a precomputed list of rooms.
55
+ * @param {Array.<string>} rooms - list of koncorde rooms to notify
56
+ * @param {DocumentNotification} notification
57
+ * @param {Object} [opts]
58
+ */
59
+ global.kuzzle.onAsk("core:realtime:document:dispatch", (rooms, notification, opts) => {
60
+ return this._notifyDocument(rooms, notification, opts);
61
+ });
62
+ /**
63
+ * Low-level user notification method, allocating a new Notification
64
+ * message and dispatching it to the provided room
65
+ * @param {string} room
66
+ * @param {UserNotification}
67
+ * @param {Object} [opts]
68
+ */
69
+ global.kuzzle.onAsk("core:realtime:user:sendMessage", (room, notification, opts) => {
70
+ return this._notifyUser(room, notification, opts);
71
+ });
72
+ /**
73
+ * Notify about document creations, updates, replacements or deletions
74
+ * @param {Request} request
75
+ * @param {notifyActionEnum} action applied to documents
76
+ * @param {Array.<DocumentChanges>} docs
77
+ */
78
+ global.kuzzle.onAsk("core:realtime:document:mNotify", (request, action, docs) => this.notifyDocuments(request, action, docs));
79
+ /**
80
+ * Notify about document creations, updates, replacements or deletions
81
+ * @param {Request} request
82
+ * @param {notifyActionEnum} action applied to documents
83
+ * @param {DocumentChanges} doc
84
+ */
85
+ global.kuzzle.onAsk("core:realtime:document:notify", (request, action, doc) => this.notifyDocuments(request, action, [doc]));
86
+ /**
87
+ * Send a "token expired" notification to the target user
88
+ * @param {string} connectionId
89
+ */
90
+ global.kuzzle.onAsk("core:realtime:tokenExpired:notify", (connectionId) => this.notifyTokenExpired(connectionId));
91
+ /**
92
+ * Publish the provided request content to listening subscribers
93
+ * @param {Request} request
94
+ */
95
+ global.kuzzle.onAsk("core:realtime:publish", (request) => this.publish(request));
96
+ }
97
+ /**
98
+ * Broadcasts a notification about a document change or a
99
+ * real-time message
100
+ *
101
+ * @param {Array} rooms - Subscribed rooms to notify
102
+ * @param {Request} request - Request at the origin of the notification
103
+ * @param {string} scope - 'in' or 'out'
104
+ * @param {object} content - Document or message
105
+ *
106
+ * @returns {Promise}
107
+ */
108
+ async notifyDocument(rooms, request, scope, action, content) {
109
+ if (rooms.length === 0) {
110
+ return;
111
+ }
112
+ const notification = DocumentNotification.fromRequest(request, scope, action, content);
113
+ global.kuzzle.emit("core:notify:document", {
114
+ notification,
115
+ rooms,
116
+ });
117
+ await this._notifyDocument(rooms, notification, {
118
+ fromCluster: false,
119
+ });
120
+ }
121
+ /**
122
+ * Broadcast a notification about a user entering or leaving
123
+ * the provided room
124
+ *
125
+ * @param {string} room - Room entered or left
126
+ * @param {Request} request - User (un)subscription request
127
+ * @param {string} scope - 'in' or 'out'
128
+ * @param {object} content - Notification additional informations
129
+ *
130
+ * @returns {Promise}
131
+ */
132
+ notifyUser(room, request, scope, content) {
133
+ const notification = UserNotification.fromRequest(request, scope, content);
134
+ global.kuzzle.emit("core:notify:user", {
135
+ notification,
136
+ room,
137
+ });
138
+ return this._notifyUser(room, notification, {
139
+ fromCluster: false,
140
+ });
141
+ }
142
+ /**
143
+ * Send a "token expired" notification to the target user
144
+ *
145
+ * @param {string} connectionId - User's connection identifier
146
+ * @returns {Promise}
147
+ */
148
+ async notifyTokenExpired(connectionId) {
149
+ await this._dispatch("notify:server", [KUZZLE_NOTIFICATION_CHANNEL], // Sending notification on Kuzzle notification channel
150
+ new ServerNotification("TokenExpired", "Authentication Token Expired"), connectionId);
151
+ await this.module.hotelClerk.removeConnection(connectionId);
152
+ }
153
+ /**
154
+ * Publish the content of the provided request to listening subscribers
155
+ *
156
+ * @param {Request} request
157
+ * @returns {Promise.<Object>}
158
+ */
159
+ publish(request) {
160
+ const rooms = this._test(request);
161
+ if (rooms.length === 0) {
162
+ return Bluebird.resolve(null);
163
+ }
164
+ return this.notifyDocument(rooms, request, "in", "publish", {
165
+ _id: request.input.args._id,
166
+ _source: request.input.body,
167
+ });
168
+ }
169
+ /**
170
+ * Notify about a created document
171
+ *
172
+ * @param {Request} request
173
+ * @param {DocumentChanges} document created
174
+ * @returns {Promise.<Array.<string>>} list of matched rooms
175
+ */
176
+ async notifyDocumentCreate(request, document) {
177
+ const rooms = this._test(request, document._source, document._id);
178
+ if (rooms.length > 0) {
179
+ await this.notifyDocument(rooms, request, "in", "create", document);
180
+ }
181
+ return rooms;
182
+ }
183
+ /**
184
+ * Notify about a replaced document
185
+ *
186
+ * @param {Request} request
187
+ * @param {DocumentChanges} document
188
+ * @param {string} cache notification content for that document
189
+ * @returns {Promise.<Array.<string>} list of matched rooms
190
+ */
191
+ async notifyDocumentReplace(request, document, cache = null) {
192
+ const rooms = this._test(request, document._source, document._id);
193
+ if (rooms.length > 0) {
194
+ await this.notifyDocument(rooms, request, "in", "replace", document);
195
+ }
196
+ if (cache !== null) {
197
+ const stopListening = difference(JSON.parse(cache), rooms);
198
+ await this.notifyDocument(stopListening, request, "out", "replace", document);
199
+ }
200
+ return rooms;
201
+ }
202
+ /**
203
+ * Computes document notifications and sends them to subscribed users.
204
+ * @param {Request} request
205
+ * @param {notifyActionEnum} action
206
+ * @param {Array.<DocumentChanges>} documents
207
+ * @return {Promise}
208
+ */
209
+ async notifyDocuments(request, action, documents) {
210
+ const prefix = getCachePrefix(request);
211
+ let cached = action === actionEnum.REPLACE || action === actionEnum.UPDATE;
212
+ const cacheIds = documents.map((doc) => {
213
+ if ((action === actionEnum.WRITE || action === actionEnum.UPSERT) &&
214
+ !cached) {
215
+ cached = doc.created !== true; // force a bool value if undefined
216
+ }
217
+ return prefix + doc._id;
218
+ });
219
+ const cache = cached
220
+ ? await global.kuzzle.ask("core:cache:internal:mget", cacheIds)
221
+ : [];
222
+ const result = await Bluebird.map(documents, (doc, index) => {
223
+ switch (action) {
224
+ case actionEnum.CREATE:
225
+ return this.notifyDocumentCreate(request, doc);
226
+ case actionEnum.DELETE:
227
+ return this.notifyDocumentDelete(request, doc);
228
+ case actionEnum.REPLACE:
229
+ return this.notifyDocumentReplace(request, doc, cache[index]);
230
+ case actionEnum.UPDATE:
231
+ return this.notifyDocumentUpdate(request, doc, cache[index]);
232
+ case actionEnum.UPSERT:
233
+ return doc.created
234
+ ? this.notifyDocumentCreate(request, doc)
235
+ : this.notifyDocumentUpdate(request, doc, cache[index]);
236
+ case actionEnum.WRITE:
237
+ return doc.created
238
+ ? this.notifyDocumentCreate(request, doc)
239
+ : this.notifyDocumentReplace(request, doc, cache[index]);
240
+ default:
241
+ throw kerror.get("core", "fatal", "assertion_failed", `unknown notify action "${doc.action}"`);
242
+ }
243
+ });
244
+ const toDelete = [];
245
+ await Bluebird.map(result, (rooms, index) => {
246
+ if (rooms.length > 0) {
247
+ return global.kuzzle.ask("core:cache:internal:store", cacheIds[index], JSON.stringify(rooms), { ttl: this.ttl });
248
+ }
249
+ toDelete.push(cacheIds[index]);
250
+ return null;
251
+ });
252
+ if (toDelete.length > 0) {
253
+ await global.kuzzle.ask("core:cache:internal:del", toDelete);
254
+ }
255
+ }
256
+ /**
257
+ * Notify rooms on a document update
258
+ * @param {Request} request
259
+ * @param {DocumentChanges} document
260
+ * @param {string} cache notification content for that document
261
+ * @returns {Promise.<Array.<string>} list of matched rooms
262
+ */
263
+ async notifyDocumentUpdate(request, document, cache = null) {
264
+ const rooms = this._test(request, document._source, document._id);
265
+ if (rooms.length > 0) {
266
+ await this.notifyDocument(rooms, request, "in", "update", document);
267
+ }
268
+ if (cache !== null) {
269
+ const stopListening = difference(JSON.parse(cache), rooms);
270
+ await this.notifyDocument(stopListening, request, "out", "update", document);
271
+ }
272
+ return rooms;
273
+ }
274
+ /**
275
+ * Notify about a document deletion
276
+ *
277
+ * @param {Request} request
278
+ * @param {DocumentChanges} document
279
+ * @returns {Promise.<Array>} returns an empty array ("no room match anymore")
280
+ */
281
+ async notifyDocumentDelete(request, document) {
282
+ const rooms = this._test(request, document._source, document._id);
283
+ if (rooms.length > 0) {
284
+ await this.notifyDocument(rooms, request, "out", "delete", document);
285
+ }
286
+ return [];
287
+ }
288
+ /**
289
+ * Trigger a notify global event and, if accepted by plugins,
290
+ * dispatch the payload to subscribers
291
+ *
292
+ * @param {Array} channels - Subscribers channels to notify
293
+ * @param {Notification.User|Notification.Document|Notification.Server} notification
294
+ * @param {string} [connectionId] - Notify this connection, or broadcast
295
+ * if not provided
296
+ * @param {boolean} [trigger] - If set to true, triggers Kuzzle plugins
297
+ *
298
+ * @returns {Promise}
299
+ */
300
+ async _dispatch(event, channels, notification, connectionId) {
301
+ try {
302
+ let updated = await global.kuzzle.pipe(event, notification);
303
+ /**
304
+ * @deprecated Should be replaced by `core:realtime:notification:dispatch`
305
+ */
306
+ updated = await global.kuzzle.pipe("notify:dispatch", updated);
307
+ const updatedInfo = await global.kuzzle.pipe("core:realtime:notification:dispatch:before", {
308
+ channels: channels,
309
+ connectionId: connectionId,
310
+ notification: updated,
311
+ });
312
+ const action = updatedInfo.connectionId ? "notify" : "broadcast";
313
+ global.kuzzle.entryPoint.dispatch(action, {
314
+ channels: updatedInfo.channels,
315
+ connectionId: updatedInfo.connectionId,
316
+ payload: updatedInfo.notification,
317
+ });
318
+ }
319
+ catch (error) {
320
+ this.logger.error(error);
321
+ }
322
+ }
323
+ /**
324
+ * Broadcasts a notification about a document change or a
325
+ * real-time message.
326
+ *
327
+ * When this method is called from the node who received
328
+ * the request triggering notification, then every channel is notified
329
+ * regardless of the "cluster" option.
330
+ *
331
+ * When this method is called from the cluster synchronization,
332
+ * then only the channels having the "cluster: true" option are notified
333
+ *
334
+ * @param {Array} rooms - Subscribed rooms to notify
335
+ * @param {DocumentNotification} notification
336
+ * @param {object} [options] - fromCluster (true)
337
+ *
338
+ * @returns {Promise}
339
+ */
340
+ _notifyDocument(rooms, notification, { fromCluster = true } = {}) {
341
+ const channels = [];
342
+ for (const room of rooms) {
343
+ const hotelClerkRoom = this.module.hotelClerk.rooms.get(room);
344
+ if (hotelClerkRoom === undefined) {
345
+ continue;
346
+ }
347
+ for (const [channelId, channel] of hotelClerkRoom.channels.entries()) {
348
+ const executeOnNode = fromCluster ? channel.cluster : true;
349
+ const matchScope = channel.scope === "all" || channel.scope === notification.scope;
350
+ if (matchScope && executeOnNode) {
351
+ channels.push(channelId);
352
+ }
353
+ }
354
+ }
355
+ if (channels.length === 0) {
356
+ return Bluebird.resolve();
357
+ }
358
+ return this._dispatch("notify:document", channels, notification);
359
+ }
360
+ /**
361
+ * Broadcast a notification about a user entering or leaving
362
+ * the provided room
363
+ *
364
+ * @param {string} room - Room entered or left
365
+ * @param {UserNotification} notification
366
+ * @param {object} content - Notification additional informations
367
+ *
368
+ * @returns {Promise}
369
+ */
370
+ _notifyUser(room, notification, { fromCluster = true } = {}) {
371
+ const channels = [];
372
+ const hotelClerkRoom = this.module.hotelClerk.rooms.get(room);
373
+ if (hotelClerkRoom !== undefined) {
374
+ for (const [id, channel] of hotelClerkRoom.channels.entries()) {
375
+ const match = channel.users === "all" || channel.users === notification.user;
376
+ const executeOnNode = fromCluster ? channel.cluster : true;
377
+ if (executeOnNode && match) {
378
+ channels.push(id);
379
+ }
380
+ }
381
+ }
382
+ if (channels.length === 0) {
383
+ return Bluebird.resolve();
384
+ }
385
+ return this._dispatch("notify:user", channels, notification);
386
+ }
387
+ /**
388
+ * DRYification for calls to Koncorde's test method from a Request object
389
+ * @param {Request} request
390
+ * @param {Object} source - document's source
391
+ * @param {String} id
392
+ *
393
+ * @returns {Array.<string>}
394
+ */
395
+ _test(request, source = null, id = null) {
396
+ return koncordeTest(global.kuzzle.koncorde, request.input.args.index, request.input.args.collection, source || request.input.body || {}, id || request.input.args._id);
397
+ }
398
+ }
399
+ function getCachePrefix(request) {
400
+ // use redis key hash tag
401
+ // (see https://redis.io/topics/cluster-spec#keys-distribution-model)
402
+ return `{notif/${request.input.args.index}/${request.input.args.collection}}/`;
403
+ }
404
+ module.exports = NotifierController;
405
+ //# sourceMappingURL=notifier.js.map
@@ -0,0 +1,14 @@
1
+ export = SecurityModule;
2
+ declare class SecurityModule {
3
+ role: RoleRepository;
4
+ profile: ProfileRepository;
5
+ token: TokenRepository;
6
+ user: UserRepository;
7
+ loader: SecurityLoader;
8
+ init(): Promise<void>;
9
+ }
10
+ import RoleRepository = require("./roleRepository");
11
+ import { ProfileRepository } from "./profileRepository";
12
+ import { TokenRepository } from "./tokenRepository";
13
+ import UserRepository = require("./userRepository");
14
+ import SecurityLoader = require("./securityLoader");
@@ -18,31 +18,27 @@
18
18
  * See the License for the specific language governing permissions and
19
19
  * limitations under the License.
20
20
  */
21
-
22
21
  "use strict";
23
-
24
22
  const RoleRepository = require("./roleRepository");
25
23
  const { ProfileRepository } = require("./profileRepository");
26
24
  const { TokenRepository } = require("./tokenRepository");
27
25
  const UserRepository = require("./userRepository");
28
26
  const SecurityLoader = require("./securityLoader");
29
-
30
27
  class SecurityModule {
31
- constructor() {
32
- this.role = new RoleRepository(this);
33
- this.profile = new ProfileRepository(this);
34
- this.token = new TokenRepository();
35
- this.user = new UserRepository(this);
36
- this.loader = new SecurityLoader();
37
- }
38
-
39
- async init() {
40
- await this.role.init();
41
- await this.profile.init();
42
- await this.token.init();
43
- await this.user.init();
44
- await this.loader.init();
45
- }
28
+ constructor() {
29
+ this.role = new RoleRepository(this);
30
+ this.profile = new ProfileRepository(this);
31
+ this.token = new TokenRepository();
32
+ this.user = new UserRepository(this);
33
+ this.loader = new SecurityLoader();
34
+ }
35
+ async init() {
36
+ await this.role.init();
37
+ await this.profile.init();
38
+ await this.token.init();
39
+ await this.user.init();
40
+ await this.loader.init();
41
+ }
46
42
  }
47
-
48
43
  module.exports = SecurityModule;
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,143 @@
1
+ export = RoleRepository;
2
+ /**
3
+ * @class RoleRepository
4
+ * @extends ObjectRepository
5
+ */
6
+ declare class RoleRepository extends ObjectRepository<any> {
7
+ /**
8
+ * @constructor
9
+ * @param {SecurityModule} securityModule
10
+ */
11
+ constructor(securityModule: SecurityModule);
12
+ module: SecurityModule;
13
+ ObjectConstructor: typeof Role;
14
+ roles: Map<any, any>;
15
+ logger: import("../../kuzzle/Logger").Logger;
16
+ init(): void;
17
+ /**
18
+ * From a list of role ids, retrieves the matching Role objects.
19
+ *
20
+ * @param {Array} ids The role ids to load
21
+ * @param {Object} options - resetCache (false)
22
+ * @returns {Promise.<Array.<Role>>}
23
+ */
24
+ loadRoles(ids: any[]): Promise<Array<Role>>;
25
+ /**
26
+ * Creates a new role, or create/replace a role
27
+ *
28
+ * @param {String} id
29
+ * @param {Object} content
30
+ * @param {Object} [opts]
31
+ * @returns {Role}
32
+ */
33
+ _createOrReplace(id: string, content: any, { force, method, refresh, userId }?: any): Role;
34
+ /**
35
+ * Creates a new role
36
+ *
37
+ * @param {String} id
38
+ * @param {Object} content
39
+ * @param {Object} [opts]
40
+ * @returns {Role}
41
+ */
42
+ create(id: string, content: any, opts?: any): Role;
43
+ /**
44
+ * Creates or replaces a role
45
+ *
46
+ * @param {String} id
47
+ * @param {Object} content
48
+ * @param {Object} [opts]
49
+ * @returns {Role}
50
+ */
51
+ createOrReplace(id: string, content: any, opts?: any): Role;
52
+ /**
53
+ * Updates a role (replaces the entire content)
54
+ *
55
+ * @todo (breaking change) make this function able to handle partial updates
56
+ * instead of replacing the entire role content (hint: _.merge)
57
+ *
58
+ * @param {String} id
59
+ * @param {Object} content
60
+ * @param {Object} [opts]
61
+ * @returns {Promise}
62
+ */
63
+ update(id: string, content: any, { force, refresh, retryOnConflict, userId }?: any): Promise<any>;
64
+ /**
65
+ * Get from database the document that represent the role given in parameter
66
+ *
67
+ * @param {string} id
68
+ * @returns {Promise.<Role>} role
69
+ * @throws {NotFoundError} If the corresponding role doesn't exist
70
+ */
71
+ load(id: string): Promise<Role>;
72
+ /**
73
+ * @override
74
+ */
75
+ override loadOneFromDatabase(id: any): Promise<any>;
76
+ /**
77
+ * @param {Object} body Search body containing either "query" or "controllers"
78
+ * @param {Object} options
79
+ */
80
+ searchRole(body: any, { from, size }?: any): Promise<{
81
+ hits: any[];
82
+ total: any;
83
+ }>;
84
+ /**
85
+ * Given a Role object, validates its definition and if OK, persist it to the database.
86
+ *
87
+ * @param {Role} role
88
+ * @param {object} [options] The persistence options
89
+ * @returns Promise
90
+ */
91
+ validateAndSaveRole(role: Role, options?: object): Promise<any>;
92
+ /**
93
+ * Given a Role object, checks if its controllers and actions exist.
94
+ *
95
+ * @param {Role} role
96
+ */
97
+ checkRoleNativeRights(role: Role): void;
98
+ /**
99
+ * Given a Role object, checks if its controllers and actions exist in plugins.
100
+ *
101
+ * @param {Role} role
102
+ * @param {Force} force
103
+ */
104
+ checkRolePluginsRights(role: Role, { force, forceWarn }?: Force): void;
105
+ /**
106
+ * Fetching roles and check for each of them for invalid plugin rights.
107
+ * If there are some, Kuzzle will log a warning.
108
+ */
109
+ sanityCheck(): Promise<void>;
110
+ /**
111
+ * Deletes a role
112
+ *
113
+ * @param {String} id
114
+ * @param {object} [options]
115
+ * @returns Promise
116
+ */
117
+ deleteById(id: string, options?: object): Promise<void>;
118
+ /**
119
+ * @override
120
+ */
121
+ override delete(role: any, { refresh }?: {
122
+ refresh?: string;
123
+ }): Promise<void>;
124
+ /**
125
+ * From a Role object, returns an object ready to be persisted
126
+ *
127
+ * @param {Role} role
128
+ * @returns {object}
129
+ */
130
+ serializeToDatabase(role: Role): object;
131
+ /**
132
+ * @override
133
+ */
134
+ override truncate(opts: any): Promise<void>;
135
+ /**
136
+ * Invalidate the cache entries for the given role. If none is provided,
137
+ * the entire cache is emptied.
138
+ * @param {string} [roleId]
139
+ */
140
+ invalidate(roleId?: string): void;
141
+ }
142
+ import { ObjectRepository } from "../shared/ObjectRepository";
143
+ import { Role } from "../../model/security/role";