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,756 @@
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 { Elasticsearch } = require("../../service/storage/Elasticsearch");
23
+ const { IndexCache } = require("./indexCache");
24
+ const { isPlainObject } = require("../../util/safeObject");
25
+ const kerror = require("../../kerror");
26
+ const { Mutex } = require("../../util/mutex");
27
+ const servicesError = kerror.wrap("services", "storage");
28
+ /**
29
+ * Storage client adapter to perform validation on index/collection existence
30
+ * and to maintain the index/collection cache.
31
+ */
32
+ class ClientAdapter {
33
+ /**
34
+ * @param {storeScopeEnum} scope
35
+ */
36
+ constructor(scope) {
37
+ this.es = new Elasticsearch(global.kuzzle.config.services.storageEngine, scope);
38
+ this.client = this.es.client;
39
+ this.scope = scope;
40
+ this.cache = new IndexCache();
41
+ }
42
+ async init() {
43
+ await this.es.init();
44
+ await this.populateCache();
45
+ this.registerCollectionEvents();
46
+ this.registerIndexEvents();
47
+ this.registerDocumentEvents();
48
+ this.registerMappingEvents();
49
+ this.registerCacheEvents();
50
+ // Global store events registration
51
+ /**
52
+ * Manually refresh the index cache (e.g. after alias creation)
53
+ */
54
+ global.kuzzle.onAsk(`core:storage:${this.scope}:cache:refresh`, () => this.populateCache());
55
+ /**
56
+ * Return information about the instantiated ES service
57
+ * @returns {Promise.<Object>}
58
+ */
59
+ global.kuzzle.onAsk(`core:storage:${this.scope}:info:get`, () => this.client.info());
60
+ /**
61
+ * Translate Koncorde filters to Elasticsearch query
62
+ *
63
+ * @param {Object} koncordeFilters - Set of valid Koncorde filters
64
+ * @returns {Object} Equivalent Elasticsearch query
65
+ */
66
+ global.kuzzle.onAsk(`core:storage:${this.scope}:translate`, (filters) => this.client.translateKoncordeFilters(filters));
67
+ }
68
+ async createIndex(index, { indexCacheOnly = false, propagate = true } = {}) {
69
+ if (this.cache.hasIndex(index)) {
70
+ throw servicesError.get("index_already_exists", this.scope, index);
71
+ }
72
+ if (!indexCacheOnly) {
73
+ await this.client.createIndex(index);
74
+ }
75
+ this.cache.addIndex(index);
76
+ if (propagate) {
77
+ global.kuzzle.emit("core:storage:index:create:after", {
78
+ index,
79
+ scope: this.scope,
80
+ });
81
+ }
82
+ }
83
+ async createCollection(index, collection, opts, { indexCacheOnly = false, propagate = true } = {}) {
84
+ if (!indexCacheOnly) {
85
+ await this.client.createCollection(index, collection, opts);
86
+ }
87
+ this.cache.addCollection(index, collection);
88
+ if (propagate) {
89
+ global.kuzzle.emit("core:storage:collection:create:after", {
90
+ collection,
91
+ index,
92
+ scope: this.scope,
93
+ });
94
+ }
95
+ }
96
+ async deleteIndex(index) {
97
+ this.cache.assertIndexExists(index);
98
+ await this.client.deleteIndex(index);
99
+ this.cache.removeIndex(index);
100
+ global.kuzzle.emit("core:storage:index:delete:after", {
101
+ index,
102
+ scope: this.scope,
103
+ });
104
+ }
105
+ async deleteIndexes(indexes) {
106
+ for (const index of indexes) {
107
+ this.cache.assertIndexExists(index);
108
+ }
109
+ const deleted = await this.client.deleteIndexes(indexes);
110
+ if (deleted.length > 0) {
111
+ for (const index of deleted) {
112
+ this.cache.removeIndex(index);
113
+ }
114
+ global.kuzzle.emit("core:storage:index:mDelete:after", {
115
+ indexes: deleted,
116
+ scope: this.scope,
117
+ });
118
+ }
119
+ return deleted;
120
+ }
121
+ async deleteCollection(index, collection) {
122
+ this.cache.assertCollectionExists(index, collection);
123
+ await this.client.deleteCollection(index, collection);
124
+ this.cache.removeCollection(index, collection);
125
+ global.kuzzle.emit("core:storage:collection:delete:after", {
126
+ collection,
127
+ index,
128
+ scope: this.scope,
129
+ });
130
+ }
131
+ /**
132
+ * Populates the index cache with existing index/collection.
133
+ * Also checks for duplicated index names.
134
+ */
135
+ async populateCache() {
136
+ if (global.kuzzle.config.services.storageEngine.generateMissingAliases) {
137
+ await this.client.generateMissingAliases();
138
+ }
139
+ const schema = await this.client.getSchema();
140
+ for (const [index, collections] of Object.entries(schema)) {
141
+ this.cache.addIndex(index);
142
+ for (const collection of collections) {
143
+ this.cache.addCollection(index, collection);
144
+ }
145
+ }
146
+ }
147
+ registerCollectionEvents() {
148
+ /**
149
+ * Create a new collection in a given index, and optionally configure it
150
+ * @param {string} index
151
+ * @param {string} collection
152
+ * @param {Object.<settings: {}, mappings: {}} [opts]
153
+ * @param {Object} creationOptions
154
+ * @return {Promise}
155
+ * @throws
156
+ */
157
+ global.kuzzle.onAsk(`core:storage:${this.scope}:collection:create`, (index, collection, opts, creationOptions) => this.createCollection(index, collection, opts, creationOptions));
158
+ /**
159
+ * Delete a collection
160
+ * @param {string} index
161
+ * @param {string} collection
162
+ * @return {Promise}
163
+ * @throws If the index or the collection does not exist
164
+ */
165
+ global.kuzzle.onAsk(`core:storage:${this.scope}:collection:delete`, (index, collection) => this.deleteCollection(index, collection));
166
+ /**
167
+ * Get settings of a collection
168
+ * @param {string} index
169
+ * @param {string} collection
170
+ */
171
+ global.kuzzle.onAsk(`core:storage:${this.scope}:collection:settings:get`, (index, collection) => {
172
+ this.cache.assertCollectionExists(index, collection);
173
+ return this.client.getSettings(index, collection);
174
+ });
175
+ /**
176
+ * Check a collection existence
177
+ * @param {string} index
178
+ * @param {string} collection
179
+ */
180
+ global.kuzzle.onAsk(`core:storage:${this.scope}:collection:exist`, (index, collection) => this.cache.hasCollection(index, collection));
181
+ /**
182
+ * Return a list of an index' collections within this adapter's scope
183
+ * @param {string} index
184
+ * @returns {Promise.<string[]>}
185
+ */
186
+ global.kuzzle.onAsk(`core:storage:${this.scope}:collection:list`, (index) => this.cache.listCollections(index));
187
+ /**
188
+ * Refresh a collection
189
+ * @param {string} index
190
+ * @param {string} collection
191
+ * @returns {Promise}
192
+ */
193
+ global.kuzzle.onAsk(`core:storage:${this.scope}:collection:refresh`, (index, collection) => {
194
+ this.cache.assertCollectionExists(index, collection);
195
+ return this.client.refreshCollection(index, collection);
196
+ });
197
+ /**
198
+ * Remove all documents from an existing collection
199
+ * @param {string} index
200
+ * @param {string} collection
201
+ * @returns {Promise}
202
+ */
203
+ global.kuzzle.onAsk(`core:storage:${this.scope}:collection:truncate`, (index, collection) => {
204
+ this.cache.assertCollectionExists(index, collection);
205
+ return this.client.truncateCollection(index, collection);
206
+ });
207
+ /**
208
+ * Update a collection settings and mappings
209
+ * @param {string} index
210
+ * @param {string} collection
211
+ * @param {Object} changes
212
+ * @returns {Promise}
213
+ */
214
+ global.kuzzle.onAsk(`core:storage:${this.scope}:collection:update`, (index, collection, changes) => {
215
+ this.cache.assertCollectionExists(index, collection);
216
+ return this.client.updateCollection(index, collection, changes);
217
+ });
218
+ }
219
+ registerIndexEvents() {
220
+ /**
221
+ * Create a new index within this adapter scope
222
+ * @param {string} index
223
+ * @param {Object} options
224
+ * @returns {Promise}
225
+ * @throws
226
+ */
227
+ global.kuzzle.onAsk(`core:storage:${this.scope}:index:create`, (index, options) => this.createIndex(index, options));
228
+ /**
229
+ * Delete an index
230
+ * @param {string} index
231
+ * @return {Promise}
232
+ * @throws If the index does not exist
233
+ */
234
+ global.kuzzle.onAsk(`core:storage:${this.scope}:index:delete`, (index) => this.deleteIndex(index));
235
+ /**
236
+ * Check an index existence
237
+ * @param {string} index
238
+ * @return {Promise.<boolean>}
239
+ */
240
+ global.kuzzle.onAsk(`core:storage:${this.scope}:index:exist`, (index) => this.cache.hasIndex(index));
241
+ /**
242
+ * Return a list of all indexes within this adapter's scope
243
+ * @returns {string[]}
244
+ */
245
+ global.kuzzle.onAsk(`core:storage:${this.scope}:index:list`, () => this.cache.listIndexes());
246
+ /**
247
+ * Delete multiple indexes
248
+ * @param {string[]} indexes
249
+ * @return {Promise}
250
+ * @throws If at least one index does not exist
251
+ */
252
+ global.kuzzle.onAsk(`core:storage:${this.scope}:index:mDelete`, (indexes) => this.deleteIndexes(indexes));
253
+ /**
254
+ * Return detailed storage stats within this adapter's scope
255
+ * @returns {Promise.<Object>}
256
+ */
257
+ global.kuzzle.onAsk(`core:storage:${this.scope}:index:stats`, () => this.client.stats());
258
+ }
259
+ registerDocumentEvents() {
260
+ /**
261
+ * Execute actions on documents in bulk
262
+ *
263
+ * @param {string} index
264
+ * @param {string} collection
265
+ * @param {Object[]} bulk data, in ES format
266
+ * @param {Object} [opts] -- see Elasticsearch "import" options
267
+ * @returns {Promise.<{ items, errors }>
268
+ */
269
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:bulk`, (index, collection, bulk, opts) => {
270
+ this.cache.assertCollectionExists(index, collection);
271
+ return this.client.import(index, collection, bulk, opts);
272
+ });
273
+ /**
274
+ * Count how many documents match the provided query
275
+ *
276
+ * @param {string} index
277
+ * @param {string} collection
278
+ * @param {Object} query -- search query
279
+ * @return {Promise.<Number>}
280
+ */
281
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:count`, (index, collection, query) => {
282
+ this.cache.assertCollectionExists(index, collection);
283
+ return this.client.count(index, collection, query);
284
+ });
285
+ /**
286
+ * Create a document
287
+ *
288
+ * @param {string} index
289
+ * @param {string} collection
290
+ * @param {Object} content
291
+ * @param {Object} [opts] -- see Elasticsearch "create" options
292
+ * @returns {Promise.<{ _id, _version, _source }>}
293
+ */
294
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:create`, (index, collection, content, opts) => {
295
+ this.cache.assertCollectionExists(index, collection);
296
+ return this.client.create(index, collection, content, opts);
297
+ });
298
+ /**
299
+ * Create or replace a document
300
+ *
301
+ * @param {string} index
302
+ * @param {string} collection
303
+ * @param {string} id -- document unique identifier
304
+ * @param {Object} content
305
+ * @param {Object} [opts] -- see Elasticsearch "createOrReplace" options
306
+ * @returns {Promise.<{ _id, _version, _source, created }>}
307
+ */
308
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:createOrReplace`, (index, collection, id, content, opts) => {
309
+ this.cache.assertCollectionExists(index, collection);
310
+ return this.client.createOrReplace(index, collection, id, content, opts);
311
+ });
312
+ /**
313
+ * Delete a document
314
+ *
315
+ * @param {string} index
316
+ * @param {string} collection
317
+ * @param {string} id
318
+ * @param {Object} [opts] -- see Elasticsearch "delete" options
319
+ * @returns {Promise}
320
+ */
321
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:delete`, (index, collection, id, opts) => {
322
+ this.cache.assertCollectionExists(index, collection);
323
+ return this.client.delete(index, collection, id, opts);
324
+ });
325
+ /**
326
+ * Delete all documents matching the provided search query
327
+ *
328
+ * @param {string} index
329
+ * @param {string} collection
330
+ * @param {Object} query
331
+ * @param {Object} [opts] -- see Elasticsearch "deleteByQuery" options
332
+ * @returns {Promise.<{ documents, total, deleted, failures: [ id, reason ] }>}
333
+ */
334
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:deleteByQuery`, (index, collection, query, opts) => {
335
+ this.cache.assertCollectionExists(index, collection);
336
+ return this.client.deleteByQuery(index, collection, query, opts);
337
+ });
338
+ /**
339
+ * Delete fields of a document
340
+ *
341
+ * @param {string} index
342
+ * @param {string} collection
343
+ * @param {string} id
344
+ * @param {Array} fields -- fields to delete
345
+ * @param {Object} [opts] -- see Elasticsearch "deleteFields" options
346
+ * @returns {Promise.<{ _id, _version, _source }>}
347
+ */
348
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:deleteFields`, (index, collection, id, fields, opts) => {
349
+ this.cache.assertCollectionExists(index, collection);
350
+ return this.client.deleteFields(index, collection, id, fields, opts);
351
+ });
352
+ /**
353
+ * Check if a document exists
354
+ *
355
+ * @param {string} index
356
+ * @param {string} collection
357
+ * @param {string} id -- document unique identifier
358
+ * @returns {Promise.<boolean>}
359
+ */
360
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:exist`, (index, collection, id) => {
361
+ this.cache.assertCollectionExists(index, collection);
362
+ return this.client.exists(index, collection, id);
363
+ });
364
+ /**
365
+ * Check if a document multiple document Exists
366
+ *
367
+ * @param {string} index
368
+ * @param {string} collection
369
+ * @param {string} id -- document unique identifier
370
+ * @returns {Promise.<boolean>}
371
+ */
372
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:mExists`, (index, collection, ids) => {
373
+ this.cache.assertCollectionExists(index, collection);
374
+ return this.client.mExists(index, collection, ids);
375
+ });
376
+ /**
377
+ * Get a document using its unique id
378
+ *
379
+ * @param {string} index
380
+ * @param {string} collection
381
+ * @param {string} id -- document unique identifier
382
+ * @returns {Promise.<{ _id, _version, _source }>}
383
+ */
384
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:get`, (index, collection, id) => {
385
+ this.cache.assertCollectionExists(index, collection);
386
+ return this.client.get(index, collection, id);
387
+ });
388
+ /**
389
+ * Import documents as fixtures
390
+ * @param {Objects} fixtures
391
+ * @return {Promise}
392
+ */
393
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:import`, (fixtures, options) => this.loadFixtures(fixtures, options));
394
+ /**
395
+ * Create multiple documents
396
+ *
397
+ * @param {string} index
398
+ * @param {string} collection
399
+ * @param {Object[]} documents
400
+ * @param {Object} [opts] -- see Elasticsearch "mCreate" options
401
+ * @returns {Promise.<{ items, errors }>
402
+ */
403
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:mCreate`, (index, collection, documents, opts) => {
404
+ this.cache.assertCollectionExists(index, collection);
405
+ return this.client.mCreate(index, collection, documents, opts);
406
+ });
407
+ /**
408
+ * Create or replace multiple documents
409
+ *
410
+ * @param {string} index
411
+ * @param {string} collection
412
+ * @param {Object[]} documents
413
+ * @param {Object} [opts] -- see Elasticsearch "mCreateOrReplace" options
414
+ * @returns {Promise.<{ items, errors }>
415
+ */
416
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:mCreateOrReplace`, (index, collection, documents, opts) => {
417
+ this.cache.assertCollectionExists(index, collection);
418
+ return this.client.mCreateOrReplace(index, collection, documents, opts);
419
+ });
420
+ /**
421
+ * Delete multiple documents
422
+ *
423
+ * @param {string} index
424
+ * @param {string} collection
425
+ * @param {string[]} ids
426
+ * @param {Object} [opts] -- see Elasticsearch "mDelete" options
427
+ * @returns {Promise.<{ documents, errors }>
428
+ */
429
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:mDelete`, (index, collection, ids, opts) => {
430
+ this.cache.assertCollectionExists(index, collection);
431
+ return this.client.mDelete(index, collection, ids, opts);
432
+ });
433
+ /**
434
+ * Replace multiple documents
435
+ *
436
+ * @param {string} index
437
+ * @param {string} collection
438
+ * @param {Object[]} documents
439
+ * @param {Object} [opts] -- see Elasticsearch "mReplace" options
440
+ * @returns {Promise.<{ items, errors }>
441
+ */
442
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:mReplace`, (index, collection, documents, opts) => {
443
+ this.cache.assertCollectionExists(index, collection);
444
+ return this.client.mReplace(index, collection, documents, opts);
445
+ });
446
+ /**
447
+ * Update multiple documents
448
+ *
449
+ * @param {string} index
450
+ * @param {string} collection
451
+ * @param {Object[]} documents
452
+ * @param {Object} [opts] -- see Elasticsearch "mUpdate" options
453
+ * @returns {Promise.<{ items, errors }>
454
+ */
455
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:mUpdate`, (index, collection, documents, opts) => {
456
+ this.cache.assertCollectionExists(index, collection);
457
+ return this.client.mUpdate(index, collection, documents, opts);
458
+ });
459
+ /**
460
+ * Applies a partial update to documents provided in the body.
461
+ * If some of the documents don't already exist, they will be created.
462
+ *
463
+ * @param {string} index
464
+ * @param {string} collection
465
+ * @param {Object[]} documents
466
+ * @param {Object} [opts] -- see Elasticsearch "mUpsert" options
467
+ * @returns {Promise.<{ items, errors }>
468
+ */
469
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:mUpsert`, (index, collection, documents, opts) => {
470
+ this.cache.assertCollectionExists(index, collection);
471
+ return this.client.mUpsert(index, collection, documents, opts);
472
+ });
473
+ /**
474
+ * Apply the provided callback to all documents matching a search query
475
+ *
476
+ * @param {string} index
477
+ * @param {string} collection
478
+ * @param {Object} query -- search query (ES format)
479
+ * @param {Function} callback -- callback applied to matched documents
480
+ * @param {Object} [opts] -- see Elasticsearch "mExecute" options
481
+ * @returns {Promise.<any[]>} Array of results returned by the callback
482
+ */
483
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:mExecute`, (index, collection, query, callback, opts) => {
484
+ this.cache.assertCollectionExists(index, collection);
485
+ return this.client.mExecute(index, collection, query, callback, opts);
486
+ });
487
+ /**
488
+ * Get multiple documents using their ids
489
+ *
490
+ * @param {string} index
491
+ * @param {string} collection
492
+ * @param {string[]} ids
493
+ * @returns {Promise.<{ items: [ _id, _source, _version ], errors }>}
494
+ */
495
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:mGet`, (index, collection, ids) => {
496
+ this.cache.assertCollectionExists(index, collection);
497
+ return this.client.mGet(index, collection, ids);
498
+ });
499
+ /**
500
+ * Replace the content of a document
501
+ *
502
+ * @param {string} index
503
+ * @param {string} collection
504
+ * @param {string} id
505
+ * @param {Object} content -- new document content
506
+ * @param {Object} [opts] -- see Elasticsearch "replace" options
507
+ * @returns {Promise.<{ _id, _version, _source }>}
508
+ */
509
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:replace`, (index, collection, id, content, opts) => {
510
+ this.cache.assertCollectionExists(index, collection);
511
+ return this.client.replace(index, collection, id, content, opts);
512
+ });
513
+ /**
514
+ * Fetch the next page of results of a search query
515
+ *
516
+ * @param {string} scrollId
517
+ * @param {Object} [opts] -- see Elasticsearch "scroll" options
518
+ * @returns {Promise.<{ scrollId, hits, aggregations, total }>}
519
+ */
520
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:scroll`, (scrollId, opts) => this.client.scroll(scrollId, opts));
521
+ /**
522
+ * Search for documents
523
+ *
524
+ * @param {string} index
525
+ * @param {string} collection
526
+ * @param {Object} searchBody -- search query, in ES format
527
+ * @param {Object} [opts] -- see Elasticsearch "search" options
528
+ * @returns {Promise.<{ scrollId, hits, aggregations, total }>}
529
+ */
530
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:search`, (index, collection, searchBody, opts) => {
531
+ this.cache.assertCollectionExists(index, collection);
532
+ return this.client.search({ collection, index, searchBody }, opts);
533
+ });
534
+ /**
535
+ * Search for multiples documents
536
+ *
537
+ * @param {Object[]} targets
538
+ * @param {Object} searchBody -- search query, in ES format
539
+ * @param {Object} [opts] -- see Elasticsearch "search" options
540
+ * @returns {Promise.<{ scrollId, hits, aggregations, total }>}
541
+ */
542
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:multiSearch`, (targets, searchBody, opts) => {
543
+ for (const target of targets) {
544
+ for (const collection of target.collections) {
545
+ this.cache.assertCollectionExists(target.index, collection);
546
+ }
547
+ }
548
+ return this.client.search({ searchBody, targets }, opts);
549
+ });
550
+ /**
551
+ * Update a document
552
+ *
553
+ * @param {string} index
554
+ * @param {string} collection
555
+ * @param {string} id -- document unique identifier
556
+ * @param {Object} content -- partial content to update
557
+ * @param {Object} [opts] -- see Elasticsearch "update" options
558
+ * @returns {Promise.<{ _id, _version }>}
559
+ */
560
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:update`, (index, collection, id, content, opts) => {
561
+ this.cache.assertCollectionExists(index, collection);
562
+ return this.client.update(index, collection, id, content, opts);
563
+ });
564
+ /**
565
+ * Update all documents matching the search query, by applying the same
566
+ * changes to all of them.
567
+ *
568
+ * @param {string} index
569
+ * @param {string} collection
570
+ * @param {Object} query -- search query, in ES format
571
+ * @param {Object} changes -- partial changes to apply to matched documents
572
+ * @param {Object} [opts] -- see Elasticsearch "updateByQuery" options
573
+ * @returns {Promise.<{ successes: [_id, _source, _status], errors: [ document, status, reason ] }>}
574
+ */
575
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:updateByQuery`, (index, collection, query, changes, opts) => {
576
+ this.cache.assertCollectionExists(index, collection);
577
+ return this.client.updateByQuery(index, collection, query, changes, opts);
578
+ });
579
+ /**
580
+ * Directly Update all documents matching the search query (without regards
581
+ * to max documents write limit), by applying the same changes to all of them.
582
+ *
583
+ * @param {string} index
584
+ * @param {string} collection
585
+ * @param {Object} query -- search query, in ES format
586
+ * @param {Object} changes -- partial changes to apply to matched documents
587
+ * @param {Object} [opts] -- see Elasticsearch "updateByQuery" options
588
+ * @returns {Promise.<{ successes: [_id, _source, _status], errors: [ document, status, reason ] }>}
589
+ */
590
+ global.kuzzle.onAsk(`core:storage:${this.scope}:bulk:updateByQuery`, (index, collection, query, changes, opts) => {
591
+ this.cache.assertCollectionExists(index, collection);
592
+ return this.client.bulkUpdateByQuery(index, collection, query, changes, opts);
593
+ });
594
+ /**
595
+ * Applies a partial update to an existing document.
596
+ * If the document doesn't already exist, a new document is created.
597
+ *
598
+ * @param {string} index
599
+ * @param {string} collection
600
+ * @param {string} id -- document unique identifier
601
+ * @param {Object} content -- partial content to update
602
+ * @param {Object} [opts] -- see Elasticsearch "upsert" options
603
+ * @returns {Promise.<{ _id, _version }>}
604
+ */
605
+ global.kuzzle.onAsk(`core:storage:${this.scope}:document:upsert`, (index, collection, id, content, opts) => {
606
+ this.cache.assertCollectionExists(index, collection);
607
+ return this.client.upsert(index, collection, id, content, opts);
608
+ });
609
+ }
610
+ registerMappingEvents() {
611
+ /**
612
+ * Return a collection's mapping
613
+ *
614
+ * @param {string} index
615
+ * @param {string} collection
616
+ * @param {Object} [opts] -- see Elasticsearch "getMapping" options
617
+ *
618
+ * @returns {Promise.<{ dynamic, _meta, properties }>}
619
+ */
620
+ global.kuzzle.onAsk(`core:storage:${this.scope}:mappings:get`, (index, collection, opts) => {
621
+ this.cache.assertCollectionExists(index, collection);
622
+ return this.client.getMapping(index, collection, opts);
623
+ });
624
+ /**
625
+ * Import mappings as fixtures. Create non-existing indexes and collections
626
+ * in the process.
627
+ *
628
+ * @param {Object} fixtures
629
+ * @param {Object} options
630
+ * @return {Promise}
631
+ */
632
+ global.kuzzle.onAsk(`core:storage:${this.scope}:mappings:import`, (fixtures, options) => this.loadMappings(fixtures, options));
633
+ /**
634
+ * Update a collection mappings
635
+ *
636
+ * @param {string} index
637
+ * @param {string} collection
638
+ * @param {Object} mappings
639
+ * @returns {Promise.<{ dynamic, _meta, properties }>}
640
+ */
641
+ global.kuzzle.onAsk(`core:storage:${this.scope}:mappings:update`, (index, collection, mappings) => {
642
+ this.cache.assertCollectionExists(index, collection);
643
+ return this.client.updateMapping(index, collection, mappings);
644
+ });
645
+ }
646
+ /**
647
+ * Cache update operations. These events trigger neither any actual change
648
+ * in the storage layer, nor kuzzle events.
649
+ */
650
+ registerCacheEvents() {
651
+ /**
652
+ * Adds a new index to the cache
653
+ * @param {string} index
654
+ */
655
+ global.kuzzle.onAsk(`core:storage:${this.scope}:cache:addIndex`, (index) => this.cache.addIndex(index));
656
+ /**
657
+ * Adds a new collection to the cache
658
+ * @param {string} index
659
+ * @param {string} collection
660
+ */
661
+ global.kuzzle.onAsk(`core:storage:${this.scope}:cache:addCollection`, (index, collection) => this.cache.addCollection(index, collection));
662
+ /**
663
+ * Removes indexes from the cache
664
+ * @param {Array.<string>} indexes
665
+ */
666
+ global.kuzzle.onAsk(`core:storage:${this.scope}:cache:removeIndexes`, (indexes) => {
667
+ for (const index of indexes) {
668
+ this.cache.removeIndex(index);
669
+ }
670
+ });
671
+ /**
672
+ * Removes a collection from the cache
673
+ * @param {string} index
674
+ * @param {string} collection
675
+ */
676
+ global.kuzzle.onAsk(`core:storage:${this.scope}:cache:removeCollection`, (index, collection) => this.cache.removeCollection(index, collection));
677
+ }
678
+ /**
679
+ * Load database fixtures into Kuzzle
680
+ *
681
+ * @param {String} fixturesId
682
+ * @returns {Promise}
683
+ */
684
+ async loadFixtures(fixtures = {}, { refresh = "wait_for" } = {}) {
685
+ if (!isPlainObject(fixtures)) {
686
+ throw kerror.get("api", "assert", "invalid_argument", fixtures, "object");
687
+ }
688
+ for (const index of Object.keys(fixtures)) {
689
+ if (!isPlainObject(fixtures[index])) {
690
+ throw kerror.get("api", "assert", "invalid_argument", fixtures[index], "object");
691
+ }
692
+ for (const [collection, payload] of Object.entries(fixtures[index])) {
693
+ this.cache.assertCollectionExists(index, collection);
694
+ const { errors } = await this.client.import(index, collection, payload, { refresh });
695
+ if (errors.length > 0) {
696
+ throw servicesError.get("import_failed", errors);
697
+ }
698
+ }
699
+ }
700
+ }
701
+ /**
702
+ * Load database mappings into Kuzzle
703
+ *
704
+ * @param {String} mappings
705
+ * @param {String} options rawMappings (false)
706
+ * - propagate (true): notify the other nodes of the cluster
707
+ * - indexCacheOnly (false): only update the cache, don't update the database
708
+ * @returns {Promise}
709
+ */
710
+ async loadMappings(fixtures = {}, options = {
711
+ indexCacheOnly: false,
712
+ propagate: true,
713
+ rawMappings: false,
714
+ refresh: false,
715
+ }) {
716
+ if (!isPlainObject(fixtures)) {
717
+ throw kerror.get("api", "assert", "invalid_argument", fixtures, "object");
718
+ }
719
+ const mutex = new Mutex("loadMappings", { timeout: -1, ttl: 60000 });
720
+ await mutex.lock();
721
+ try {
722
+ for (const index of Object.keys(fixtures)) {
723
+ if (!isPlainObject(fixtures[index])) {
724
+ throw kerror.get("api", "assert", "invalid_argument", fixtures[index], "object");
725
+ }
726
+ for (const [collection, mappings] of Object.entries(fixtures[index])) {
727
+ try {
728
+ await this.createIndex(index, {
729
+ indexCacheOnly: options.indexCacheOnly,
730
+ propagate: options.propagate,
731
+ });
732
+ }
733
+ catch (error) {
734
+ // @cluster: ignore if the index already exists to prevent race
735
+ // conditions with index cache propagation
736
+ if (error.id !== "services.storage.index_already_exists") {
737
+ throw error;
738
+ }
739
+ }
740
+ await this.createCollection(index, collection, options.rawMappings ? { mappings } : mappings, {
741
+ indexCacheOnly: options.indexCacheOnly,
742
+ propagate: options.propagate,
743
+ });
744
+ if (options.refresh && !options.indexCacheOnly) {
745
+ await this.client.refreshCollection(index, collection);
746
+ }
747
+ }
748
+ }
749
+ }
750
+ finally {
751
+ await mutex.unlock();
752
+ }
753
+ }
754
+ }
755
+ module.exports = ClientAdapter;
756
+ //# sourceMappingURL=clientAdapter.js.map