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,692 @@
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 Bluebird = require("bluebird");
23
+ const _ = require("lodash");
24
+ const { Koncorde } = require("koncorde");
25
+ const debug = require("../../util/debug")("core:validation");
26
+ const kerror = require("../../kerror");
27
+ const { KuzzleError } = require("../../kerror/errors");
28
+ const { has, isPlainObject, get } = require("../../util/safeObject");
29
+ const { koncordeTest, toKoncordeIndex } = require("../../util/koncordeCompat");
30
+ const assertionError = kerror.wrap("validation", "assert");
31
+ /**
32
+ * @class Validation
33
+ */
34
+ class Validation {
35
+ constructor() {
36
+ /** @type {...ValidationType} */
37
+ this.types = {};
38
+ /** @type {string[]} */
39
+ this.typeAllowsChildren = [];
40
+ /** @type {DocumentSpecification} */
41
+ this.specification = {};
42
+ /** @type {Koncorde} */
43
+ this.koncorde = new Koncorde();
44
+ this.rawConfiguration = {};
45
+ this.logger = global.kuzzle.log.child("core:validation");
46
+ }
47
+ /**
48
+ * Walks through all types in "defaultTypesFiles" initializes all types
49
+ */
50
+ init() {
51
+ [
52
+ "anything",
53
+ "boolean",
54
+ "date",
55
+ "email",
56
+ "enum",
57
+ "geoPoint",
58
+ "geoShape",
59
+ "integer",
60
+ "ipAddress",
61
+ "numeric",
62
+ "object",
63
+ "string",
64
+ "url",
65
+ ].forEach((typeFile) => {
66
+ const TypeConstructor = require(`./types/${typeFile}`);
67
+ this.addType(new TypeConstructor());
68
+ });
69
+ }
70
+ /**
71
+ * Validates a document against its collection specifications
72
+ *
73
+ * @param {Request} request
74
+ * @param {boolean} [verbose]
75
+ * @returns {Promise.<{documentBody: *, errorMessages:string[], valid: boolean}|KuzzleRequest>}
76
+ */
77
+ async validate(request, verbose = false) {
78
+ const { _id, index, collection } = request.input.resource, collectionSpec = (isPlainObject(this.specification) &&
79
+ has(this.specification, index) &&
80
+ get(this.specification[index], collection)) ||
81
+ {};
82
+ let isUpdate = false, body = request.input.body;
83
+ if (request.input.controller === "document" &&
84
+ request.input.action === "update") {
85
+ isUpdate = true;
86
+ const document = await global.kuzzle.ask("core:storage:public:document:get", index, collection, _id);
87
+ // Avoid side effects on the request during the update validation
88
+ body = _.cloneDeep(request.input.body);
89
+ _.defaultsDeep(body, document._source);
90
+ }
91
+ const errorMessages = verbose ? {} : [];
92
+ let isValid = true;
93
+ if (collectionSpec) {
94
+ if (collectionSpec.fields && collectionSpec.fields.children) {
95
+ try {
96
+ isValid = this.recurseFieldValidation(body, collectionSpec.fields.children, collectionSpec.strict, errorMessages, verbose);
97
+ }
98
+ catch (error) {
99
+ // The strictness message can be received here only if it happens at
100
+ // the validation of the document's root
101
+ if (error.message !== "strictness") {
102
+ throw error;
103
+ }
104
+ isValid = false;
105
+ manageErrorMessage("document", errorMessages, `The document validation is strict. Cannot add unspecified sub-field "${error.details.field}"`, verbose);
106
+ }
107
+ }
108
+ if (collectionSpec.validators) {
109
+ const filters = koncordeTest(this.koncorde, index, collection, body, _id);
110
+ if (filters.length === 0 || filters[0] !== collectionSpec.validators) {
111
+ isValid = false;
112
+ manageErrorMessage("document", errorMessages, "The document does not match validation filters.", verbose);
113
+ }
114
+ }
115
+ }
116
+ if (!verbose) {
117
+ // We only modify the request if the validation succeeds
118
+ if (collectionSpec.fields && collectionSpec.fields.children) {
119
+ request.input.body = this.recurseApplyDefault(isUpdate, request.input.body, collectionSpec.fields.children);
120
+ }
121
+ return request;
122
+ }
123
+ return { errorMessages, valid: isValid };
124
+ }
125
+ /**
126
+ * @param {boolean} isUpdate
127
+ * @param {*} documentSubset
128
+ * @param {...StructuredFieldSpecification} collectionSpecSubset
129
+ */
130
+ recurseApplyDefault(isUpdate, documentSubset, collectionSpecSubset) {
131
+ Object.keys(collectionSpecSubset).forEach((fieldName) => {
132
+ const specSubset = collectionSpecSubset[fieldName], field = documentSubset[fieldName];
133
+ if (has(documentSubset, fieldName) &&
134
+ this.types[specSubset.type].allowChildren &&
135
+ specSubset.children) {
136
+ if (Array.isArray(field)) {
137
+ for (let i = 0; i < field.length; i++) {
138
+ field[i] = this.recurseApplyDefault(isUpdate, field[i], specSubset.children);
139
+ }
140
+ }
141
+ else {
142
+ documentSubset[fieldName] = this.recurseApplyDefault(isUpdate, field, specSubset.children);
143
+ }
144
+ }
145
+ else if (specSubset.defaultValue &&
146
+ (field === null || (!isUpdate && !has(documentSubset, fieldName)))) {
147
+ documentSubset[fieldName] = specSubset.defaultValue;
148
+ }
149
+ });
150
+ return documentSubset;
151
+ }
152
+ /**
153
+ * @param {*} documentSubset
154
+ * @param {StructuredFieldSpecification} collectionSpecSubset
155
+ * @param {boolean} strictness
156
+ * @param {string[]} errorMessages
157
+ * @param {boolean} verbose
158
+ */
159
+ recurseFieldValidation(documentSubset, collectionSpecSubset, strictness, errorMessages, verbose) {
160
+ if (strictness) {
161
+ for (const field of Object.keys(documentSubset)) {
162
+ if (!collectionSpecSubset[field]) {
163
+ const error = new Error("strictness");
164
+ error.details = { field };
165
+ throw error;
166
+ }
167
+ }
168
+ }
169
+ if (!verbose) {
170
+ // We stop as soon as one field is not valid
171
+ return Object.keys(collectionSpecSubset).every((fieldName) => this.isValidField(fieldName, documentSubset, collectionSpecSubset, strictness, errorMessages, verbose));
172
+ }
173
+ // We try to validate every field in order to get all error messages if any
174
+ return Object.keys(collectionSpecSubset).reduce((reductionResult, fieldName) => this.isValidField(fieldName, documentSubset, collectionSpecSubset, strictness, errorMessages, verbose) && reductionResult, true);
175
+ }
176
+ /**
177
+ * @param {string} fieldName
178
+ * @param {*} documentSubset
179
+ * @param {StructuredFieldSpecification} collectionSpecSubset
180
+ * @param {boolean} strictness
181
+ * @param {string[]} errorMessages
182
+ * @param {boolean} verbose
183
+ * @returns {boolean}
184
+ */
185
+ isValidField(fieldName, documentSubset, collectionSpecSubset, strictness, errorMessages, verbose) {
186
+ /** @type StructuredFieldSpecification */
187
+ const field = collectionSpecSubset[fieldName];
188
+ let result = true;
189
+ if (field.mandatory &&
190
+ !has(field, "defaultValue") &&
191
+ _.isNil(documentSubset[fieldName])) {
192
+ manageErrorMessage(field.path, errorMessages, "The field is mandatory.", verbose);
193
+ return false;
194
+ }
195
+ if (!_.isNil(documentSubset[fieldName])) {
196
+ let nestedStrictness = false, fieldValues;
197
+ if (field.multivalued.value) {
198
+ if (!Array.isArray(documentSubset[fieldName])) {
199
+ manageErrorMessage(field.path, errorMessages, "The field must be multivalued, unary value provided.", verbose);
200
+ return false;
201
+ }
202
+ if (has(field.multivalued, "minCount") &&
203
+ documentSubset[fieldName].length < field.multivalued.minCount) {
204
+ manageErrorMessage(field.path, errorMessages, `Not enough elements. Minimum count is set to ${field.multivalued.minCount}.`, verbose);
205
+ return false;
206
+ }
207
+ if (has(field.multivalued, "maxCount") &&
208
+ documentSubset[fieldName].length > field.multivalued.maxCount) {
209
+ manageErrorMessage(field.path, errorMessages, `Too many elements. Maximum count is set to ${field.multivalued.maxCount}.`, verbose);
210
+ return false;
211
+ }
212
+ fieldValues = documentSubset[fieldName];
213
+ }
214
+ else {
215
+ if (Array.isArray(documentSubset[fieldName])) {
216
+ manageErrorMessage(field.path, errorMessages, "The field is not a multivalued field; Multiple values provided.", verbose);
217
+ return false;
218
+ }
219
+ fieldValues = [documentSubset[fieldName]];
220
+ }
221
+ if (this.types[field.type].allowChildren) {
222
+ nestedStrictness = this.types[field.type].getStrictness(field.typeOptions, strictness);
223
+ }
224
+ for (const val of fieldValues) {
225
+ const fieldErrors = [];
226
+ if (!this.types[field.type].validate(field.typeOptions, val, fieldErrors)) {
227
+ if (fieldErrors.length === 0) {
228
+ // We still want to trigger an error, even if no message is provided
229
+ manageErrorMessage(field.path, errorMessages, "An error has occurred during validation.", verbose);
230
+ }
231
+ else {
232
+ fieldErrors.forEach((message) => manageErrorMessage(field.path, errorMessages, message, verbose));
233
+ }
234
+ return false;
235
+ }
236
+ if (this.types[field.type].allowChildren && field.children) {
237
+ try {
238
+ if (!this.recurseFieldValidation(val, field.children, nestedStrictness, errorMessages, verbose)) {
239
+ result = false;
240
+ }
241
+ }
242
+ catch (error) {
243
+ if (error.message === "strictness") {
244
+ manageErrorMessage(field.path, errorMessages, `The field is set to "strict"; cannot add unspecified sub-field "${error.details.field}".`, verbose);
245
+ }
246
+ else if (verbose) {
247
+ manageErrorMessage(field.path, errorMessages, error.message, verbose);
248
+ }
249
+ else {
250
+ throw error;
251
+ }
252
+ result = false;
253
+ }
254
+ }
255
+ }
256
+ }
257
+ return result;
258
+ }
259
+ /**
260
+ * @returns {Promise.<T>}
261
+ */
262
+ curateSpecification() {
263
+ const promises = [], specification = {};
264
+ return getValidationConfiguration().then((validation) => {
265
+ this.rawConfiguration = validation;
266
+ for (const indexName of Object.keys(this.rawConfiguration)) {
267
+ for (const collectionName of Object.keys(this.rawConfiguration[indexName])) {
268
+ const promise = this.curateCollectionSpecification(indexName, collectionName, this.rawConfiguration[indexName][collectionName])
269
+ .then((curatedSpec) => {
270
+ if (!has(specification, indexName)) {
271
+ specification[indexName] = {};
272
+ }
273
+ specification[indexName][collectionName] = curatedSpec;
274
+ return null;
275
+ })
276
+ .catch((error) => {
277
+ this.logger.error(`Specification for the collection ${collectionName} triggered an error`);
278
+ this.logger.error(`Error: ${error.message}`);
279
+ return null;
280
+ });
281
+ promises.push(promise);
282
+ }
283
+ }
284
+ return Bluebird.all(promises).then(() => {
285
+ this.specification = specification;
286
+ });
287
+ });
288
+ }
289
+ /**
290
+ * @param {string} indexName
291
+ * @param {string} collectionName
292
+ * @param {CollectionSpecification} collectionSpec
293
+ * @param {boolean} [verboseErrors]
294
+ * @returns {Promise<object>}
295
+ */
296
+ validateFormat(indexName, collectionName, collectionSpec, verboseErrors = false) {
297
+ // We make a deep clone to avoid side effects
298
+ const specification = _.cloneDeep(collectionSpec);
299
+ return (this.curateCollectionSpecification(indexName, collectionName, specification, true, verboseErrors)
300
+ .then((result) => {
301
+ if (verboseErrors && result.isValid === false) {
302
+ return result;
303
+ }
304
+ return { isValid: true };
305
+ })
306
+ // we do not want to reject since this method goal is
307
+ // to know what is going wrong with the given spec
308
+ .catch((error) => ({ errors: [error], isValid: false })));
309
+ }
310
+ /**
311
+ * @param {string} index
312
+ * @param {string} collection
313
+ * @param {CollectionSpecification} spec
314
+ * @param {boolean} [dryRun]
315
+ * @param {boolean} [verbose]
316
+ * @returns {Promise<CollectionSpecification>}
317
+ * @rejects PreconditionError
318
+ */
319
+ async curateCollectionSpecification(index, collection, spec, dryRun = false, verbose = false) {
320
+ let error = "";
321
+ const processed = {
322
+ fields: {},
323
+ strict: spec.strict || false,
324
+ validators: null,
325
+ };
326
+ const allowed = ["strict", "fields", "validators"];
327
+ if (!checkAllowedProperties(spec, allowed)) {
328
+ error = assertionError.get("unexpected_properties", `${index}.${collection}`, allowed.join(", "));
329
+ if (verbose) {
330
+ return { errors: [error.message], isValid: false };
331
+ }
332
+ throw error;
333
+ }
334
+ if (spec.fields) {
335
+ const result = this.structureCollectionValidation(spec, index, collection, verbose);
336
+ if (result.isValid === false) {
337
+ if (verbose) {
338
+ // do not fail fast if we need verbose errors
339
+ return result;
340
+ }
341
+ throw assertionError.get("invalid_specifications", result.errors.join("\n\t- "));
342
+ }
343
+ processed.fields = result;
344
+ }
345
+ if (spec.validators && Array.isArray(spec.validators)) {
346
+ try {
347
+ const filterId = this.curateValidatorFilter(index, collection, spec.validators, dryRun);
348
+ processed.validators = filterId;
349
+ }
350
+ catch (e) {
351
+ this.logger.error(e);
352
+ throw assertionError.getFrom(e, "invalid_filters", e.message);
353
+ }
354
+ }
355
+ return processed;
356
+ }
357
+ structureCollectionValidation(collectionSpec, indexName, collectionName, verboseErrors = false) {
358
+ const fields = {};
359
+ let errors = [], maxDepth = 0;
360
+ for (const fieldName of Object.keys(collectionSpec.fields)) {
361
+ const // We deep clone the field because we will modify it
362
+ fieldSpecClone = _.cloneDeep(collectionSpec.fields[fieldName]);
363
+ try {
364
+ const result = this.curateFieldSpecification(fieldSpecClone, indexName, collectionName, fieldName, verboseErrors);
365
+ if (result.isValid === false) {
366
+ errors = _.concat(errors, result.errors);
367
+ this.logger.error(result.errors.join("\n"));
368
+ }
369
+ else {
370
+ const field = result.fieldSpec;
371
+ field.path = fieldName.split("/");
372
+ field.depth = field.path.length;
373
+ if (field.depth > maxDepth) {
374
+ maxDepth = field.depth;
375
+ }
376
+ if (!fields[field.depth]) {
377
+ fields[field.depth] = [];
378
+ }
379
+ fields[field.depth].push(field);
380
+ }
381
+ }
382
+ catch (error) {
383
+ this.logger.error(error);
384
+ throwOrStoreError(error, verboseErrors, errors);
385
+ }
386
+ }
387
+ if (errors.length > 0) {
388
+ return { errors, isValid: false };
389
+ }
390
+ if (Object.keys(fields).length > 0) {
391
+ return curateStructuredFields(this.typeAllowsChildren, fields, maxDepth);
392
+ }
393
+ return {};
394
+ }
395
+ /**
396
+ * @param {FieldSpecification} fieldSpec
397
+ * @param {string} indexName
398
+ * @param {string} collectionName
399
+ * @param {string} fieldName
400
+ * @param {boolean} [verboseErrors]
401
+ * @returns {object}
402
+ * @throws PreconditionError
403
+ */
404
+ curateFieldSpecification(fieldSpec, indexName, collectionName, fieldName, verboseErrors = false) {
405
+ const errors = [];
406
+ const result = this.curateFieldSpecificationFormat(fieldSpec, indexName, collectionName, fieldName, verboseErrors);
407
+ if (result.isValid === false) {
408
+ return result;
409
+ }
410
+ _.defaultsDeep(fieldSpec, {
411
+ mandatory: false,
412
+ multivalued: {
413
+ value: false,
414
+ },
415
+ });
416
+ if (!has(fieldSpec, "typeOptions")) {
417
+ fieldSpec.typeOptions = {};
418
+ }
419
+ const allowed = this.types[fieldSpec.type].allowedTypeOptions || [];
420
+ if (!checkAllowedProperties(fieldSpec.typeOptions, allowed)) {
421
+ throwOrStoreError(assertionError.get("unexpected_properties", `${indexName}.${collectionName}.${fieldName}`, allowed.join(", ")), verboseErrors, errors);
422
+ }
423
+ try {
424
+ fieldSpec.typeOptions = this.types[fieldSpec.type].validateFieldSpecification(fieldSpec.typeOptions);
425
+ }
426
+ catch (e) {
427
+ if (!verboseErrors) {
428
+ if (e instanceof KuzzleError) {
429
+ throw e;
430
+ }
431
+ throw kerror.getFrom(e, "plugin", "runtime", "unexpected_error", e.message);
432
+ }
433
+ errors.push(e.message);
434
+ }
435
+ if (errors.length > 0) {
436
+ return { errors, isValid: false };
437
+ }
438
+ debug("Loaded field validator: %s/%s/%s: %o", indexName, collectionName, fieldName, fieldSpec);
439
+ return { fieldSpec, isValid: true };
440
+ }
441
+ /**
442
+ * @param {FieldSpecification} fieldSpec
443
+ * @param {string} indexName
444
+ * @param {string} collectionName
445
+ * @param {string} fieldName
446
+ * @param {boolean} [verboseErrors]
447
+ * @returns {object}
448
+ * @throws PreconditionError
449
+ */
450
+ curateFieldSpecificationFormat(fieldSpec, indexName, collectionName, fieldName, verboseErrors = false) {
451
+ const errors = [];
452
+ const props = [
453
+ "mandatory",
454
+ "type",
455
+ "defaultValue",
456
+ "description",
457
+ "multivalued",
458
+ "typeOptions",
459
+ ];
460
+ if (!checkAllowedProperties(fieldSpec, props)) {
461
+ throwOrStoreError(assertionError.get("unexpected_properties", `${indexName}.${collectionName}.${fieldName}`, props.join(", ")), verboseErrors, errors);
462
+ }
463
+ if (!has(fieldSpec, "type")) {
464
+ throwOrStoreError(assertionError.get("missing_type", `${indexName}.${collectionName}.${fieldName}`), verboseErrors, errors);
465
+ }
466
+ if (!has(this.types, fieldSpec.type)) {
467
+ throwOrStoreError(assertionError.get("unknown_type", `${indexName}.${collectionName}.${fieldName}`, fieldSpec.type), verboseErrors, errors);
468
+ }
469
+ if (has(fieldSpec, "multivalued")) {
470
+ const multivaluedProps = ["value", "minCount", "maxCount"];
471
+ if (!checkAllowedProperties(fieldSpec.multivalued, multivaluedProps)) {
472
+ throwOrStoreError(assertionError.get("unexpected_properties", `${indexName}.${collectionName}.${fieldName}.multivalued`, multivaluedProps.join(", ")), verboseErrors, errors);
473
+ }
474
+ if (!has(fieldSpec.multivalued, "value")) {
475
+ throwOrStoreError(assertionError.get("missing_value", `${indexName}.${collectionName}.${fieldName}.multivalued`), verboseErrors, errors);
476
+ }
477
+ if (typeof fieldSpec.multivalued.value !== "boolean") {
478
+ throwOrStoreError(assertionError.get("invalid_type", `${indexName}.${collectionName}.${fieldName}.multivalued.value`, "boolean"), verboseErrors, errors);
479
+ }
480
+ for (const unexpected of ["minCount", "maxCount"]) {
481
+ if (!fieldSpec.multivalued.value &&
482
+ has(fieldSpec.multivalued, unexpected)) {
483
+ throwOrStoreError(assertionError.get("not_multivalued", `${indexName}.${collectionName}.${fieldName}`, unexpected), verboseErrors, errors);
484
+ }
485
+ }
486
+ if (has(fieldSpec.multivalued, "minCount") &&
487
+ has(fieldSpec.multivalued, "maxCount") &&
488
+ fieldSpec.multivalued.minCount > fieldSpec.multivalued.maxCount) {
489
+ throwOrStoreError(assertionError.get("invalid_range", `${indexName}.${collectionName}.${fieldName}`, "minCount", "maxCount"), verboseErrors, errors);
490
+ }
491
+ }
492
+ if (errors.length > 0) {
493
+ return { errors, isValid: false };
494
+ }
495
+ return { isValid: true };
496
+ }
497
+ /**
498
+ * @param {string} indexName
499
+ * @param {string} collectionName
500
+ * @param {*} validatorFilter
501
+ * @param {boolean} dryRun
502
+ * @returns {string}
503
+ */
504
+ curateValidatorFilter(indexName, collectionName, validatorFilter, dryRun) {
505
+ const query = {
506
+ bool: {
507
+ must: validatorFilter,
508
+ },
509
+ };
510
+ this.koncorde.validate(query);
511
+ if (!dryRun) {
512
+ debug("Registering filter validator %s/%s: %O", indexName, collectionName, query);
513
+ return this.koncorde.register(query, toKoncordeIndex(indexName, collectionName));
514
+ }
515
+ return null;
516
+ }
517
+ /**
518
+ * @param {ValidationType} validationType
519
+ * @throws {PluginImplementationError}
520
+ */
521
+ addType(validationType) {
522
+ if (!validationType.typeName) {
523
+ throw kerror.get("validation", "types", "missing_type_name");
524
+ }
525
+ if (!validationType.validate ||
526
+ typeof validationType.validate !== "function") {
527
+ throw kerror.get("validation", "types", "missing_function", validationType.typeName, "validate");
528
+ }
529
+ if (!validationType.validateFieldSpecification ||
530
+ typeof validationType.validateFieldSpecification !== "function") {
531
+ throw kerror.get("validation", "types", "missing_function", validationType.typeName, "validateFieldSpecification");
532
+ }
533
+ if (has(validationType, "allowChildren") && validationType.allowChildren) {
534
+ if (!validationType.getStrictness ||
535
+ typeof validationType.getStrictness !== "function") {
536
+ throw kerror.get("validation", "types", "missing_function", validationType.typeName, "getStrictness");
537
+ }
538
+ this.typeAllowsChildren.push(validationType.typeName);
539
+ }
540
+ if (this.types[validationType.typeName]) {
541
+ throw kerror.get("validation", "types", "already_exists", validationType.typeName);
542
+ }
543
+ this.types[validationType.typeName] = validationType;
544
+ }
545
+ }
546
+ /**
547
+ * @param {*} object
548
+ * @param {string[]} allowedProperties
549
+ * @returns {boolean}
550
+ */
551
+ function checkAllowedProperties(object, allowedProperties) {
552
+ if (!isPlainObject(object)) {
553
+ return false;
554
+ }
555
+ return !Object.keys(object).some((propertyName) => !allowedProperties.includes(propertyName));
556
+ }
557
+ /**
558
+ * @param {string[]} typeAllowsChildren
559
+ * @param {StructuredFieldSpecification[][]} fields
560
+ * @param {number} maxDepth : depth of the fields; counting starts at 1
561
+ * @throws PreconditionError
562
+ */
563
+ function curateStructuredFields(typeAllowsChildren, fields, maxDepth) {
564
+ const /** @type StructuredFieldSpecification */ structuredFields = {
565
+ children: {},
566
+ root: true,
567
+ };
568
+ for (let i = 1; i <= maxDepth; i++) {
569
+ if (!has(fields, i)) {
570
+ throw assertionError.get("missing_nested_spec");
571
+ }
572
+ fields[i].forEach((field) => {
573
+ const parent = getParent(structuredFields, field.path), childKey = field.path[field.path.length - 1];
574
+ if (!parent.root && typeAllowsChildren.indexOf(parent.type) === -1) {
575
+ throw assertionError.get("unexpected_children", parent.type);
576
+ }
577
+ if (!has(parent, "children")) {
578
+ parent.children = {};
579
+ }
580
+ parent.children[childKey] = field;
581
+ });
582
+ }
583
+ return structuredFields;
584
+ }
585
+ /**
586
+ * @param {StructuredFieldSpecification} structuredFields
587
+ * @param {string[]}fieldPath
588
+ * @returns {StructuredFieldSpecification}
589
+ */
590
+ function getParent(structuredFields, fieldPath) {
591
+ if (fieldPath.length === 1) {
592
+ return structuredFields;
593
+ }
594
+ let pointer = structuredFields;
595
+ for (let i = 0; i < fieldPath.length - 1; i++) {
596
+ if (!has(pointer.children, fieldPath[i])) {
597
+ throw assertionError.get("missing_parent", fieldPath.join("."));
598
+ }
599
+ pointer = pointer.children[fieldPath[i]];
600
+ }
601
+ return pointer;
602
+ }
603
+ /**
604
+ * @param {KuzzleError} error
605
+ * @param {boolean} doNotThrow
606
+ * @param {string[]} errors
607
+ */
608
+ function throwOrStoreError(error, doNotThrow, errorMessages) {
609
+ if (!doNotThrow) {
610
+ throw error;
611
+ }
612
+ errorMessages.push(error.message);
613
+ }
614
+ /**
615
+ * @param {string|string[]} errorContext
616
+ * @param {string[]|{documentScope:string[], fieldScope: {children: ...*}}} errorHolder
617
+ * @param {string} message
618
+ * @param {boolean} structured
619
+ */
620
+ function manageErrorMessage(errorContext, errorHolder, message, structured) {
621
+ if (structured) {
622
+ if (errorContext === "document") {
623
+ if (!errorHolder.documentScope) {
624
+ errorHolder.documentScope = [];
625
+ }
626
+ errorHolder.documentScope.push(message);
627
+ }
628
+ else {
629
+ if (!errorHolder.fieldScope) {
630
+ errorHolder.fieldScope = {};
631
+ }
632
+ let pointer = errorHolder.fieldScope;
633
+ for (let i = 0; i < errorContext.length; i++) {
634
+ if (!pointer.children) {
635
+ pointer.children = {};
636
+ }
637
+ if (!has(pointer.children, errorContext[i])) {
638
+ pointer.children[errorContext[i]] = {};
639
+ }
640
+ pointer = pointer.children[errorContext[i]];
641
+ }
642
+ if (!has(pointer, "messages")) {
643
+ pointer.messages = [];
644
+ }
645
+ pointer.messages.push(message);
646
+ }
647
+ }
648
+ else if (errorContext === "document") {
649
+ throw kerror.get("validation", "check", "failed_document", message);
650
+ }
651
+ else {
652
+ throw kerror.get("validation", "check", "failed_field", errorContext.join("."), message);
653
+ }
654
+ }
655
+ /**
656
+ * Retrieve the plugins list from the database and returns it,
657
+ * along with their configuration
658
+ *
659
+ * @returns {Promise}
660
+ */
661
+ function getValidationConfiguration() {
662
+ return global.kuzzle.internalIndex
663
+ .search("validations", {}, { from: 0, size: 1000 })
664
+ .then((result) => {
665
+ let validation = {};
666
+ if (result && Array.isArray(result.hits) && result.hits.length > 0) {
667
+ for (const { _source, _id } of result.hits) {
668
+ const collectionName = `${_id.split("#")[0]}/${_id.split("#")[1]}`;
669
+ if (!get(_source, "index")) {
670
+ throw assertionError.get("incorrect_validation_format", collectionName, "index");
671
+ }
672
+ if (!get(_source, "collection")) {
673
+ throw assertionError.get("incorrect_validation_format", collectionName, "collection");
674
+ }
675
+ if (!get(_source, "validation")) {
676
+ throw assertionError.get("incorrect_validation_format", collectionName, "validation");
677
+ }
678
+ if (!has(validation, _source.index)) {
679
+ validation[_source.index] = {};
680
+ }
681
+ validation[_source.index][_source.collection] = _source.validation;
682
+ }
683
+ }
684
+ else if (global.kuzzle.config.validation) {
685
+ // We can't wait prepareDb as it runs outside of the rest of the start
686
+ validation = global.kuzzle.config.validation;
687
+ }
688
+ return validation;
689
+ });
690
+ }
691
+ module.exports = Validation;
692
+ //# sourceMappingURL=validation.js.map