kuzzle 2.49.1 → 2.50.0-beta.3

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 (592) hide show
  1. package/dist/bin/check-node-version.js +11 -0
  2. package/dist/bin/copy-protobuf.js +17 -0
  3. package/dist/lib/api/controllers/adminController.d.ts +51 -0
  4. package/dist/lib/api/controllers/adminController.js +191 -0
  5. package/{lib → dist/lib}/api/controllers/authController.d.ts +20 -40
  6. package/{lib → dist/lib}/api/controllers/authController.js +23 -24
  7. package/dist/lib/api/controllers/bulkController.d.ts +46 -0
  8. package/dist/lib/api/controllers/bulkController.js +132 -0
  9. package/dist/lib/api/controllers/clusterController.d.ts +6 -0
  10. package/{lib → dist/lib}/api/controllers/clusterController.js +7 -11
  11. package/dist/lib/api/controllers/collectionController.d.ts +136 -0
  12. package/dist/lib/api/controllers/collectionController.js +356 -0
  13. package/dist/lib/api/controllers/documentController.d.ts +181 -0
  14. package/dist/lib/api/controllers/documentController.js +768 -0
  15. package/dist/lib/api/controllers/index.d.ts +12 -0
  16. package/{lib → dist/lib}/api/controllers/index.js +13 -14
  17. package/dist/lib/api/controllers/indexController.d.ts +65 -0
  18. package/dist/lib/api/controllers/indexController.js +139 -0
  19. package/dist/lib/api/controllers/memoryStorageController.d.ts +8 -0
  20. package/dist/lib/api/controllers/memoryStorageController.js +867 -0
  21. package/dist/lib/api/controllers/realtimeController.d.ts +47 -0
  22. package/dist/lib/api/controllers/realtimeController.js +128 -0
  23. package/dist/lib/api/controllers/securityController.d.ts +423 -0
  24. package/dist/lib/api/controllers/securityController.js +1139 -0
  25. package/dist/lib/api/controllers/serverController.d.ts +82 -0
  26. package/dist/lib/api/controllers/serverController.js +321 -0
  27. package/dist/lib/api/documentExtractor.d.ts +9 -0
  28. package/dist/lib/api/documentExtractor.js +274 -0
  29. package/dist/lib/api/funnel.d.ts +183 -0
  30. package/dist/lib/api/funnel.js +821 -0
  31. package/dist/lib/api/httpRoutes.d.ts +17 -0
  32. package/dist/lib/api/httpRoutes.js +1496 -0
  33. package/dist/lib/api/rateLimiter.d.ts +18 -0
  34. package/dist/lib/api/rateLimiter.js +74 -0
  35. package/{lib → dist/lib}/api/request/kuzzleRequest.d.ts +2 -2
  36. package/{lib → dist/lib}/api/request/requestContext.d.ts +2 -1
  37. package/dist/lib/cluster/command.d.ts +73 -0
  38. package/dist/lib/cluster/command.js +236 -0
  39. package/dist/lib/cluster/index.d.ts +2 -0
  40. package/{lib → dist/lib}/cluster/index.js +1 -2
  41. package/dist/lib/cluster/node.d.ts +278 -0
  42. package/dist/lib/cluster/node.js +876 -0
  43. package/dist/lib/cluster/publisher.d.ts +188 -0
  44. package/dist/lib/cluster/publisher.js +347 -0
  45. package/dist/lib/cluster/subscriber.d.ts +269 -0
  46. package/dist/lib/cluster/subscriber.js +555 -0
  47. package/dist/lib/cluster/workers/IDCardRenewer.d.ts +13 -0
  48. package/dist/lib/cluster/workers/IDCardRenewer.js +120 -0
  49. package/{lib → dist/lib}/config/documentEventAliases.d.ts +1 -2
  50. package/dist/lib/config/index.d.ts +5 -0
  51. package/dist/lib/config/index.js +244 -0
  52. package/dist/lib/config/sdkCompatibility.json +9 -0
  53. package/dist/lib/core/auth/formatProcessing.d.ts +30 -0
  54. package/dist/lib/core/auth/formatProcessing.js +55 -0
  55. package/dist/lib/core/auth/passportResponse.d.ts +15 -0
  56. package/{lib → dist/lib}/core/auth/passportResponse.js +24 -30
  57. package/dist/lib/core/auth/passportWrapper.d.ts +28 -0
  58. package/dist/lib/core/auth/passportWrapper.js +126 -0
  59. package/{lib → dist/lib}/core/backend/backendConfig.js +2 -2
  60. package/{lib → dist/lib}/core/backend/backendErrors.js +9 -12
  61. package/dist/lib/core/cache/cacheEngine.d.ts +15 -0
  62. package/dist/lib/core/cache/cacheEngine.js +205 -0
  63. package/dist/lib/core/network/accessLogger.d.ts +29 -0
  64. package/dist/lib/core/network/accessLogger.js +250 -0
  65. package/dist/lib/core/network/clientConnection.d.ts +15 -0
  66. package/{lib → dist/lib}/core/network/clientConnection.js +17 -24
  67. package/dist/lib/core/network/context.d.ts +42 -0
  68. package/dist/lib/core/network/context.js +57 -0
  69. package/dist/lib/core/network/entryPoint.d.ts +62 -0
  70. package/dist/lib/core/network/entryPoint.js +261 -0
  71. package/dist/lib/core/network/httpRouter/index.d.ts +85 -0
  72. package/dist/lib/core/network/httpRouter/index.js +258 -0
  73. package/dist/lib/core/network/httpRouter/routeHandler.d.ts +46 -0
  74. package/dist/lib/core/network/httpRouter/routeHandler.js +101 -0
  75. package/dist/lib/core/network/httpRouter/routePart.d.ts +35 -0
  76. package/dist/lib/core/network/httpRouter/routePart.js +117 -0
  77. package/dist/lib/core/network/protocolManifest.d.ts +6 -0
  78. package/{lib → dist/lib}/core/network/protocolManifest.js +5 -9
  79. package/dist/lib/core/network/protocols/httpMessage.d.ts +22 -0
  80. package/dist/lib/core/network/protocols/httpMessage.js +62 -0
  81. package/dist/lib/core/network/protocols/httpwsProtocol.d.ts +171 -0
  82. package/dist/lib/core/network/protocols/httpwsProtocol.js +921 -0
  83. package/dist/lib/core/network/protocols/internalProtocol.d.ts +27 -0
  84. package/dist/lib/core/network/protocols/internalProtocol.js +82 -0
  85. package/dist/lib/core/network/protocols/mqttProtocol.d.ts +39 -0
  86. package/dist/lib/core/network/protocols/mqttProtocol.js +219 -0
  87. package/dist/lib/core/network/protocols/protocol.d.ts +26 -0
  88. package/dist/lib/core/network/protocols/protocol.js +74 -0
  89. package/dist/lib/core/network/router.d.ts +49 -0
  90. package/dist/lib/core/network/router.js +193 -0
  91. package/dist/lib/core/plugin/plugin.d.ts +56 -0
  92. package/dist/lib/core/plugin/plugin.js +282 -0
  93. package/{lib → dist/lib}/core/plugin/pluginContext.js +2 -2
  94. package/dist/lib/core/plugin/pluginManifest.d.ts +5 -0
  95. package/{lib → dist/lib}/core/plugin/pluginManifest.js +16 -27
  96. package/dist/lib/core/plugin/pluginRepository.d.ts +53 -0
  97. package/dist/lib/core/plugin/pluginRepository.js +112 -0
  98. package/dist/lib/core/plugin/pluginsManager.d.ts +190 -0
  99. package/dist/lib/core/plugin/pluginsManager.js +817 -0
  100. package/dist/lib/core/plugin/privilegedContext.d.ts +14 -0
  101. package/{lib → dist/lib}/core/plugin/privilegedContext.js +10 -14
  102. package/dist/lib/core/realtime/actionEnum.d.ts +25 -0
  103. package/{lib → dist/lib}/core/realtime/actionEnum.js +7 -10
  104. package/dist/lib/core/realtime/index.d.ts +8 -0
  105. package/{lib → dist/lib}/core/realtime/index.js +9 -13
  106. package/dist/lib/core/realtime/notification/document.d.ts +34 -0
  107. package/dist/lib/core/realtime/notification/document.js +98 -0
  108. package/dist/lib/core/realtime/notification/index.d.ts +3 -0
  109. package/{lib → dist/lib}/core/realtime/notification/index.js +4 -5
  110. package/dist/lib/core/realtime/notification/server.d.ts +17 -0
  111. package/{lib → dist/lib}/core/realtime/notification/server.js +8 -10
  112. package/dist/lib/core/realtime/notification/user.d.ts +29 -0
  113. package/dist/lib/core/realtime/notification/user.js +66 -0
  114. package/dist/lib/core/realtime/notifier.d.ts +171 -0
  115. package/dist/lib/core/realtime/notifier.js +405 -0
  116. package/dist/lib/core/security/index.d.ts +14 -0
  117. package/{lib → dist/lib}/core/security/index.js +15 -19
  118. package/dist/lib/core/security/roleRepository.d.ts +143 -0
  119. package/dist/lib/core/security/roleRepository.js +445 -0
  120. package/dist/lib/core/security/securityLoader.d.ts +24 -0
  121. package/dist/lib/core/security/securityLoader.js +125 -0
  122. package/{lib → dist/lib}/core/security/tokenRepository.js +1 -1
  123. package/dist/lib/core/security/userRepository.d.ts +81 -0
  124. package/dist/lib/core/security/userRepository.js +346 -0
  125. package/dist/lib/core/shared/abstractManifest.d.ts +27 -0
  126. package/dist/lib/core/shared/abstractManifest.js +85 -0
  127. package/dist/lib/core/shared/sdk/impersonatedSdk.d.ts +7 -0
  128. package/dist/lib/core/shared/sdk/impersonatedSdk.js +80 -0
  129. package/{lib → dist/lib}/core/shared/store.d.ts +2 -2
  130. package/dist/lib/core/statistics/statistics.d.ts +94 -0
  131. package/dist/lib/core/statistics/statistics.js +287 -0
  132. package/dist/lib/core/storage/clientAdapter.d.ts +62 -0
  133. package/dist/lib/core/storage/clientAdapter.js +756 -0
  134. package/dist/lib/core/storage/storageEngine.d.ts +13 -0
  135. package/dist/lib/core/storage/storageEngine.js +52 -0
  136. package/dist/lib/core/validation/baseType.d.ts +35 -0
  137. package/dist/lib/core/validation/baseType.js +70 -0
  138. package/dist/lib/core/validation/types/anything.d.ts +10 -0
  139. package/{lib → dist/lib}/core/validation/types/anything.js +7 -10
  140. package/dist/lib/core/validation/types/boolean.d.ts +16 -0
  141. package/{lib → dist/lib}/core/validation/types/boolean.js +18 -23
  142. package/dist/lib/core/validation/types/date.d.ts +17 -0
  143. package/dist/lib/core/validation/types/date.js +215 -0
  144. package/dist/lib/core/validation/types/email.d.ts +17 -0
  145. package/dist/lib/core/validation/types/email.js +80 -0
  146. package/dist/lib/core/validation/types/enum.d.ts +17 -0
  147. package/dist/lib/core/validation/types/enum.js +70 -0
  148. package/dist/lib/core/validation/types/geoPoint.d.ts +17 -0
  149. package/{lib → dist/lib}/core/validation/types/geoPoint.js +19 -24
  150. package/dist/lib/core/validation/types/geoShape.d.ts +31 -0
  151. package/dist/lib/core/validation/types/geoShape.js +280 -0
  152. package/dist/lib/core/validation/types/integer.d.ts +7 -0
  153. package/{lib → dist/lib}/core/validation/types/integer.js +21 -27
  154. package/dist/lib/core/validation/types/ipAddress.d.ts +17 -0
  155. package/dist/lib/core/validation/types/ipAddress.js +73 -0
  156. package/dist/lib/core/validation/types/numeric.d.ts +17 -0
  157. package/dist/lib/core/validation/types/numeric.js +84 -0
  158. package/dist/lib/core/validation/types/object.d.ts +24 -0
  159. package/dist/lib/core/validation/types/object.js +74 -0
  160. package/dist/lib/core/validation/types/string.d.ts +17 -0
  161. package/dist/lib/core/validation/types/string.js +85 -0
  162. package/dist/lib/core/validation/types/url.d.ts +17 -0
  163. package/dist/lib/core/validation/types/url.js +73 -0
  164. package/dist/lib/core/validation/validation.d.ts +113 -0
  165. package/dist/lib/core/validation/validation.js +692 -0
  166. package/dist/lib/kerror/codes/0-core.json +194 -0
  167. package/dist/lib/kerror/codes/1-services.json +351 -0
  168. package/dist/lib/kerror/codes/2-api.json +195 -0
  169. package/dist/lib/kerror/codes/3-network.json +151 -0
  170. package/dist/lib/kerror/codes/4-plugin.json +498 -0
  171. package/dist/lib/kerror/codes/5-validation.json +158 -0
  172. package/dist/lib/kerror/codes/6-protocol.json +28 -0
  173. package/dist/lib/kerror/codes/7-security.json +283 -0
  174. package/dist/lib/kerror/codes/8-cluster.json +16 -0
  175. package/dist/lib/kerror/codes/index.d.ts +24 -0
  176. package/dist/lib/kerror/codes/index.js +140 -0
  177. package/{lib → dist/lib}/kerror/index.d.ts +5 -5
  178. package/{lib → dist/lib}/kuzzle/Logger.d.ts +6 -0
  179. package/{lib → dist/lib}/kuzzle/Logger.js +26 -5
  180. package/dist/lib/kuzzle/dumpGenerator.d.ts +14 -0
  181. package/dist/lib/kuzzle/dumpGenerator.js +180 -0
  182. package/dist/lib/kuzzle/event/pipeRunner.d.ts +30 -0
  183. package/dist/lib/kuzzle/event/pipeRunner.js +119 -0
  184. package/dist/lib/kuzzle/event/waterfall.d.ts +2 -0
  185. package/dist/lib/kuzzle/event/waterfall.js +90 -0
  186. package/dist/lib/kuzzle/internalIndexHandler.d.ts +186 -0
  187. package/dist/lib/kuzzle/internalIndexHandler.js +174 -0
  188. package/{lib → dist/lib}/kuzzle/kuzzle.d.ts +6 -7
  189. package/{lib → dist/lib}/kuzzle/kuzzle.js +5 -2
  190. package/dist/lib/kuzzle/kuzzleStateEnum.d.ts +20 -0
  191. package/{lib → dist/lib}/kuzzle/kuzzleStateEnum.js +5 -8
  192. package/dist/lib/kuzzle/vault.d.ts +2 -0
  193. package/dist/lib/kuzzle/vault.js +63 -0
  194. package/dist/lib/model/security/rights.d.ts +8 -0
  195. package/{lib → dist/lib}/model/security/rights.js +4 -8
  196. package/{lib → dist/lib}/model/security/role.d.ts +1 -1
  197. package/{lib → dist/lib}/model/security/user.d.ts +1 -0
  198. package/dist/lib/model/storage/apiKey.d.ts +49 -0
  199. package/dist/lib/model/storage/apiKey.js +126 -0
  200. package/dist/lib/model/storage/baseModel.d.ts +100 -0
  201. package/dist/lib/model/storage/baseModel.js +211 -0
  202. package/dist/lib/service/cache/redis.d.ts +74 -0
  203. package/dist/lib/service/cache/redis.js +237 -0
  204. package/dist/lib/service/service.d.ts +30 -0
  205. package/dist/lib/service/service.js +74 -0
  206. package/{lib → dist/lib}/service/storage/7/elasticsearch.d.ts +2 -2
  207. package/{lib → dist/lib}/service/storage/7/elasticsearch.js +23 -25
  208. package/dist/lib/service/storage/7/esWrapper.d.ts +19 -0
  209. package/dist/lib/service/storage/7/esWrapper.js +245 -0
  210. package/{lib → dist/lib}/service/storage/8/elasticsearch.js +23 -25
  211. package/dist/lib/service/storage/8/esWrapper.d.ts +19 -0
  212. package/dist/lib/service/storage/8/esWrapper.js +245 -0
  213. package/{lib → dist/lib}/types/Plugin.d.ts +1 -1
  214. package/{lib/types → dist/lib/types/controllers}/Controller.d.ts +2 -2
  215. package/{lib/types → dist/lib/types/controllers}/ControllerDefinition.d.ts +1 -1
  216. package/dist/lib/types/controllers/adminControlller.type.d.ts +5 -0
  217. package/dist/lib/types/controllers/adminControlller.type.js +3 -0
  218. package/dist/lib/types/controllers/authController.type.d.ts +5 -0
  219. package/dist/lib/types/controllers/authController.type.js +3 -0
  220. package/dist/lib/types/core/auth/formatProcessing.type.d.ts +7 -0
  221. package/dist/lib/types/core/auth/formatProcessing.type.js +3 -0
  222. package/{lib → dist/lib}/types/index.d.ts +3 -3
  223. package/{lib → dist/lib}/types/index.js +3 -3
  224. package/dist/lib/util/assertType.d.ts +41 -0
  225. package/{lib → dist/lib}/util/assertType.js +38 -56
  226. package/dist/lib/util/asyncStore.d.ts +38 -0
  227. package/dist/lib/util/asyncStore.js +70 -0
  228. package/dist/lib/util/bytes.d.ts +2 -0
  229. package/dist/lib/util/bytes.js +33 -0
  230. package/dist/lib/util/debug.d.ts +2 -0
  231. package/{lib → dist/lib}/util/debug.js +15 -23
  232. package/dist/lib/util/deprecate.d.ts +1 -0
  233. package/dist/lib/util/deprecate.js +64 -0
  234. package/dist/lib/util/didYouMean.d.ts +2 -0
  235. package/{lib → dist/lib}/util/didYouMean.js +9 -15
  236. package/dist/lib/util/extractFields.d.ts +17 -0
  237. package/{lib → dist/lib}/util/extractFields.js +18 -32
  238. package/dist/lib/util/memoize.d.ts +7 -0
  239. package/{lib → dist/lib}/util/memoize.js +14 -21
  240. package/dist/lib/util/promback.d.ts +13 -0
  241. package/dist/lib/util/promback.js +60 -0
  242. package/dist/lib/util/requestAssertions.d.ts +10 -0
  243. package/dist/lib/util/requestAssertions.js +143 -0
  244. package/dist/lib/util/safeObject.d.ts +3 -0
  245. package/{lib → dist/lib}/util/safeObject.js +7 -13
  246. package/dist/lib/util/stackTrace.d.ts +19 -0
  247. package/{lib → dist/lib}/util/stackTrace.js +35 -41
  248. package/dist/lib/util/wildcard.d.ts +1 -0
  249. package/{lib → dist/lib}/util/wildcard.js +21 -30
  250. package/dist/package.json +120 -0
  251. package/package.json +45 -58
  252. package/bin/start-kuzzle-server +0 -126
  253. package/check-node-version.js +0 -17
  254. package/lib/api/controllers/adminController.js +0 -229
  255. package/lib/api/controllers/bulkController.js +0 -210
  256. package/lib/api/controllers/collectionController.js +0 -502
  257. package/lib/api/controllers/documentController.js +0 -1156
  258. package/lib/api/controllers/indexController.js +0 -179
  259. package/lib/api/controllers/memoryStorageController.js +0 -1023
  260. package/lib/api/controllers/realtimeController.js +0 -155
  261. package/lib/api/controllers/securityController.js +0 -1571
  262. package/lib/api/controllers/serverController.js +0 -381
  263. package/lib/api/documentExtractor.js +0 -309
  264. package/lib/api/funnel.js +0 -1143
  265. package/lib/api/httpRoutes.js +0 -1547
  266. package/lib/api/rateLimiter.js +0 -87
  267. package/lib/cluster/command.js +0 -284
  268. package/lib/cluster/node.js +0 -1203
  269. package/lib/cluster/publisher.js +0 -386
  270. package/lib/cluster/subscriber.js +0 -776
  271. package/lib/cluster/workers/IDCardRenewer.js +0 -144
  272. package/lib/config/index.js +0 -351
  273. package/lib/config/sdkCompatibility.json +0 -9
  274. package/lib/core/auth/formatProcessing.js +0 -66
  275. package/lib/core/auth/passportWrapper.js +0 -126
  276. package/lib/core/cache/cacheEngine.js +0 -278
  277. package/lib/core/network/accessLogger.js +0 -322
  278. package/lib/core/network/context.js +0 -80
  279. package/lib/core/network/entryPoint.js +0 -358
  280. package/lib/core/network/httpRouter/index.js +0 -316
  281. package/lib/core/network/httpRouter/routeHandler.js +0 -111
  282. package/lib/core/network/httpRouter/routePart.js +0 -147
  283. package/lib/core/network/protocols/httpMessage.js +0 -69
  284. package/lib/core/network/protocols/httpwsProtocol.js +0 -1254
  285. package/lib/core/network/protocols/internalProtocol.js +0 -109
  286. package/lib/core/network/protocols/mqttProtocol.js +0 -291
  287. package/lib/core/network/protocols/protocol.js +0 -102
  288. package/lib/core/network/router.js +0 -255
  289. package/lib/core/plugin/plugin.js +0 -436
  290. package/lib/core/plugin/pluginRepository.js +0 -132
  291. package/lib/core/plugin/pluginsManager.js +0 -1244
  292. package/lib/core/realtime/notification/document.js +0 -108
  293. package/lib/core/realtime/notification/user.js +0 -70
  294. package/lib/core/realtime/notifier.js +0 -541
  295. package/lib/core/security/README.md +0 -223
  296. package/lib/core/security/roleRepository.js +0 -569
  297. package/lib/core/security/securityLoader.js +0 -174
  298. package/lib/core/security/userRepository.js +0 -446
  299. package/lib/core/shared/README.md +0 -3
  300. package/lib/core/shared/abstractManifest.js +0 -102
  301. package/lib/core/shared/sdk/impersonatedSdk.js +0 -94
  302. package/lib/core/statistics/index.js +0 -24
  303. package/lib/core/statistics/statistics.js +0 -373
  304. package/lib/core/storage/clientAdapter.js +0 -1045
  305. package/lib/core/storage/storageEngine.js +0 -63
  306. package/lib/core/validation/baseType.js +0 -80
  307. package/lib/core/validation/index.js +0 -24
  308. package/lib/core/validation/types/date.js +0 -284
  309. package/lib/core/validation/types/email.js +0 -92
  310. package/lib/core/validation/types/enum.js +0 -100
  311. package/lib/core/validation/types/geoShape.js +0 -370
  312. package/lib/core/validation/types/ipAddress.js +0 -83
  313. package/lib/core/validation/types/numeric.js +0 -108
  314. package/lib/core/validation/types/object.js +0 -88
  315. package/lib/core/validation/types/string.js +0 -110
  316. package/lib/core/validation/types/url.js +0 -83
  317. package/lib/core/validation/validation.js +0 -1180
  318. package/lib/kerror/codes/0-core.json +0 -194
  319. package/lib/kerror/codes/1-services.json +0 -351
  320. package/lib/kerror/codes/2-api.json +0 -195
  321. package/lib/kerror/codes/3-network.json +0 -151
  322. package/lib/kerror/codes/4-plugin.json +0 -498
  323. package/lib/kerror/codes/5-validation.json +0 -158
  324. package/lib/kerror/codes/6-protocol.json +0 -28
  325. package/lib/kerror/codes/7-security.json +0 -283
  326. package/lib/kerror/codes/8-cluster.json +0 -16
  327. package/lib/kerror/codes/index.js +0 -208
  328. package/lib/kuzzle/dumpGenerator.js +0 -259
  329. package/lib/kuzzle/event/pipeRunner.js +0 -144
  330. package/lib/kuzzle/event/waterfall.js +0 -101
  331. package/lib/kuzzle/internalIndexHandler.js +0 -234
  332. package/lib/kuzzle/vault.js +0 -89
  333. package/lib/model/storage/apiKey.js +0 -158
  334. package/lib/model/storage/baseModel.js +0 -275
  335. package/lib/service/cache/redis.js +0 -282
  336. package/lib/service/service.js +0 -84
  337. package/lib/service/storage/7/esWrapper.js +0 -303
  338. package/lib/service/storage/8/esWrapper.js +0 -303
  339. package/lib/util/asyncStore.js +0 -112
  340. package/lib/util/bytes.js +0 -36
  341. package/lib/util/deprecate.js +0 -82
  342. package/lib/util/promback.js +0 -66
  343. package/lib/util/readYamlFile.d.ts +0 -2
  344. package/lib/util/readYamlFile.js +0 -10
  345. package/lib/util/requestAssertions.js +0 -157
  346. /package/{index.d.ts → dist/index.d.ts} +0 -0
  347. /package/{index.js → dist/index.js} +0 -0
  348. /package/{lib → dist/lib}/api/controllers/baseController.d.ts +0 -0
  349. /package/{lib → dist/lib}/api/controllers/baseController.js +0 -0
  350. /package/{lib → dist/lib}/api/controllers/debugController.d.ts +0 -0
  351. /package/{lib → dist/lib}/api/controllers/debugController.js +0 -0
  352. /package/{lib → dist/lib}/api/openapi/OpenApiManager.d.ts +0 -0
  353. /package/{lib → dist/lib}/api/openapi/OpenApiManager.js +0 -0
  354. /package/{lib → dist/lib}/api/openapi/index.d.ts +0 -0
  355. /package/{lib → dist/lib}/api/openapi/index.js +0 -0
  356. /package/{lib → dist/lib}/api/openapi/openApiGenerator.d.ts +0 -0
  357. /package/{lib → dist/lib}/api/openapi/openApiGenerator.js +0 -0
  358. /package/{lib → dist/lib}/api/request/index.d.ts +0 -0
  359. /package/{lib → dist/lib}/api/request/index.js +0 -0
  360. /package/{lib → dist/lib}/api/request/kuzzleRequest.js +0 -0
  361. /package/{lib → dist/lib}/api/request/requestContext.js +0 -0
  362. /package/{lib → dist/lib}/api/request/requestInput.d.ts +0 -0
  363. /package/{lib → dist/lib}/api/request/requestInput.js +0 -0
  364. /package/{lib → dist/lib}/api/request/requestResponse.d.ts +0 -0
  365. /package/{lib → dist/lib}/api/request/requestResponse.js +0 -0
  366. /package/{lib → dist/lib}/cluster/idCardHandler.d.ts +0 -0
  367. /package/{lib → dist/lib}/cluster/idCardHandler.js +0 -0
  368. /package/{lib → dist/lib}/cluster/protobuf/command.proto +0 -0
  369. /package/{lib → dist/lib}/cluster/protobuf/sync.proto +0 -0
  370. /package/{lib → dist/lib}/cluster/state.d.ts +0 -0
  371. /package/{lib → dist/lib}/cluster/state.js +0 -0
  372. /package/{lib → dist/lib}/config/default.config.d.ts +0 -0
  373. /package/{lib → dist/lib}/config/default.config.js +0 -0
  374. /package/{lib → dist/lib}/config/documentEventAliases.js +0 -0
  375. /package/{lib → dist/lib}/core/auth/tokenManager.d.ts +0 -0
  376. /package/{lib → dist/lib}/core/auth/tokenManager.js +0 -0
  377. /package/{lib → dist/lib}/core/backend/applicationManager.d.ts +0 -0
  378. /package/{lib → dist/lib}/core/backend/applicationManager.js +0 -0
  379. /package/{lib → dist/lib}/core/backend/backend.d.ts +0 -0
  380. /package/{lib → dist/lib}/core/backend/backend.js +0 -0
  381. /package/{lib → dist/lib}/core/backend/backendCluster.d.ts +0 -0
  382. /package/{lib → dist/lib}/core/backend/backendCluster.js +0 -0
  383. /package/{lib → dist/lib}/core/backend/backendConfig.d.ts +0 -0
  384. /package/{lib → dist/lib}/core/backend/backendController.d.ts +0 -0
  385. /package/{lib → dist/lib}/core/backend/backendController.js +0 -0
  386. /package/{lib → dist/lib}/core/backend/backendErrors.d.ts +0 -0
  387. /package/{lib → dist/lib}/core/backend/backendHook.d.ts +0 -0
  388. /package/{lib → dist/lib}/core/backend/backendHook.js +0 -0
  389. /package/{lib → dist/lib}/core/backend/backendImport.d.ts +0 -0
  390. /package/{lib → dist/lib}/core/backend/backendImport.js +0 -0
  391. /package/{lib → dist/lib}/core/backend/backendOpenApi.d.ts +0 -0
  392. /package/{lib → dist/lib}/core/backend/backendOpenApi.js +0 -0
  393. /package/{lib → dist/lib}/core/backend/backendPipe.d.ts +0 -0
  394. /package/{lib → dist/lib}/core/backend/backendPipe.js +0 -0
  395. /package/{lib → dist/lib}/core/backend/backendPlugin.d.ts +0 -0
  396. /package/{lib → dist/lib}/core/backend/backendPlugin.js +0 -0
  397. /package/{lib → dist/lib}/core/backend/backendStorage.d.ts +0 -0
  398. /package/{lib → dist/lib}/core/backend/backendStorage.js +0 -0
  399. /package/{lib → dist/lib}/core/backend/backendSubscription.d.ts +0 -0
  400. /package/{lib → dist/lib}/core/backend/backendSubscription.js +0 -0
  401. /package/{lib → dist/lib}/core/backend/backendVault.d.ts +0 -0
  402. /package/{lib → dist/lib}/core/backend/backendVault.js +0 -0
  403. /package/{lib → dist/lib}/core/backend/index.d.ts +0 -0
  404. /package/{lib → dist/lib}/core/backend/index.js +0 -0
  405. /package/{lib → dist/lib}/core/backend/internalLogger.d.ts +0 -0
  406. /package/{lib → dist/lib}/core/backend/internalLogger.js +0 -0
  407. /package/{lib → dist/lib}/core/cache/cacheDbEnum.d.ts +0 -0
  408. /package/{lib → dist/lib}/core/cache/cacheDbEnum.js +0 -0
  409. /package/{lib → dist/lib}/core/debug/kuzzleDebugger.d.ts +0 -0
  410. /package/{lib → dist/lib}/core/debug/kuzzleDebugger.js +0 -0
  411. /package/{lib → dist/lib}/core/plugin/pluginContext.d.ts +0 -0
  412. /package/{lib → dist/lib}/core/realtime/channel.d.ts +0 -0
  413. /package/{lib → dist/lib}/core/realtime/channel.js +0 -0
  414. /package/{lib → dist/lib}/core/realtime/connectionRooms.d.ts +0 -0
  415. /package/{lib → dist/lib}/core/realtime/connectionRooms.js +0 -0
  416. /package/{lib → dist/lib}/core/realtime/hotelClerk.d.ts +0 -0
  417. /package/{lib → dist/lib}/core/realtime/hotelClerk.js +0 -0
  418. /package/{lib → dist/lib}/core/realtime/room.d.ts +0 -0
  419. /package/{lib → dist/lib}/core/realtime/room.js +0 -0
  420. /package/{lib → dist/lib}/core/realtime/subscription.d.ts +0 -0
  421. /package/{lib → dist/lib}/core/realtime/subscription.js +0 -0
  422. /package/{lib → dist/lib}/core/security/profileRepository.d.ts +0 -0
  423. /package/{lib → dist/lib}/core/security/profileRepository.js +0 -0
  424. /package/{lib → dist/lib}/core/security/tokenRepository.d.ts +0 -0
  425. /package/{lib → dist/lib}/core/shared/KoncordeWrapper.d.ts +0 -0
  426. /package/{lib → dist/lib}/core/shared/KoncordeWrapper.js +0 -0
  427. /package/{lib → dist/lib}/core/shared/ObjectRepository.d.ts +0 -0
  428. /package/{lib → dist/lib}/core/shared/ObjectRepository.js +0 -0
  429. /package/{lib → dist/lib}/core/shared/sdk/embeddedSdk.d.ts +0 -0
  430. /package/{lib → dist/lib}/core/shared/sdk/embeddedSdk.js +0 -0
  431. /package/{lib → dist/lib}/core/shared/sdk/funnelProtocol.d.ts +0 -0
  432. /package/{lib → dist/lib}/core/shared/sdk/funnelProtocol.js +0 -0
  433. /package/{lib → dist/lib}/core/shared/store.js +0 -0
  434. /package/{lib → dist/lib}/core/storage/indexCache.d.ts +0 -0
  435. /package/{lib → dist/lib}/core/storage/indexCache.js +0 -0
  436. /package/{lib → dist/lib}/core/storage/storeScopeEnum.d.ts +0 -0
  437. /package/{lib → dist/lib}/core/storage/storeScopeEnum.js +0 -0
  438. /package/{lib → dist/lib}/kerror/errors/badRequestError.d.ts +0 -0
  439. /package/{lib → dist/lib}/kerror/errors/badRequestError.js +0 -0
  440. /package/{lib → dist/lib}/kerror/errors/externalServiceError.d.ts +0 -0
  441. /package/{lib → dist/lib}/kerror/errors/externalServiceError.js +0 -0
  442. /package/{lib → dist/lib}/kerror/errors/forbiddenError.d.ts +0 -0
  443. /package/{lib → dist/lib}/kerror/errors/forbiddenError.js +0 -0
  444. /package/{lib → dist/lib}/kerror/errors/gatewayTimeoutError.d.ts +0 -0
  445. /package/{lib → dist/lib}/kerror/errors/gatewayTimeoutError.js +0 -0
  446. /package/{lib → dist/lib}/kerror/errors/index.d.ts +0 -0
  447. /package/{lib → dist/lib}/kerror/errors/index.js +0 -0
  448. /package/{lib → dist/lib}/kerror/errors/internalError.d.ts +0 -0
  449. /package/{lib → dist/lib}/kerror/errors/internalError.js +0 -0
  450. /package/{lib → dist/lib}/kerror/errors/kuzzleError.d.ts +0 -0
  451. /package/{lib → dist/lib}/kerror/errors/kuzzleError.js +0 -0
  452. /package/{lib → dist/lib}/kerror/errors/multipleErrorsError.d.ts +0 -0
  453. /package/{lib → dist/lib}/kerror/errors/multipleErrorsError.js +0 -0
  454. /package/{lib → dist/lib}/kerror/errors/notFoundError.d.ts +0 -0
  455. /package/{lib → dist/lib}/kerror/errors/notFoundError.js +0 -0
  456. /package/{lib → dist/lib}/kerror/errors/partialError.d.ts +0 -0
  457. /package/{lib → dist/lib}/kerror/errors/partialError.js +0 -0
  458. /package/{lib → dist/lib}/kerror/errors/pluginImplementationError.d.ts +0 -0
  459. /package/{lib → dist/lib}/kerror/errors/pluginImplementationError.js +0 -0
  460. /package/{lib → dist/lib}/kerror/errors/preconditionError.d.ts +0 -0
  461. /package/{lib → dist/lib}/kerror/errors/preconditionError.js +0 -0
  462. /package/{lib → dist/lib}/kerror/errors/serviceUnavailableError.d.ts +0 -0
  463. /package/{lib → dist/lib}/kerror/errors/serviceUnavailableError.js +0 -0
  464. /package/{lib → dist/lib}/kerror/errors/sizeLimitError.d.ts +0 -0
  465. /package/{lib → dist/lib}/kerror/errors/sizeLimitError.js +0 -0
  466. /package/{lib → dist/lib}/kerror/errors/tooManyRequestsError.d.ts +0 -0
  467. /package/{lib → dist/lib}/kerror/errors/tooManyRequestsError.js +0 -0
  468. /package/{lib → dist/lib}/kerror/errors/unauthorizedError.d.ts +0 -0
  469. /package/{lib → dist/lib}/kerror/errors/unauthorizedError.js +0 -0
  470. /package/{lib → dist/lib}/kerror/index.js +0 -0
  471. /package/{lib → dist/lib}/kuzzle/event/KuzzleEventEmitter.d.ts +0 -0
  472. /package/{lib → dist/lib}/kuzzle/event/KuzzleEventEmitter.js +0 -0
  473. /package/{lib → dist/lib}/kuzzle/index.d.ts +0 -0
  474. /package/{lib → dist/lib}/kuzzle/index.js +0 -0
  475. /package/{lib → dist/lib}/model/security/profile.d.ts +0 -0
  476. /package/{lib → dist/lib}/model/security/profile.js +0 -0
  477. /package/{lib → dist/lib}/model/security/role.js +0 -0
  478. /package/{lib → dist/lib}/model/security/token.d.ts +0 -0
  479. /package/{lib → dist/lib}/model/security/token.js +0 -0
  480. /package/{lib → dist/lib}/model/security/user.js +0 -0
  481. /package/{lib → dist/lib}/service/storage/8/elasticsearch.d.ts +0 -0
  482. /package/{lib → dist/lib}/service/storage/Elasticsearch.d.ts +0 -0
  483. /package/{lib → dist/lib}/service/storage/Elasticsearch.js +0 -0
  484. /package/{lib → dist/lib}/service/storage/commons/queryTranslator.d.ts +0 -0
  485. /package/{lib → dist/lib}/service/storage/commons/queryTranslator.js +0 -0
  486. /package/{lib → dist/lib}/types/ClientConnection.d.ts +0 -0
  487. /package/{lib → dist/lib}/types/ClientConnection.js +0 -0
  488. /package/{lib → dist/lib}/types/Deprecation.d.ts +0 -0
  489. /package/{lib → dist/lib}/types/Deprecation.js +0 -0
  490. /package/{lib → dist/lib}/types/EventHandler.d.ts +0 -0
  491. /package/{lib → dist/lib}/types/EventHandler.js +0 -0
  492. /package/{lib → dist/lib}/types/Global.d.ts +0 -0
  493. /package/{lib → dist/lib}/types/Global.js +0 -0
  494. /package/{lib → dist/lib}/types/HttpMessage.d.ts +0 -0
  495. /package/{lib → dist/lib}/types/HttpMessage.js +0 -0
  496. /package/{lib → dist/lib}/types/HttpStream.d.ts +0 -0
  497. /package/{lib → dist/lib}/types/HttpStream.js +0 -0
  498. /package/{lib → dist/lib}/types/Kuzzle.d.ts +0 -0
  499. /package/{lib → dist/lib}/types/Kuzzle.js +0 -0
  500. /package/{lib → dist/lib}/types/KuzzleDocument.d.ts +0 -0
  501. /package/{lib → dist/lib}/types/KuzzleDocument.js +0 -0
  502. /package/{lib → dist/lib}/types/OpenApiDefinition.d.ts +0 -0
  503. /package/{lib → dist/lib}/types/OpenApiDefinition.js +0 -0
  504. /package/{lib → dist/lib}/types/PasswordPolicy.d.ts +0 -0
  505. /package/{lib → dist/lib}/types/PasswordPolicy.js +0 -0
  506. /package/{lib → dist/lib}/types/Plugin.js +0 -0
  507. /package/{lib → dist/lib}/types/PluginManifest.d.ts +0 -0
  508. /package/{lib → dist/lib}/types/PluginManifest.js +0 -0
  509. /package/{lib → dist/lib}/types/Policy.d.ts +0 -0
  510. /package/{lib → dist/lib}/types/Policy.js +0 -0
  511. /package/{lib → dist/lib}/types/PolicyRestrictions.d.ts +0 -0
  512. /package/{lib → dist/lib}/types/PolicyRestrictions.js +0 -0
  513. /package/{lib → dist/lib}/types/ProfileDefinition.d.ts +0 -0
  514. /package/{lib → dist/lib}/types/ProfileDefinition.js +0 -0
  515. /package/{lib → dist/lib}/types/RoleDefinition.d.ts +0 -0
  516. /package/{lib → dist/lib}/types/RoleDefinition.js +0 -0
  517. /package/{lib → dist/lib}/types/StrategyDefinition.d.ts +0 -0
  518. /package/{lib → dist/lib}/types/StrategyDefinition.js +0 -0
  519. /package/{lib → dist/lib}/types/Target.d.ts +0 -0
  520. /package/{lib → dist/lib}/types/Target.js +0 -0
  521. /package/{lib → dist/lib}/types/Token.d.ts +0 -0
  522. /package/{lib → dist/lib}/types/Token.js +0 -0
  523. /package/{lib → dist/lib}/types/User.d.ts +0 -0
  524. /package/{lib → dist/lib}/types/User.js +0 -0
  525. /package/{lib → dist/lib}/types/config/DumpConfiguration.d.ts +0 -0
  526. /package/{lib → dist/lib}/types/config/DumpConfiguration.js +0 -0
  527. /package/{lib → dist/lib}/types/config/HttpConfiguration.d.ts +0 -0
  528. /package/{lib → dist/lib}/types/config/HttpConfiguration.js +0 -0
  529. /package/{lib → dist/lib}/types/config/KuzzleConfiguration.d.ts +0 -0
  530. /package/{lib → dist/lib}/types/config/KuzzleConfiguration.js +0 -0
  531. /package/{lib → dist/lib}/types/config/LimitsConfiguration.d.ts +0 -0
  532. /package/{lib → dist/lib}/types/config/LimitsConfiguration.js +0 -0
  533. /package/{lib → dist/lib}/types/config/PluginsConfiguration.d.ts +0 -0
  534. /package/{lib → dist/lib}/types/config/PluginsConfiguration.js +0 -0
  535. /package/{lib → dist/lib}/types/config/SecurityConfiguration.d.ts +0 -0
  536. /package/{lib → dist/lib}/types/config/SecurityConfiguration.js +0 -0
  537. /package/{lib → dist/lib}/types/config/ServerConfiguration.d.ts +0 -0
  538. /package/{lib → dist/lib}/types/config/ServerConfiguration.js +0 -0
  539. /package/{lib → dist/lib}/types/config/ServicesConfiguration.d.ts +0 -0
  540. /package/{lib → dist/lib}/types/config/ServicesConfiguration.js +0 -0
  541. /package/{lib → dist/lib}/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +0 -0
  542. /package/{lib → dist/lib}/types/config/internalCache/InternalCacheRedisConfiguration.js +0 -0
  543. /package/{lib → dist/lib}/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +0 -0
  544. /package/{lib → dist/lib}/types/config/publicCache/PublicCacheRedisConfiguration.js +0 -0
  545. /package/{lib → dist/lib}/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +0 -0
  546. /package/{lib → dist/lib}/types/config/storageEngine/StorageEngineElasticsearchConfiguration.js +0 -0
  547. /package/{lib/types → dist/lib/types/controllers}/Controller.js +0 -0
  548. /package/{lib/types → dist/lib/types/controllers}/ControllerDefinition.js +0 -0
  549. /package/{lib/types → dist/lib/types/controllers}/ControllerRights.d.ts +0 -0
  550. /package/{lib/types → dist/lib/types/controllers}/ControllerRights.js +0 -0
  551. /package/{lib → dist/lib}/types/errors/ErrorDefinition.d.ts +0 -0
  552. /package/{lib → dist/lib}/types/errors/ErrorDefinition.js +0 -0
  553. /package/{lib → dist/lib}/types/errors/ErrorDomains.d.ts +0 -0
  554. /package/{lib → dist/lib}/types/errors/ErrorDomains.js +0 -0
  555. /package/{lib → dist/lib}/types/events/EventGenericDocument.d.ts +0 -0
  556. /package/{lib → dist/lib}/types/events/EventGenericDocument.js +0 -0
  557. /package/{lib → dist/lib}/types/events/EventProtocol.d.ts +0 -0
  558. /package/{lib → dist/lib}/types/events/EventProtocol.js +0 -0
  559. /package/{lib → dist/lib}/types/realtime/RealtimeScope.d.ts +0 -0
  560. /package/{lib → dist/lib}/types/realtime/RealtimeScope.js +0 -0
  561. /package/{lib → dist/lib}/types/realtime/RealtimeUsers.d.ts +0 -0
  562. /package/{lib → dist/lib}/types/realtime/RealtimeUsers.js +0 -0
  563. /package/{lib → dist/lib}/types/realtime/RoomList.d.ts +0 -0
  564. /package/{lib → dist/lib}/types/realtime/RoomList.js +0 -0
  565. /package/{lib → dist/lib}/types/shared/StoreCollectionsDefinition.d.ts +0 -0
  566. /package/{lib → dist/lib}/types/shared/StoreCollectionsDefinition.js +0 -0
  567. /package/{lib → dist/lib}/types/storage/7/Elasticsearch.d.ts +0 -0
  568. /package/{lib → dist/lib}/types/storage/7/Elasticsearch.js +0 -0
  569. /package/{lib → dist/lib}/types/storage/8/Elasticsearch.d.ts +0 -0
  570. /package/{lib → dist/lib}/types/storage/8/Elasticsearch.js +0 -0
  571. /package/{lib → dist/lib}/util/Inflector.d.ts +0 -0
  572. /package/{lib → dist/lib}/util/Inflector.js +0 -0
  573. /package/{lib → dist/lib}/util/array.d.ts +0 -0
  574. /package/{lib → dist/lib}/util/array.js +0 -0
  575. /package/{lib → dist/lib}/util/async.d.ts +0 -0
  576. /package/{lib → dist/lib}/util/async.js +0 -0
  577. /package/{lib → dist/lib}/util/bufferedPassThrough.d.ts +0 -0
  578. /package/{lib → dist/lib}/util/bufferedPassThrough.js +0 -0
  579. /package/{lib → dist/lib}/util/crypto.d.ts +0 -0
  580. /package/{lib → dist/lib}/util/crypto.js +0 -0
  581. /package/{lib → dist/lib}/util/dump-collection.d.ts +0 -0
  582. /package/{lib → dist/lib}/util/dump-collection.js +0 -0
  583. /package/{lib → dist/lib}/util/esRequest.d.ts +0 -0
  584. /package/{lib → dist/lib}/util/esRequest.js +0 -0
  585. /package/{lib → dist/lib}/util/koncordeCompat.d.ts +0 -0
  586. /package/{lib → dist/lib}/util/koncordeCompat.js +0 -0
  587. /package/{lib → dist/lib}/util/mutex.d.ts +0 -0
  588. /package/{lib → dist/lib}/util/mutex.js +0 -0
  589. /package/{lib → dist/lib}/util/name-generator.d.ts +0 -0
  590. /package/{lib → dist/lib}/util/name-generator.js +0 -0
  591. /package/{lib → dist/lib}/util/time.d.ts +0 -0
  592. /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";