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,1139 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ /*
30
+ * Kuzzle, a backend software, self-hostable and ready to use
31
+ * to power modern apps
32
+ *
33
+ * Copyright 2015-2022 Kuzzle
34
+ * mailto: support AT kuzzle.io
35
+ * website: http://kuzzle.io
36
+ *
37
+ * Licensed under the Apache License, Version 2.0 (the "License");
38
+ * you may not use this file except in compliance with the License.
39
+ * You may obtain a copy of the License at
40
+ *
41
+ * https://www.apache.org/licenses/LICENSE-2.0
42
+ *
43
+ * Unless required by applicable law or agreed to in writing, software
44
+ * distributed under the License is distributed on an "AS IS" BASIS,
45
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
46
+ * See the License for the specific language governing permissions and
47
+ * limitations under the License.
48
+ */
49
+ const bluebird_1 = __importDefault(require("bluebird"));
50
+ const lodash_1 = require("lodash");
51
+ const uuid_1 = require("uuid");
52
+ const errors_1 = require("../../kerror/errors");
53
+ const request_1 = require("../request");
54
+ const baseController_1 = require("./baseController");
55
+ const formatProcessing_1 = __importDefault(require("../../core/auth/formatProcessing"));
56
+ const apiKey_1 = __importDefault(require("../../model/storage/apiKey"));
57
+ const kerror = __importStar(require("../../kerror"));
58
+ const safeObject_1 = require("../../util/safeObject");
59
+ const name_generator_1 = require("../../util/name-generator");
60
+ /**
61
+ * @class SecurityController
62
+ */
63
+ class SecurityController extends baseController_1.NativeController {
64
+ static userOrSdk(userId) {
65
+ return userId === null ? "EmbeddedSDK" : `User "${userId}"`;
66
+ }
67
+ constructor() {
68
+ super([
69
+ "checkRights",
70
+ "createApiKey",
71
+ "createCredentials",
72
+ "createFirstAdmin",
73
+ "createOrReplaceProfile",
74
+ "createOrReplaceRole",
75
+ "createProfile",
76
+ "createRestrictedUser",
77
+ "createRole",
78
+ "createUser",
79
+ "deleteApiKey",
80
+ "deleteCredentials",
81
+ "deleteProfile",
82
+ "deleteRole",
83
+ "deleteUser",
84
+ "getAllCredentialFields",
85
+ "getCredentialFields",
86
+ "getCredentials",
87
+ "getCredentialsById",
88
+ "getProfile",
89
+ "getProfileMapping",
90
+ "getProfileRights",
91
+ "getRole",
92
+ "getRoleMapping",
93
+ "getUser",
94
+ "getUserMapping",
95
+ "getUserRights",
96
+ "getUserStrategies",
97
+ "hasCredentials",
98
+ "mDeleteProfiles",
99
+ "mDeleteRoles",
100
+ "mDeleteUsers",
101
+ "mGetProfiles",
102
+ "mGetRoles",
103
+ "mGetUsers",
104
+ "refresh",
105
+ "replaceUser",
106
+ "revokeTokens",
107
+ "scrollProfiles",
108
+ "scrollUsers",
109
+ "searchApiKeys",
110
+ "searchProfiles",
111
+ "searchRoles",
112
+ "searchUsers",
113
+ "searchUsersByCredentials",
114
+ "updateCredentials",
115
+ "updateProfile",
116
+ "updateProfileMapping",
117
+ "updateRole",
118
+ "updateRoleMapping",
119
+ "updateUser",
120
+ "updateUserMapping",
121
+ "upsertUser",
122
+ "validateCredentials",
123
+ ]);
124
+ this.anonymousId = null;
125
+ this.subdomain = "security";
126
+ this.securityCollections = ["users", "profiles", "roles"];
127
+ // @deprecated - helper, will be loosely coupled in the near future
128
+ this.getStrategyMethod =
129
+ global.kuzzle.pluginsManager.getStrategyMethod.bind(global.kuzzle.pluginsManager);
130
+ this.logger = global.kuzzle.log.child("api:controllers:security");
131
+ }
132
+ /**
133
+ * Checks if an API action can be executed by a user
134
+ */
135
+ async checkRights(request) {
136
+ const userId = request.getString("userId");
137
+ const requestPayload = request.getBody();
138
+ if (typeof requestPayload.controller !== "string") {
139
+ throw kerror.get("api", "assert", "missing_argument", "body.controller");
140
+ }
141
+ if (typeof requestPayload.action !== "string") {
142
+ throw kerror.get("api", "assert", "missing_argument", "body.action");
143
+ }
144
+ const user = await global.kuzzle.ask("core:security:user:get", userId);
145
+ const allowed = await user.isActionAllowed(new request_1.Request(requestPayload));
146
+ return {
147
+ allowed,
148
+ };
149
+ }
150
+ /**
151
+ * Creates a new API key for a user
152
+ */
153
+ async createApiKey(request) {
154
+ const expiresIn = request.input.args.expiresIn || -1;
155
+ const refresh = request.getRefresh("wait_for");
156
+ const userId = request.getString("userId");
157
+ const apiKeyId = request.getId({ ifMissing: "generate" });
158
+ const description = request.getBodyString("description");
159
+ const user = await this.ask("core:security:user:get", userId);
160
+ const creatorId = request.getKuid();
161
+ const apiKey = await apiKey_1.default.create(user, expiresIn, description, {
162
+ apiKeyId,
163
+ bypassMaxTTL: true,
164
+ creatorId,
165
+ refresh,
166
+ });
167
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(creatorId)} applied action "${request.input.action}" on user "${userId}."`);
168
+ return apiKey.serialize({ includeToken: true });
169
+ }
170
+ /**
171
+ * Search in an user API keys
172
+ */
173
+ async searchApiKeys(request) {
174
+ const userId = request.getString("userId");
175
+ let query = request.getBody({});
176
+ const { from, size, scrollTTL } = request.getSearchParams();
177
+ const lang = request.getLangParam();
178
+ if (lang === "koncorde") {
179
+ query = await this.translateKoncorde(query);
180
+ }
181
+ const searchBody = {
182
+ query: {
183
+ bool: {
184
+ filter: { bool: { must: { term: { userId } } } },
185
+ must: (0, lodash_1.isEmpty)(query) ? { match_all: {} } : query,
186
+ },
187
+ },
188
+ };
189
+ const apiKeys = await apiKey_1.default.search(searchBody, {
190
+ from,
191
+ scroll: scrollTTL,
192
+ size,
193
+ });
194
+ return {
195
+ hits: apiKeys.map((apiKey) => apiKey.serialize()),
196
+ total: apiKeys.length,
197
+ };
198
+ }
199
+ /**
200
+ * Deletes an user API key
201
+ */
202
+ async deleteApiKey(request) {
203
+ const userId = request.getString("userId");
204
+ const apiKeyId = request.getId();
205
+ const refresh = request.getRefresh("wait_for");
206
+ const apiKey = await apiKey_1.default.load(userId, apiKeyId);
207
+ await apiKey.delete({ refresh });
208
+ return {
209
+ _id: apiKeyId,
210
+ };
211
+ }
212
+ /**
213
+ * Get the role mapping
214
+ *
215
+ * @returns {Promise}
216
+ */
217
+ async getRoleMapping() {
218
+ const { properties } = await global.kuzzle.internalIndex.getMapping("roles");
219
+ return { mapping: properties };
220
+ }
221
+ /**
222
+ * Update the roles collection mapping
223
+ * @param {Request} request
224
+ * @returns {Promise}
225
+ */
226
+ async updateRoleMapping(request) {
227
+ const mappings = request.getBody();
228
+ return global.kuzzle.internalIndex.updateMapping("roles", mappings);
229
+ }
230
+ /**
231
+ * Get the profile mapping
232
+ *
233
+ * @returns {Promise}
234
+ */
235
+ async getProfileMapping() {
236
+ const { properties } = await global.kuzzle.internalIndex.getMapping("profiles");
237
+ return { mapping: properties };
238
+ }
239
+ /**
240
+ * Update the profiles collection mapping
241
+
242
+ * @param {Request} request
243
+ * @returns {Promise}
244
+ */
245
+ updateProfileMapping(request) {
246
+ const mappings = request.getBody();
247
+ return global.kuzzle.internalIndex.updateMapping("profiles", mappings);
248
+ }
249
+ /**
250
+ * Get the user mapping
251
+ *
252
+ * @returns {Promise}
253
+ */
254
+ async getUserMapping() {
255
+ const { properties } = await global.kuzzle.internalIndex.getMapping("users");
256
+ return { mapping: properties };
257
+ }
258
+ /**
259
+ * Update the users collection mapping
260
+
261
+ * @param {Request} request
262
+ * @returns {Promise}
263
+ */
264
+ async updateUserMapping(request) {
265
+ const mappings = request.getBody();
266
+ return global.kuzzle.internalIndex.updateMapping("users", mappings);
267
+ }
268
+ /**
269
+ * Get a specific role according to the given id
270
+ *
271
+ * @param {Request} request
272
+ * @returns {Promise<Object>}
273
+ */
274
+ async getRole(request) {
275
+ const id = request.getId();
276
+ const role = await this.ask("core:security:role:get", id);
277
+ return formatProcessing_1.default.serializeRole(role);
278
+ }
279
+ /**
280
+ * Get specific roles according to given ids
281
+ *
282
+ * @param {Request} request
283
+ * @returns {Promise<Object>}
284
+ */
285
+ async mGetRoles(request) {
286
+ const ids = request.getBodyArray("ids");
287
+ const roles = await this.ask("core:security:role:mGet", ids);
288
+ return { hits: roles.map(formatProcessing_1.default.serializeRole) };
289
+ }
290
+ /**
291
+ * Refresh a security collection (users, roles, profiles)
292
+ *
293
+ * @param {Request} request
294
+ * @returns {Promise}
295
+ */
296
+ async refresh(request) {
297
+ const collection = request.getCollection();
298
+ if (!this.securityCollections.includes(collection)) {
299
+ throw kerror.get("api", "assert", "unexpected_argument", collection, this.securityCollections);
300
+ }
301
+ await global.kuzzle.internalIndex.refreshCollection(collection);
302
+ return null;
303
+ }
304
+ /**
305
+ * Search for roles
306
+ *
307
+ * @param {Request} request
308
+ * @returns {Promise<Object>}
309
+ */
310
+ async searchRoles(request) {
311
+ const from = request.getInteger("from", 0);
312
+ const size = this._getSearchPageSize(request);
313
+ const lang = request.getLangParam();
314
+ const body = request.getBody({});
315
+ if (body.controllers && body.query) {
316
+ throw new errors_1.BadRequestError('You cannot specifify both "controllers" and "query". Prefer the usage of "query" property with a search query.');
317
+ }
318
+ if (body.controllers) {
319
+ // Type checking
320
+ request.getBodyArray("controllers");
321
+ }
322
+ if (lang === "koncorde") {
323
+ body.query = await this.translateKoncorde(body.query || {});
324
+ }
325
+ const response = await this.ask("core:security:role:search", body, {
326
+ from,
327
+ size,
328
+ });
329
+ response.hits = response.hits.map(formatProcessing_1.default.serializeRole);
330
+ return response;
331
+ }
332
+ /**
333
+ * Create or replace a Role
334
+ *
335
+ * @param {Request} request
336
+ * @returns {Promise<Object>}
337
+ */
338
+ async createOrReplaceRole(request) {
339
+ const id = request.getId();
340
+ const body = request.getBody();
341
+ const userId = request.getKuid();
342
+ const role = await this.ask("core:security:role:createOrReplace", id, body, {
343
+ force: request.getBoolean("force"),
344
+ refresh: request.getRefresh("wait_for"),
345
+ userId,
346
+ });
347
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(userId)} applied action "${request.input.action}" on role "${role._id}."`);
348
+ return formatProcessing_1.default.serializeRole(role);
349
+ }
350
+ /**
351
+ * Create a Role
352
+ *
353
+ * @param {Request} request
354
+ * @returns {Promise<Object>}
355
+ */
356
+ async createRole(request) {
357
+ const id = request.getId();
358
+ const body = request.getBody();
359
+ const userId = request.getKuid();
360
+ const role = await this.ask("core:security:role:create", id, body, {
361
+ force: request.getBoolean("force"),
362
+ refresh: request.getRefresh("wait_for"),
363
+ userId,
364
+ });
365
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(userId)} applied action "${request.input.action}" on role "${role._id}."`);
366
+ return formatProcessing_1.default.serializeRole(role);
367
+ }
368
+ /**
369
+ * Remove a role according to the given id
370
+ *
371
+ * @param {Request} request
372
+ * @returns {Promise<Object>}
373
+ */
374
+ async deleteRole(request) {
375
+ const id = request.getId();
376
+ await this.ask("core:security:role:delete", id, {
377
+ refresh: request.getRefresh("wait_for"),
378
+ });
379
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(request.getKuid())} applied action "${request.input.action} on role "${id}."`);
380
+ // @todo This avoids a breaking change... but we should really return
381
+ // an acknowledgment.
382
+ return { _id: id };
383
+ }
384
+ /**
385
+ * Get a specific profile according to the given id
386
+ *
387
+ * @param {Request} request
388
+ * @returns {Promise<Object>}
389
+ */
390
+ async getProfile(request) {
391
+ const id = request.getId();
392
+ const profile = await this.ask("core:security:profile:get", id);
393
+ return formatProcessing_1.default.serializeProfile(profile);
394
+ }
395
+ /**
396
+ * Get specific profiles according to given ids
397
+ *
398
+ * @param {Request} request
399
+ * @returns {Promise<Object>}
400
+ */
401
+ async mGetProfiles(request) {
402
+ const ids = request.getBodyArray("ids");
403
+ const profiles = await this.ask("core:security:profile:mGet", ids);
404
+ // @todo - should return an array of profiles directly, this is not a
405
+ // search route...
406
+ return {
407
+ hits: profiles.map((profile) => formatProcessing_1.default.serializeProfile(profile)),
408
+ };
409
+ }
410
+ /**
411
+ * Create or replace a Profile
412
+ *
413
+ * @param {Request} request
414
+ * @returns {Promise<Object>}
415
+ */
416
+ async createOrReplaceProfile(request) {
417
+ const id = request.getId();
418
+ const content = request.getBody();
419
+ const userId = request.getKuid();
420
+ // Assert: must have a "policies" array
421
+ request.getBodyArray("policies");
422
+ const profile = await this.ask("core:security:profile:createOrReplace", id, content, {
423
+ refresh: request.getRefresh("wait_for"),
424
+ strict: request.getBoolean("strict"),
425
+ userId,
426
+ });
427
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(userId)} applied action "${request.input.action}" on profile "${profile._id}."`);
428
+ return formatProcessing_1.default.serializeProfile(profile);
429
+ }
430
+ /**
431
+ * Create a Profile
432
+ *
433
+ * @param {Request} request
434
+ * @returns {Promise<Object>}
435
+ */
436
+ async createProfile(request) {
437
+ const id = request.getId();
438
+ const content = request.getBody();
439
+ const userId = request.getKuid();
440
+ // Assert: must have a "policies" array
441
+ request.getBodyArray("policies");
442
+ const profile = await this.ask("core:security:profile:create", id, content, {
443
+ refresh: request.getRefresh("wait_for"),
444
+ strict: request.getBoolean("strict"),
445
+ userId,
446
+ });
447
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(userId)} applied action "${request.input.action}" on profile "${profile._id}."`);
448
+ return formatProcessing_1.default.serializeProfile(profile);
449
+ }
450
+ /**
451
+ * Deletes a profile
452
+ *
453
+ * @param {Request} request
454
+ * @returns {Promise<Object>}
455
+ */
456
+ async deleteProfile(request) {
457
+ const id = request.getId();
458
+ const userId = request.getKuid();
459
+ const options = {
460
+ onAssignedUsers: request.getString("onAssignedUsers", "fail"),
461
+ refresh: request.getRefresh("wait_for"),
462
+ userId,
463
+ };
464
+ await this.ask("core:security:profile:delete", id, options);
465
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(userId)} applied action "${request.input.action}" on profile "${id}."`);
466
+ // @todo - replace by an acknowledgement
467
+ return { _id: id };
468
+ }
469
+ /**
470
+ * Search for profiles
471
+ *
472
+ * @param {Request} request
473
+ * @returns {Promise<Object>}
474
+ */
475
+ async searchProfiles(request) {
476
+ const size = this._getSearchPageSize(request);
477
+ const { from, scrollTTL, searchBody } = request.getSearchParams();
478
+ const lang = request.getLangParam();
479
+ const body = request.getBody({});
480
+ if (body.roles && body.query) {
481
+ throw new errors_1.BadRequestError('You cannot specifify both "roles" and "query". Prefer the usage of "query" property with a search query.');
482
+ }
483
+ if (body.roles) {
484
+ const roles = request.getBodyArray("roles");
485
+ request.addDeprecation("auto-version", 'Usage of the "roles" property is deprecated. Prefer the usage of "query" property with a search query.');
486
+ if (roles.length > 0) {
487
+ searchBody.query = { terms: { "policies.roleId": roles } };
488
+ }
489
+ else {
490
+ searchBody.query = { match_all: {} };
491
+ }
492
+ delete body.roles;
493
+ }
494
+ if (lang === "koncorde") {
495
+ searchBody.query = await this.translateKoncorde(searchBody.query || {});
496
+ }
497
+ const response = await this.ask("core:security:profile:search", searchBody, {
498
+ from,
499
+ scroll: scrollTTL,
500
+ size,
501
+ });
502
+ response.hits = response.hits.map(formatProcessing_1.default.serializeProfile);
503
+ return response;
504
+ }
505
+ /**
506
+ * Given a user id, returns the matching User object
507
+ *
508
+ * @param {Request} request
509
+ * @returns {Promise<Object>}
510
+ */
511
+ async getUser(request) {
512
+ const id = request.getId();
513
+ const user = await this.ask("core:security:user:get", id);
514
+ return formatProcessing_1.default.serializeUser(user);
515
+ }
516
+ /**
517
+ * Get specific users according to given ids
518
+ *
519
+ * @param {Request} request
520
+ * @returns {Promise.<Object>}
521
+ */
522
+ async mGetUsers(request) {
523
+ let ids;
524
+ if (request.input.body &&
525
+ request.input.body.ids &&
526
+ Object.keys(request.input.body.ids).length) {
527
+ ids = request.getBodyArray("ids");
528
+ }
529
+ else {
530
+ // @deprecated Should be replaced with request.getArray('ids')
531
+ ids = request.getArrayLegacy("ids");
532
+ }
533
+ const users = await this.ask("core:security:user:mGet", ids);
534
+ return { hits: users.map((user) => formatProcessing_1.default.serializeUser(user)) };
535
+ }
536
+ /**
537
+ * Given a profile id, returns the matching profile's rights as an array.
538
+ *
539
+ * @param {Request} request
540
+ * @returns {Promise<Object>}
541
+ */
542
+ async getProfileRights(request) {
543
+ const id = request.getId();
544
+ const profile = await this.ask("core:security:profile:get", id);
545
+ const rights = await profile.getRights();
546
+ const hits = Object.keys(rights).reduce((array, item) => array.concat(rights[item]), []);
547
+ return {
548
+ hits,
549
+ total: hits.length,
550
+ };
551
+ }
552
+ /**
553
+ * Given a user id, returns the matching user's rights as an array.
554
+ *
555
+ * @param {Request} request
556
+ * @returns {Promise<Object>}
557
+ */
558
+ async getUserRights(request) {
559
+ const id = request.getId();
560
+ const user = await this.ask("core:security:user:get", id);
561
+ const rights = await user.getRights();
562
+ const hits = Object.keys(rights).reduce((array, item) => array.concat(rights[item]), []);
563
+ return {
564
+ hits,
565
+ total: hits.length,
566
+ };
567
+ }
568
+ /**
569
+ * Given a user id, returns the matching user's strategies as an array.
570
+ *
571
+ * @param {Request} request
572
+ * @returns {Promise<Object>}
573
+ */
574
+ async getUserStrategies(request) {
575
+ const userId = request.getId();
576
+ const checkPromises = [];
577
+ // Throws if the user doesn't exist
578
+ await this.ask("core:security:user:get", userId);
579
+ if (this.anonymousId === userId) {
580
+ checkPromises.push(bluebird_1.default.resolve(null));
581
+ }
582
+ else {
583
+ const availableStrategies = global.kuzzle.pluginsManager.listStrategies();
584
+ for (const strategy of availableStrategies) {
585
+ const existMethod = this.getStrategyMethod(strategy, "exists");
586
+ checkPromises.push(existMethod(request, userId, strategy).then((exists) => exists ? strategy : null));
587
+ }
588
+ }
589
+ const strategies = await bluebird_1.default.all(checkPromises).filter((item) => item !== null);
590
+ return {
591
+ strategies,
592
+ total: strategies.length,
593
+ };
594
+ }
595
+ /**
596
+ * Returns the User objects matching the given query
597
+ *
598
+ * @param {Request} request
599
+ * @returns {Promise<Object>}
600
+ */
601
+ async searchUsers(request) {
602
+ const size = this._getSearchPageSize(request);
603
+ const { from, scrollTTL, searchBody } = request.getSearchParams();
604
+ const lang = request.getLangParam();
605
+ if (lang === "koncorde") {
606
+ searchBody.query = await this.translateKoncorde(searchBody.query);
607
+ }
608
+ const response = await this.ask("core:security:user:search", searchBody, {
609
+ from,
610
+ scroll: scrollTTL,
611
+ size,
612
+ });
613
+ return {
614
+ hits: response.hits.map(formatProcessing_1.default.serializeUser),
615
+ scrollId: response.scrollId,
616
+ total: response.total,
617
+ };
618
+ }
619
+ /**
620
+ * Given a credentials related search query, returns matched users' kuid.
621
+ *
622
+ * @param {Request} request
623
+ * @returns {Promise<Object>}
624
+ */
625
+ async searchUsersByCredentials(request) {
626
+ const strategy = request.getString("strategy");
627
+ const lang = request.getLangParam();
628
+ const { from, size, searchBody } = request.getSearchParams();
629
+ this.assertIsStrategyRegistered(strategy);
630
+ const searchMethod = this.getStrategyMethod(strategy, "search");
631
+ if (!searchMethod) {
632
+ throw kerror.get("plugin", "strategy", "missing_optional_method", "search", strategy);
633
+ }
634
+ if (lang === "koncorde") {
635
+ searchBody.query = await this.translateKoncorde(searchBody.query || {});
636
+ }
637
+ this.assertNotExceedMaxFetch(size - from);
638
+ return searchMethod(searchBody, { from, size });
639
+ }
640
+ /**
641
+ * Deletes a user from Kuzzle
642
+ *
643
+ * @param {Request} request
644
+ * @returns {Promise<Object>}
645
+ */
646
+ async deleteUser(request) {
647
+ const id = request.getId();
648
+ const options = { refresh: request.getRefresh("wait_for") };
649
+ await this.ask("core:security:user:delete", id, options);
650
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(request.getKuid())} applied action "${request.input.action}" on user "${id}."`);
651
+ return { _id: id };
652
+ }
653
+ /**
654
+ * Creates a new User object in Kuzzle's database layer
655
+ *
656
+ * @param {Request} request
657
+ * @returns {Promise<Object>}
658
+ */
659
+ async createUser(request) {
660
+ const content = request.getBodyObject("content");
661
+ const profileIds = request.getBodyArray("content.profileIds");
662
+ const humanReadableId = request.getString("kuid", "human") !== "uuid";
663
+ return this._persistUser(request, profileIds, content, { humanReadableId });
664
+ }
665
+ /**
666
+ * Creates a new User object in Kuzzle's database layer and applies restricted profileIds
667
+ *
668
+ * @param {Request} request
669
+ * @returns {Promise<Object>}
670
+ */
671
+ async createRestrictedUser(request) {
672
+ const content = request.getBodyObject("content", {});
673
+ const humanReadableId = request.getString("kuid", "human") !== "uuid";
674
+ if ((0, safeObject_1.has)(content, "profileIds")) {
675
+ throw kerror.get("api", "assert", "forbidden_argument", "body.content.profileIds");
676
+ }
677
+ return this._persistUser(request, global.kuzzle.config.security.restrictedProfileIds, content, { humanReadableId });
678
+ }
679
+ /**
680
+ * Updates an existing User
681
+ *
682
+ * @param {Request} request
683
+ * @returns {Promise<Object>}
684
+ */
685
+ async updateUser(request) {
686
+ const id = request.getId();
687
+ const content = request.getBody();
688
+ const userId = request.getKuid();
689
+ const profileIds = (0, lodash_1.isNil)(content.profileIds)
690
+ ? null
691
+ : request.getBodyArray("profileIds");
692
+ return this._changeUser(request, id, content, userId, profileIds);
693
+ }
694
+ /**
695
+ * Applies a partial update to an existing user.
696
+ * If the user doesn't already exist, a new user is created.
697
+ *
698
+ * @param {Request} request
699
+ * @returns {Promise}
700
+ */
701
+ async upsertUser(request) {
702
+ const id = request.getId();
703
+ const content = request.getBodyObject("content");
704
+ const userId = request.getKuid();
705
+ const profileIds = request.getBodyArray("content.profileIds");
706
+ const defaultValues = request.getBodyObject("default", {});
707
+ try {
708
+ return await this._changeUser(request, id, content, userId, profileIds);
709
+ }
710
+ catch (error) {
711
+ if (error.id && error.id === "security.user.not_found") {
712
+ const creatingContent = {
713
+ ...defaultValues,
714
+ ...content, // Order important, content erase default duplicates
715
+ };
716
+ return this._persistUser(request, profileIds, creatingContent);
717
+ }
718
+ throw error;
719
+ }
720
+ }
721
+ /**
722
+ * Replaces an existing User
723
+ *
724
+ * @param {Request} request
725
+ * @returns {Promise<Object>}
726
+ */
727
+ async replaceUser(request) {
728
+ const id = request.getId();
729
+ const content = request.getBody();
730
+ const profileIds = request.getBodyArray("profileIds");
731
+ const userId = request.getKuid();
732
+ const user = await this.ask("core:security:user:replace", id, profileIds, content, { refresh: request.getRefresh("wait_for"), userId });
733
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(userId)} applied action "${request.input.action}" on user "${id}."`);
734
+ return formatProcessing_1.default.serializeUser(user);
735
+ }
736
+ /**
737
+ * Updates an existing profile
738
+ *
739
+ * @param {Request} request
740
+ * @returns {Promise<Object>}
741
+ */
742
+ async updateProfile(request) {
743
+ const id = request.getId();
744
+ const body = request.getBody();
745
+ const userId = request.getKuid();
746
+ const updated = await this.ask("core:security:profile:update", id, body, {
747
+ refresh: request.getRefresh("wait_for"),
748
+ retryOnConflict: request.getInteger("retryOnConflict", 10),
749
+ strict: request.getBoolean("strict"),
750
+ userId,
751
+ });
752
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(userId)} applied action "${request.input.action}" on profile "${id}."`);
753
+ return formatProcessing_1.default.serializeProfile(updated);
754
+ }
755
+ /**
756
+ * Updates an existing role
757
+ *
758
+ * @param {Request} request
759
+ * @returns {Promise<Object>}
760
+ */
761
+ async updateRole(request) {
762
+ const id = request.getId();
763
+ const body = request.getBody();
764
+ const userId = request.getKuid();
765
+ const updated = await this.ask("core:security:role:update", id, body, {
766
+ force: request.getBoolean("force"),
767
+ refresh: request.getRefresh("wait_for"),
768
+ retryOnConflict: request.getInteger("retryOnConflict", 10),
769
+ userId,
770
+ });
771
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(userId)} applied action "${request.input.action}" on role "${id}."`);
772
+ return formatProcessing_1.default.serializeRole(updated);
773
+ }
774
+ /**
775
+ * Creates the first admin user if it does not already exist
776
+ *
777
+ * @param {Request} request
778
+ * @returns {Promise<Object>}
779
+ */
780
+ async createFirstAdmin(request) {
781
+ const adminExists = await global.kuzzle.ask("core:security:user:admin:exist");
782
+ if (adminExists) {
783
+ throw kerror.get("api", "process", "admin_exists");
784
+ }
785
+ const userId = request.getKuid();
786
+ const content = request.getBodyObject("content", {});
787
+ const reset = request.getBoolean("reset");
788
+ const humanReadableId = request.getString("kuid", "human") !== "uuid";
789
+ if ((0, safeObject_1.has)(content, "profileIds")) {
790
+ throw kerror.get("api", "assert", "forbidden_argument", "body.content.profileIds");
791
+ }
792
+ const user = await this._persistUser(request, ["admin"], content, {
793
+ humanReadableId,
794
+ });
795
+ if (reset) {
796
+ for (const type of ["role", "profile"]) {
797
+ await bluebird_1.default.map(Object.entries(global.kuzzle.config.security.standard[`${type}s`]), ([name, value]) => this.ask(`core:security:${type}:createOrReplace`, name, value, {
798
+ refresh: "wait_for",
799
+ userId,
800
+ }));
801
+ }
802
+ }
803
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(userId)} applied action "${request.input.action}".`);
804
+ return user;
805
+ }
806
+ /**
807
+ * Deletes multiple profiles
808
+ *
809
+ * @param {Request} request
810
+ * @returns {Promise<Object>}
811
+ */
812
+ mDeleteProfiles(request) {
813
+ return this._mDelete("profile", request);
814
+ }
815
+ /**
816
+ * Deletes multiple roles
817
+ *
818
+ * @param {Request} request
819
+ * @returns {Promise<Object>}
820
+ */
821
+ mDeleteRoles(request) {
822
+ return this._mDelete("role", request);
823
+ }
824
+ /**
825
+ * Deletes multiple users
826
+ *
827
+ * @param {Request} request
828
+ * @returns {Promise<Object>}
829
+ */
830
+ mDeleteUsers(request) {
831
+ return this._mDelete("user", request);
832
+ }
833
+ /**
834
+ * Scroll a paginated users search result
835
+ *
836
+ * @param {Request} request
837
+ * @returns {Promise<Object>}
838
+ */
839
+ async scrollUsers(request) {
840
+ const id = request.getString("scrollId");
841
+ const ttl = request.getScrollTTLParam();
842
+ const response = await this.ask("core:security:user:scroll", id, ttl);
843
+ response.hits = response.hits.map(formatProcessing_1.default.serializeUser);
844
+ return response;
845
+ }
846
+ /**
847
+ * Scroll a paginated profiles search result
848
+ *
849
+ * @param {Request} request
850
+ * @returns {Promise<Object>}
851
+ */
852
+ async scrollProfiles(request) {
853
+ const id = request.getString("scrollId");
854
+ const ttl = request.getScrollTTLParam();
855
+ const response = await this.ask("core:security:profile:scroll", id, ttl);
856
+ response.hits = response.hits.map(formatProcessing_1.default.serializeProfile);
857
+ return response;
858
+ }
859
+ /**
860
+ * @param {Request} request
861
+ * @returns {Promise<Object>}
862
+ */
863
+ async createCredentials(request) {
864
+ const id = request.getId();
865
+ const body = request.getBody();
866
+ const strategy = request.getString("strategy");
867
+ this.assertIsStrategyRegistered(strategy);
868
+ // Throws if the user doesn't exist
869
+ await this.ask("core:security:user:get", id);
870
+ const validateMethod = this.getStrategyMethod(strategy, "validate");
871
+ await validateMethod(request, body, id, strategy, false);
872
+ const createMethod = this.getStrategyMethod(strategy, "create");
873
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(request.getKuid())} applied action "${request.input.action}" on user "${id}."`);
874
+ return createMethod(request, body, id, strategy);
875
+ }
876
+ /**
877
+ * @param {Request} request
878
+ * @returns {Promise<Object>}
879
+ */
880
+ async updateCredentials(request) {
881
+ const id = request.getId();
882
+ const body = request.getBody();
883
+ const strategy = request.getString("strategy");
884
+ this.assertIsStrategyRegistered(strategy);
885
+ // Throws if the user doesn't exist
886
+ await this.ask("core:security:user:get", id);
887
+ const validateMethod = this.getStrategyMethod(strategy, "validate");
888
+ await validateMethod(request, body, id, strategy, true);
889
+ const updateMethod = this.getStrategyMethod(strategy, "update");
890
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(request.getKuid())} applied action "${request.input.action}" on user "${id}."`);
891
+ return updateMethod(request, body, id, strategy);
892
+ }
893
+ /**
894
+ * @param {Request} request
895
+ * @returns {Promise.<Object>}
896
+ */
897
+ async hasCredentials(request) {
898
+ const id = request.getId();
899
+ const strategy = request.getString("strategy");
900
+ this.assertIsStrategyRegistered(strategy);
901
+ const existsMethod = this.getStrategyMethod(strategy, "exists");
902
+ return existsMethod(request, id, strategy);
903
+ }
904
+ /**
905
+ * @param {Request} request
906
+ * @returns {Promise.<Object>}
907
+ */
908
+ async validateCredentials(request) {
909
+ const strategy = request.getString("strategy");
910
+ this.assertIsStrategyRegistered(strategy);
911
+ const validateMethod = this.getStrategyMethod(strategy, "validate");
912
+ return validateMethod(request, request.getBody(), request.getId({ ifMissing: "ignore" }), strategy, false);
913
+ }
914
+ /**
915
+ * @param {Request} request
916
+ * @returns {Promise<Object>}
917
+ */
918
+ async deleteCredentials(request) {
919
+ const id = request.getId();
920
+ const strategy = request.getString("strategy");
921
+ this.assertIsStrategyRegistered(strategy);
922
+ const deleteMethod = this.getStrategyMethod(strategy, "delete");
923
+ await deleteMethod(request, id, strategy);
924
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(request.getKuid())} applied action "${request.input.action}" on user "${id}."`);
925
+ return { acknowledged: true };
926
+ }
927
+ /**
928
+ * @param {Request} request
929
+ * @returns {Promise<Object>}
930
+ */
931
+ async getCredentials(request) {
932
+ const id = request.getId();
933
+ const strategy = request.getString("strategy");
934
+ this.assertIsStrategyRegistered(strategy);
935
+ if (global.kuzzle.pluginsManager.hasStrategyMethod(strategy, "getInfo")) {
936
+ const getInfoMethod = this.getStrategyMethod(strategy, "getInfo");
937
+ return getInfoMethod(request, id, strategy);
938
+ }
939
+ return {};
940
+ }
941
+ /**
942
+ * @param {Request} request
943
+ * @returns {Promise<Object>}
944
+ */
945
+ async getCredentialsById(request) {
946
+ const id = request.getId();
947
+ const strategy = request.getString("strategy");
948
+ this.assertIsStrategyRegistered(strategy);
949
+ if (global.kuzzle.pluginsManager.hasStrategyMethod(strategy, "getById")) {
950
+ const getByIdMethod = this.getStrategyMethod(strategy, "getById");
951
+ return getByIdMethod(request, id, strategy);
952
+ }
953
+ return {};
954
+ }
955
+ /**
956
+ * @param {Request} request
957
+ * @returns {Promise<Object>}
958
+ */
959
+ async getCredentialFields(request) {
960
+ const strategy = request.getString("strategy");
961
+ this.assertIsStrategyRegistered(strategy);
962
+ return global.kuzzle.pluginsManager.getStrategyFields(strategy);
963
+ }
964
+ /**
965
+ * @returns {Promise<Object>}
966
+ */
967
+ async getAllCredentialFields() {
968
+ const strategyFields = {};
969
+ global.kuzzle.pluginsManager.listStrategies().forEach((strategy) => {
970
+ strategyFields[strategy] =
971
+ global.kuzzle.pluginsManager.getStrategyFields(strategy);
972
+ });
973
+ return strategyFields;
974
+ }
975
+ /**
976
+ * @param {Request} request
977
+ * @returns {Promise.<null>}
978
+ */
979
+ async revokeTokens(request) {
980
+ const id = request.getId();
981
+ await this.ask("core:security:token:deleteByKuid", id);
982
+ return null;
983
+ }
984
+ /**
985
+ * @param {string.<profile|role|user>} type
986
+ * @param {Request} request
987
+ * @returns {Promise.<Array.<string>>}
988
+ * @private
989
+ */
990
+ async _mDelete(type, request) {
991
+ const ids = request.getBodyArray("ids");
992
+ const refresh = request.getRefresh("wait_for");
993
+ if (ids.length > global.kuzzle.config.limits.documentsWriteCount) {
994
+ throw kerror.get("services", "storage", "write_limit_exceeded");
995
+ }
996
+ const successes = [];
997
+ const errors = [];
998
+ await bluebird_1.default.map(ids, (id) => this.ask(`core:security:${type}:delete`, id, { refresh })
999
+ .then(() => successes.push(id))
1000
+ .catch((err) => errors.push(err)));
1001
+ if (errors.length) {
1002
+ request.setError(kerror.get("services", "storage", "incomplete_delete", errors));
1003
+ }
1004
+ if (successes.length > 1000) {
1005
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(request.getKuid())} deleted the following ${type}s: ${successes
1006
+ .slice(0, 1000)
1007
+ .join(", ")}... (${successes.length - 1000} more users deleted)."`);
1008
+ }
1009
+ else {
1010
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(request.getKuid())} deleted the following ${type}s: ${successes.join(", ")}."`);
1011
+ }
1012
+ return successes;
1013
+ }
1014
+ /**
1015
+ * @returns {Promise}
1016
+ * @private
1017
+ */
1018
+ async _changeUser(request, id, content, userId, profileIds) {
1019
+ const updated = await this.ask("core:security:user:update", id, profileIds, content, {
1020
+ refresh: request.getRefresh("wait_for"),
1021
+ retryOnConflict: request.getInteger("retryOnConflict", 10),
1022
+ userId,
1023
+ });
1024
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(userId)} applied action "${request.input.action}" on user "${id}."`);
1025
+ return formatProcessing_1.default.serializeUser(updated);
1026
+ }
1027
+ /**
1028
+ * @param {Request} request
1029
+ * @returns {Promise}
1030
+ * @private
1031
+ */
1032
+ async _persistUser(request, profileIds, content, { humanReadableId = true } = {}) {
1033
+ const credentials = request.getBodyObject("credentials", {});
1034
+ const strategies = Object.keys(credentials);
1035
+ const generator = humanReadableId
1036
+ ? () => name_generator_1.NameGenerator.generateRandomName({ prefix: "kuid" })
1037
+ : () => "kuid-" + (0, uuid_1.v4)();
1038
+ let id = "";
1039
+ let alreadyExists = false;
1040
+ // Early checks before the user is created
1041
+ do {
1042
+ let generated = false;
1043
+ id = request.getId({
1044
+ generator: () => {
1045
+ generated = true;
1046
+ return generator();
1047
+ },
1048
+ ifMissing: "generate",
1049
+ });
1050
+ for (const strategy of strategies) {
1051
+ if (!global.kuzzle.pluginsManager.listStrategies().includes(strategy)) {
1052
+ throw kerror.get("security", "credentials", "unknown_strategy", strategy);
1053
+ }
1054
+ const exists = this.getStrategyMethod(strategy, "exists");
1055
+ alreadyExists = await exists(request, id, strategy);
1056
+ if (alreadyExists) {
1057
+ if (generated) {
1058
+ break; // exit for loop, to regenerate an id
1059
+ }
1060
+ throw kerror.get("security", "credentials", "database_inconsistency", id);
1061
+ }
1062
+ }
1063
+ } while (alreadyExists);
1064
+ const user = await this.ask("core:security:user:create", id, profileIds, content, { refresh: request.getRefresh("wait_for") });
1065
+ const createdUser = formatProcessing_1.default.serializeUser(user);
1066
+ // Creating credentials
1067
+ let creationFailure = null;
1068
+ const createdStrategies = [];
1069
+ for (const strategy of strategies) {
1070
+ try {
1071
+ const validate = this.getStrategyMethod(strategy, "validate");
1072
+ await validate(request, credentials[strategy], id, strategy, false);
1073
+ }
1074
+ catch (error) {
1075
+ creationFailure = { error, validation: true };
1076
+ break;
1077
+ }
1078
+ try {
1079
+ const create = this.getStrategyMethod(strategy, "create");
1080
+ await create(request, credentials[strategy], id, strategy);
1081
+ createdStrategies.push(strategy);
1082
+ }
1083
+ catch (error) {
1084
+ creationFailure = { error, validation: false };
1085
+ break;
1086
+ }
1087
+ }
1088
+ if (creationFailure === null) {
1089
+ this.logger.info(`[SECURITY] ${SecurityController.userOrSdk(request.getKuid())} applied action "${request.input.action}" on user "${id}."`);
1090
+ return createdUser;
1091
+ }
1092
+ // Failed to create credentials: rollback created strategies
1093
+ const deletionErrors = [];
1094
+ for (const strategy of createdStrategies) {
1095
+ try {
1096
+ const del = this.getStrategyMethod(strategy, "delete");
1097
+ await del(request, id, strategy);
1098
+ }
1099
+ catch (e) {
1100
+ // We catch any error produced by delete as we want to make as much
1101
+ // cleanup as possible
1102
+ deletionErrors.push(e);
1103
+ }
1104
+ }
1105
+ try {
1106
+ await this.ask("core:security:user:delete", id, { refresh: "false" });
1107
+ }
1108
+ catch (e) {
1109
+ this.logger.error(`User rollback error: ${e}`);
1110
+ }
1111
+ if (deletionErrors.length > 0) {
1112
+ // 2 errors > we
1113
+ throw kerror.get("plugin", "runtime", "unexpected_error", [
1114
+ creationFailure.error.message,
1115
+ ...deletionErrors.map((e) => e.message),
1116
+ ].join("\n"));
1117
+ }
1118
+ if (creationFailure.error instanceof errors_1.KuzzleError) {
1119
+ throw creationFailure.error;
1120
+ }
1121
+ if (creationFailure.validation) {
1122
+ throw kerror.getFrom(creationFailure.error, "security", "credentials", "rejected", creationFailure.error.message);
1123
+ }
1124
+ throw kerror.getFrom(creationFailure.error, "plugin", "runtime", "unexpected_error", creationFailure.error.message);
1125
+ }
1126
+ /**
1127
+ * Checks if a search result can exceeds the server configured limit
1128
+ * @param {Request} request
1129
+ * @param {number} limit
1130
+ * @throws
1131
+ */
1132
+ _getSearchPageSize(request) {
1133
+ const size = request.getInteger("size", global.kuzzle.config.limits.documentsFetchCount);
1134
+ this.assertNotExceedMaxFetch(size);
1135
+ return size;
1136
+ }
1137
+ }
1138
+ exports.default = SecurityController;
1139
+ //# sourceMappingURL=securityController.js.map