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
@@ -1,1023 +0,0 @@
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
-
22
- /* eslint sort-keys: 0 */
23
-
24
- "use strict";
25
-
26
- const kerror = require("../../kerror").wrap("api", "assert");
27
-
28
- const { Request } = require("../request");
29
- const { NativeController } = require("./baseController");
30
- const kassert = require("../../util/requestAssertions");
31
- const { isPlainObject, has } = require("../../util/safeObject");
32
-
33
- let mapping;
34
-
35
- /**
36
- * @class MemoryStorageController
37
- */
38
- class MemoryStorageController extends NativeController {
39
- constructor() {
40
- super();
41
-
42
- initMapping();
43
-
44
- const buildCommandFn = (command) => {
45
- if (command === "mexecute") {
46
- return async (request) =>
47
- global.kuzzle.ask(
48
- "core:cache:public:mExecute",
49
- extractArgumentsFromRequest(command, request),
50
- );
51
- }
52
-
53
- const largeCommands = ["mset", "mget", "msetnx"];
54
-
55
- if (largeCommands.includes(command)) {
56
- return async (request) =>
57
- global.kuzzle.ask(
58
- "core:cache:public:execute",
59
- command,
60
- extractArgumentsFromRequest(command, request),
61
- );
62
- }
63
-
64
- return async (request) =>
65
- global.kuzzle.ask(
66
- "core:cache:public:execute",
67
- command,
68
- ...extractArgumentsFromRequest(command, request),
69
- );
70
- };
71
-
72
- for (const command of Object.keys(mapping)) {
73
- this._actions.add(command);
74
- this[command] = buildCommandFn(command);
75
- }
76
- }
77
- }
78
-
79
- module.exports = MemoryStorageController;
80
-
81
- const scanMatchProperty = {
82
- skip: true,
83
- merge: true,
84
- path: ["args", "match"],
85
- map: (val) => {
86
- if (typeof val !== "string") {
87
- throw kerror.get("invalid_type", "match", "<string>");
88
- }
89
-
90
- return ["MATCH", val];
91
- },
92
- };
93
-
94
- const scanCountProperty = {
95
- skip: true,
96
- merge: true,
97
- path: ["args", "count"],
98
- map: (val, request) => {
99
- assertInt(request, "count", val);
100
- return ["COUNT", val];
101
- },
102
- };
103
-
104
- const zrangebyscoreOptionsProperty = {
105
- skip: true,
106
- merge: true,
107
- map: (val) => sanitizeArrayArgument(val),
108
- path: ["args", "options"],
109
- };
110
-
111
- const zrangebyscoreLimitProperty = {
112
- skip: true,
113
- merge: true,
114
- map: (val) => processLimit(val),
115
- path: ["args", "limit"],
116
- };
117
-
118
- function initMapping() {
119
- mapping = {
120
- append: {
121
- key: ["resource", "_id"],
122
- value: ["body", "value"],
123
- },
124
- bitcount: {
125
- key: ["resource", "_id"],
126
- start: { skip: true, path: ["args", "start"] },
127
- end: { skip: true, path: ["args", "end"] },
128
- },
129
- bitop: {
130
- operation: ["body", "operation"],
131
- destkey: ["resource", "_id"],
132
- keys: { merge: true, path: ["body", "keys"] },
133
- },
134
- bitpos: {
135
- key: ["resource", "_id"],
136
- bit: ["args", "bit"],
137
- start: { skip: true, path: ["args", "start"] },
138
- end: { skip: true, path: ["args", "end"] },
139
- },
140
- dbsize: null,
141
- decrby: {
142
- key: ["resource", "_id"],
143
- value: ["body", "value"],
144
- },
145
- del: {
146
- keys: ["body", "keys"],
147
- },
148
- expire: {
149
- key: ["resource", "_id"],
150
- seconds: ["body", "seconds"],
151
- },
152
- expireat: {
153
- key: ["resource", "_id"],
154
- timestamp: ["body", "timestamp"],
155
- },
156
- flushdb: null,
157
- geoadd: {
158
- key: { path: ["resource", "_id"] },
159
- points: {
160
- map: (val, request) => {
161
- const result = [];
162
-
163
- kassert.assertBodyHasAttribute(request, "points");
164
- kassert.assertBodyAttributeType(request, "points", "array");
165
-
166
- if (val.length === 0) {
167
- throw kerror.get("empty_argument", "points");
168
- }
169
-
170
- val.forEach((v) => {
171
- if (typeof v !== "object" || !v.lon || !v.lat || !v.name) {
172
- throw kerror.get(
173
- "invalid_argument",
174
- "points",
175
- "<array of geopoints>",
176
- );
177
- }
178
-
179
- assertFloat(request, "lon", v.lon);
180
- assertFloat(request, "lat", v.lat);
181
-
182
- result.push(v.lon, v.lat, v.name);
183
- });
184
-
185
- return result;
186
- },
187
- path: ["body", "points"],
188
- merge: true,
189
- },
190
- },
191
- geodist: {
192
- key: ["resource", "_id"],
193
- member1: ["args", "member1"],
194
- member2: ["args", "member2"],
195
- unit: { skip: true, path: ["args", "unit"] },
196
- },
197
- geohash: {
198
- key: ["resource", "_id"],
199
- members: {
200
- merge: true,
201
- map: (val) => toArray(val),
202
- path: ["args", "members"],
203
- },
204
- },
205
- georadius: {
206
- key: ["resource", "_id"],
207
- lon: ["args", "lon"],
208
- lat: ["args", "lat"],
209
- distance: ["args", "distance"],
210
- unit: ["args", "unit"],
211
- options: {
212
- skip: true,
213
- merge: true,
214
- map: (val) => sanitizeArrayArgument(val),
215
- path: ["args", "options"],
216
- },
217
- },
218
- georadiusbymember: {
219
- key: ["resource", "_id"],
220
- member: ["args", "member"],
221
- distance: ["args", "distance"],
222
- unit: ["args", "unit"],
223
- options: {
224
- skip: true,
225
- merge: true,
226
- map: (val) => sanitizeArrayArgument(val),
227
- path: ["args", "options"],
228
- },
229
- },
230
- getbit: {
231
- key: ["resource", "_id"],
232
- offset: ["args", "offset"],
233
- },
234
- getrange: {
235
- key: ["resource", "_id"],
236
- start: ["args", "start"],
237
- end: ["args", "end"],
238
- },
239
- hdel: {
240
- key: ["resource", "_id"],
241
- fields: { skip: true, merge: true, path: ["body", "fields"] },
242
- },
243
- hmget: {
244
- key: ["resource", "_id"],
245
- fields: {
246
- merge: true,
247
- map: (val) => toArray(val),
248
- path: ["args", "fields"],
249
- },
250
- },
251
- hexists: {
252
- key: ["resource", "_id"],
253
- field: ["args", "field"],
254
- },
255
- hincrby: {
256
- key: ["resource", "_id"],
257
- field: ["body", "field"],
258
- value: ["body", "value"],
259
- },
260
- hmset: {
261
- key: ["resource", "_id"],
262
- entries: {
263
- map: (val, request) => {
264
- const result = [];
265
-
266
- kassert.assertBodyHasAttribute(request, "entries");
267
- kassert.assertBodyAttributeType(request, "entries", "array");
268
-
269
- val.forEach((v) => {
270
- if (
271
- typeof v !== "object" ||
272
- !v.field ||
273
- (!v.value && v.value !== 0)
274
- ) {
275
- throw kerror.get(
276
- "invalid_argument",
277
- "entries",
278
- "<array of objects>",
279
- );
280
- }
281
-
282
- result.push(v.field, v.value);
283
- });
284
-
285
- return result;
286
- },
287
- path: ["body", "entries"],
288
- merge: true,
289
- },
290
- },
291
- hset: {
292
- key: ["resource", "_id"],
293
- field: ["body", "field"],
294
- value: ["body", "value"],
295
- },
296
- hstrlen: {
297
- key: ["resource", "_id"],
298
- field: ["args", "field"],
299
- },
300
- keys: {
301
- pattern: ["args", "pattern"],
302
- },
303
- lindex: {
304
- key: ["resource", "_id"],
305
- index: ["args", "idx"],
306
- },
307
- linsert: {
308
- key: ["resource", "_id"],
309
- position: ["body", "position"],
310
- pivot: ["body", "pivot"],
311
- value: ["body", "value"],
312
- },
313
- lpush: {
314
- key: ["resource", "_id"],
315
- values: { skip: true, merge: true, path: ["body", "values"] },
316
- },
317
- lrange: {
318
- key: ["resource", "_id"],
319
- start: ["args", "start"],
320
- stop: ["args", "stop"],
321
- },
322
- lrem: {
323
- key: ["resource", "_id"],
324
- count: ["body", "count"],
325
- value: ["body", "value"],
326
- },
327
- lset: {
328
- key: ["resource", "_id"],
329
- index: ["body", "index"],
330
- value: ["body", "value"],
331
- },
332
- ltrim: {
333
- key: ["resource", "_id"],
334
- start: ["body", "start"],
335
- stop: ["body", "stop"],
336
- },
337
- mget: {
338
- keys: {
339
- merge: true,
340
- map: (val) => toArray(val),
341
- path: ["args", "keys"],
342
- },
343
- },
344
- mexecute: {
345
- actions: ["body", "actions"],
346
- },
347
- mset: {
348
- entries: {
349
- map: (val, request) => {
350
- const result = [];
351
-
352
- kassert.assertBodyHasAttribute(request, "entries");
353
- kassert.assertBodyAttributeType(request, "entries", "array");
354
- val.forEach((entry) => {
355
- if (
356
- typeof entry !== "object" ||
357
- !entry.key ||
358
- (!entry.value && entry.value !== 0)
359
- ) {
360
- throw kerror.get(
361
- "invalid_argument",
362
- "entries",
363
- "<array of objects>",
364
- );
365
- }
366
-
367
- result.push(entry.key, entry.value);
368
- });
369
-
370
- return result;
371
- },
372
- path: ["body", "entries"],
373
- merge: true,
374
- },
375
- },
376
- object: {
377
- subcommand: ["args", "subcommand"],
378
- key: ["resource", "_id"],
379
- },
380
- pexpire: {
381
- key: ["resource", "_id"],
382
- milliseconds: ["body", "milliseconds"],
383
- },
384
- pexpireat: {
385
- key: ["resource", "_id"],
386
- timestamp: ["body", "timestamp"],
387
- },
388
- pfadd: {
389
- key: ["resource", "_id"],
390
- elements: { skip: true, merge: true, path: ["body", "elements"] },
391
- },
392
- pfmerge: {
393
- key: ["resource", "_id"],
394
- sources: { skip: true, merge: true, path: ["body", "sources"] },
395
- },
396
- ping: null,
397
- psetex: {
398
- key: ["resource", "_id"],
399
- milliseconds: ["body", "milliseconds"],
400
- value: ["body", "value"],
401
- },
402
- randomkey: null,
403
- rename: {
404
- key: ["resource", "_id"],
405
- newkey: ["body", "newkey"],
406
- },
407
- renamenx: {
408
- key: ["resource", "_id"],
409
- newkey: ["body", "newkey"],
410
- },
411
- rpoplpush: {
412
- source: ["body", "source"],
413
- destination: ["body", "destination"],
414
- },
415
- sadd: {
416
- key: ["resource", "_id"],
417
- members: { skip: true, merge: true, path: ["body", "members"] },
418
- },
419
- scan: {
420
- cursor: ["args", "cursor"],
421
- match: scanMatchProperty,
422
- count: scanCountProperty,
423
- },
424
- sdiff: {
425
- key: ["resource", "_id"],
426
- keys: {
427
- merge: true,
428
- map: (val) => toArray(val),
429
- path: ["args", "keys"],
430
- },
431
- },
432
- sdiffstore: {
433
- destination: ["body", "destination"],
434
- key: ["resource", "_id"],
435
- keys: { merge: true, path: ["body", "keys"] },
436
- },
437
- set: null, // handled by extractArgumentsFromRequestForSet
438
- setex: {
439
- key: ["resource", "_id"],
440
- seconds: ["body", "seconds"],
441
- value: ["body", "value"],
442
- },
443
- setnx: {
444
- key: ["resource", "_id"],
445
- value: ["body", "value"],
446
- },
447
- sinterstore: {
448
- destination: ["body", "destination"],
449
- keys: { merge: true, path: ["body", "keys"] },
450
- },
451
- sismember: {
452
- key: ["resource", "_id"],
453
- member: ["args", "member"],
454
- },
455
- smove: {
456
- key: ["resource", "_id"],
457
- destination: ["body", "destination"],
458
- member: ["body", "member"],
459
- },
460
- sort: null, // handled by extractArgumentsFromRequestForSort
461
- spop: {
462
- key: ["resource", "_id"],
463
- count: { skip: true, path: ["body", "count"] },
464
- },
465
- srandmember: {
466
- key: ["resource", "_id"],
467
- count: { skip: true, path: ["args", "count"] },
468
- },
469
- srem: {
470
- key: ["resource", "_id"],
471
- members: { skip: true, merge: true, path: ["body", "members"] },
472
- },
473
- sscan: {
474
- key: ["resource", "_id"],
475
- cursor: ["args", "cursor"],
476
- match: scanMatchProperty,
477
- count: scanCountProperty,
478
- },
479
- sunion: {
480
- keys: {
481
- merge: true,
482
- map: (val) => toArray(val),
483
- path: ["args", "keys"],
484
- },
485
- },
486
- sunionstore: {
487
- destination: ["body", "destination"],
488
- keys: { merge: true, path: ["body", "keys"] },
489
- },
490
- time: null,
491
- touch: {
492
- keys: { merge: true, path: ["body", "keys"] },
493
- },
494
- zadd: null, // handled by extractArgumentsFromRequestForZAdd
495
- zcount: {
496
- key: ["resource", "_id"],
497
- min: ["args", "min"],
498
- max: ["args", "max"],
499
- },
500
- zincrby: {
501
- key: ["resource", "_id"],
502
- value: ["body", "value"],
503
- member: ["body", "member"],
504
- },
505
- zinterstore: null, // handled by extractArgumentsFromRequestForZInterstore
506
- zlexcount: {
507
- key: ["resource", "_id"],
508
- min: ["args", "min"],
509
- max: ["args", "max"],
510
- },
511
- zrange: {
512
- key: ["resource", "_id"],
513
- start: ["args", "start"],
514
- stop: ["args", "stop"],
515
- options: {
516
- skip: true,
517
- merge: true,
518
- map: (val) => sanitizeArrayArgument(val),
519
- path: ["args", "options"],
520
- },
521
- },
522
- zrangebylex: {
523
- key: ["resource", "_id"],
524
- min: ["args", "min"],
525
- max: ["args", "max"],
526
- limit: {
527
- skip: true,
528
- merge: true,
529
- map: (val) => processLimit(val),
530
- path: ["args", "limit"],
531
- },
532
- },
533
- zrangebyscore: {
534
- key: ["resource", "_id"],
535
- min: ["args", "min"],
536
- max: ["args", "max"],
537
- options: zrangebyscoreOptionsProperty,
538
- limit: zrangebyscoreLimitProperty,
539
- },
540
- zrem: {
541
- key: ["resource", "_id"],
542
- members: { merge: true, path: ["body", "members"] },
543
- },
544
- zremrangebylex: {
545
- key: ["resource", "_id"],
546
- min: ["body", "min"],
547
- max: ["body", "max"],
548
- },
549
- zremrangebyrank: {
550
- key: ["resource", "_id"],
551
- min: ["body", "start"],
552
- max: ["body", "stop"],
553
- },
554
- zremrangebyscore: {
555
- key: ["resource", "_id"],
556
- min: ["body", "min"],
557
- max: ["body", "max"],
558
- },
559
- zrevrangebylex: {
560
- key: ["resource", "_id"],
561
- max: ["args", "max"],
562
- min: ["args", "min"],
563
- limit: {
564
- skip: true,
565
- merge: true,
566
- map: (val) => processLimit(val),
567
- path: ["args", "limit"],
568
- },
569
- },
570
- zrevrangebyscore: {
571
- key: ["resource", "_id"],
572
- max: ["args", "max"],
573
- min: ["args", "min"],
574
- options: zrangebyscoreOptionsProperty,
575
- limit: zrangebyscoreLimitProperty,
576
- },
577
- zrevrank: {
578
- key: ["resource", "_id"],
579
- member: ["args", "member"],
580
- },
581
- zunionstore: null, // handled by extractArgumentsFromRequestForZInterstore
582
- };
583
-
584
- // unique argument key
585
- mapping.decr =
586
- mapping.get =
587
- mapping.hgetall =
588
- mapping.hkeys =
589
- mapping.hlen =
590
- mapping.hvals =
591
- mapping.incr =
592
- mapping.llen =
593
- mapping.lpop =
594
- mapping.persist =
595
- mapping.pttl =
596
- mapping.rpop =
597
- mapping.scard =
598
- mapping.smembers =
599
- mapping.strlen =
600
- mapping.ttl =
601
- mapping.type =
602
- mapping.zcard =
603
- { key: ["resource", "_id"] };
604
-
605
- // key value
606
- mapping.getset =
607
- mapping.lpushx =
608
- mapping.rpushx =
609
- {
610
- key: ["resource", "_id"],
611
- value: ["body", "value"],
612
- };
613
-
614
- mapping.pfcount = mapping.sinter = mapping.mget;
615
-
616
- mapping.incrby = mapping.incrbyfloat = mapping.decrby;
617
- mapping.geopos = mapping.geohash;
618
- mapping.hget = mapping.hexists;
619
- mapping.hsetnx = mapping.hset;
620
- mapping.msetnx = mapping.mset;
621
- mapping.rpush = mapping.lpush;
622
- mapping.hincrbyfloat = mapping.hincrby;
623
- mapping.zrevrange = mapping.zrange;
624
- mapping.zscore = mapping.zrank = mapping.zrevrank;
625
- mapping.hscan = mapping.zscan = mapping.sscan;
626
- mapping.exists = mapping.mget;
627
- }
628
-
629
- /**
630
- * @param {string} command
631
- * @param {Request} request
632
- * @returns {*}
633
- */
634
- function extractArgumentsFromRequest(command, request) {
635
- let args = [];
636
-
637
- // Dealing with exceptions
638
- if (command === "set") {
639
- return extractArgumentsFromRequestForSet(request);
640
- }
641
- if (command === "sort") {
642
- return extractArgumentsFromRequestForSort(request);
643
- }
644
- if (command === "zadd") {
645
- return extractArgumentsFromRequestForZAdd(request);
646
- }
647
- if (command === "zinterstore") {
648
- return extractArgumentsFromRequestForZInterstore(request);
649
- }
650
- if (command === "zunionstore") {
651
- return extractArgumentsFromRequestForZInterstore(request);
652
- }
653
- if (command === "mexecute") {
654
- return extractArgumentsFromRequestForMExecute(request);
655
- }
656
-
657
- if (!mapping[command]) {
658
- return [];
659
- }
660
-
661
- if (!request.input.body) {
662
- request.input.body = {};
663
- }
664
-
665
- Object.keys(mapping[command]).forEach((key) => {
666
- const data = mapping[command][key];
667
- const path = Array.isArray(data) ? data : data.path;
668
- const toMerge = !Array.isArray(data) && data.merge === true;
669
- const map = !Array.isArray(data) && data.map;
670
- const skip = !Array.isArray(data) && data.skip === true;
671
-
672
- let value = path.reduce(
673
- (previousValue, currentValue, currentIndex, array) => {
674
- if (
675
- previousValue[array[currentIndex]] !== undefined &&
676
- previousValue[array[currentIndex]] !== null
677
- ) {
678
- return previousValue[array[currentIndex]];
679
- }
680
- return undefined;
681
- },
682
- request.input,
683
- );
684
-
685
- if (value === undefined) {
686
- if (skip) {
687
- return;
688
- }
689
- throw kerror.get("missing_argument", key);
690
- }
691
-
692
- if (map) {
693
- value = data.map(value, request);
694
- }
695
-
696
- if (value !== undefined) {
697
- if (toMerge && Array.isArray(value)) {
698
- args = args.concat(value);
699
- } else {
700
- args.push(value);
701
- }
702
- }
703
- });
704
-
705
- return args;
706
- }
707
-
708
- /**
709
- * @param {Request} request
710
- * @returns {*[]}
711
- */
712
- function extractArgumentsFromRequestForSet(request) {
713
- const args = [request.input.args._id];
714
-
715
- kassert.assertHasId(request);
716
- kassert.assertHasBody(request);
717
-
718
- if (
719
- ["undefined", "boolean", "object"].indexOf(
720
- typeof request.input.body.value,
721
- ) !== -1
722
- ) {
723
- throw kerror.get("invalid_type", "value", "string, number");
724
- }
725
-
726
- if (request.input.body.nx && request.input.body.xx) {
727
- throw kerror.get("mutually_exclusive", "nx", "xx");
728
- }
729
-
730
- if (request.input.body.ex && request.input.body.px) {
731
- throw kerror.get("mutually_exclusive", "ex", "px");
732
- }
733
-
734
- args.push(request.input.body.value);
735
-
736
- if (request.input.body.ex !== undefined) {
737
- args.push("EX", request.input.body.ex);
738
- }
739
-
740
- if (request.input.body.px !== undefined) {
741
- args.push("PX", request.input.body.px);
742
- }
743
-
744
- if (request.input.body.nx) {
745
- args.push("NX");
746
- }
747
-
748
- if (request.input.body.xx) {
749
- args.push("XX");
750
- }
751
-
752
- return args;
753
- }
754
-
755
- /**
756
- * @param {Request} request
757
- * @returns {*[]}
758
- */
759
- function extractArgumentsFromRequestForSort(request) {
760
- const args = [request.input.args._id];
761
-
762
- kassert.assertHasId(request);
763
-
764
- if (request.input.body) {
765
- if (request.input.body.alpha) {
766
- args.push("ALPHA");
767
- }
768
-
769
- if (request.input.body.direction !== undefined) {
770
- const direction = request.input.body.direction.toUpperCase();
771
-
772
- if (["ASC", "DESC"].indexOf(direction) === -1) {
773
- throw kerror.get("invalid_argument", "direction", '"ASC", "DESC"');
774
- }
775
-
776
- args.push(direction);
777
- }
778
-
779
- if (request.input.body.by !== undefined) {
780
- args.push("BY", request.input.body.by);
781
- }
782
-
783
- if (request.input.body.limit !== undefined) {
784
- kassert.assertBodyAttributeType(request, "limit", "array");
785
- assertInt(request, "limit.offset", request.input.body.limit[0]);
786
- assertInt(request, "limit.count", request.input.body.limit[1]);
787
-
788
- args.push(
789
- "LIMIT",
790
- request.input.body.limit[0],
791
- request.input.body.limit[1],
792
- );
793
- }
794
-
795
- if (request.input.body.get !== undefined) {
796
- kassert.assertBodyAttributeType(request, "get", "array");
797
-
798
- request.input.body.get.forEach((pattern) => {
799
- args.push("GET");
800
- args.push(pattern);
801
- });
802
- }
803
-
804
- if (request.input.body.store !== undefined) {
805
- args.push("STORE", request.input.body.store);
806
- }
807
- }
808
-
809
- return args;
810
- }
811
-
812
- /**
813
- * @param {Request} request
814
- * @returns {*[]}
815
- */
816
- function extractArgumentsFromRequestForMExecute(request) {
817
- kassert.assertHasBody(request);
818
- kassert.assertBodyHasAttribute(request, "actions");
819
- kassert.assertBodyAttributeType(request, "actions", "array");
820
-
821
- const actions = request.input.body.actions;
822
-
823
- return actions.map((command) => {
824
- if (!has(command, "action")) {
825
- throw kerror.get("missing_argument", "action");
826
- }
827
- if (!has(command, "args")) {
828
- throw kerror.get("missing_argument", "args");
829
- }
830
- if (!isPlainObject(command.args)) {
831
- throw kerror.get("invalid_type", "args", "object");
832
- }
833
- if (command.action === "mexecute") {
834
- throw kerror.get("forbidden_argument", "mexecute");
835
- }
836
- if (!has(mapping, command.action)) {
837
- throw kerror.get("forbidden_argument", command.action);
838
- }
839
- const subRequest = new Request(command.args);
840
- const extractedArguments = extractArgumentsFromRequest(
841
- command.action,
842
- subRequest,
843
- );
844
-
845
- return [command.action, ...extractedArguments];
846
- });
847
- }
848
-
849
- /**
850
- * @param {Request} request
851
- * @returns {*[]}
852
- */
853
- function extractArgumentsFromRequestForZAdd(request) {
854
- const args = [request.input.args._id];
855
-
856
- kassert.assertHasId(request);
857
- kassert.assertHasBody(request);
858
- kassert.assertBodyHasAttribute(request, "elements");
859
- kassert.assertBodyAttributeType(request, "elements", "array");
860
-
861
- if (request.input.body.nx && request.input.body.xx) {
862
- throw kerror.get("mutually_exclusive", "nx", "xx");
863
- }
864
-
865
- if (request.input.body.nx) {
866
- args.push("NX");
867
- }
868
-
869
- if (request.input.body.xx) {
870
- args.push("XX");
871
- }
872
-
873
- if (request.input.body.ch) {
874
- args.push("CH");
875
- }
876
-
877
- if (request.input.body.incr) {
878
- args.push("INCR");
879
- }
880
-
881
- if (request.input.body.elements.length === 0) {
882
- throw kerror.get("empty_argument", "elements");
883
- }
884
-
885
- if (request.input.body.incr && request.input.body.elements.length > 1) {
886
- throw kerror.get("too_many_arguments", "elements");
887
- }
888
-
889
- request.input.body.elements.forEach((element, index) => {
890
- if (!isPlainObject(element)) {
891
- throw kerror.get("invalid_argument", "elements", "<array of objects>");
892
- }
893
-
894
- if (!element.member) {
895
- throw kerror.get("missing_argument", `elements[${index}].member`);
896
- }
897
-
898
- assertFloat(request, "score", element.score);
899
-
900
- args.push(element.score);
901
- args.push(element.member);
902
- });
903
-
904
- return args;
905
- }
906
-
907
- /**
908
- * @param {Request} request
909
- * @returns {*[]}
910
- */
911
- function extractArgumentsFromRequestForZInterstore(request) {
912
- let args = [request.input.args._id];
913
-
914
- kassert.assertHasId(request);
915
- kassert.assertHasBody(request);
916
- kassert.assertBodyHasAttribute(request, "keys");
917
- kassert.assertBodyAttributeType(request, "keys", "array");
918
-
919
- if (request.input.body.keys.length === 0) {
920
- throw kerror.get("empty_argument", "keys");
921
- }
922
-
923
- args.push(request.input.body.keys.length);
924
- args = args.concat(request.input.body.keys);
925
-
926
- if (request.input.body.weights) {
927
- kassert.assertBodyAttributeType(request, "weights", "array");
928
-
929
- if (request.input.body.weights.length > 0) {
930
- args.push("WEIGHTS");
931
- args = args.concat(request.input.body.weights);
932
- }
933
- }
934
-
935
- if (request.input.body.aggregate) {
936
- kassert.assertBodyAttributeType(request, "aggregate", "string");
937
-
938
- const aggregate = request.input.body.aggregate.toUpperCase();
939
-
940
- if (["SUM", "MIN", "MAX"].indexOf(aggregate) === -1) {
941
- throw kerror.get(
942
- "invalid_argument",
943
- "aggregate",
944
- '"SUM", "MIN" or "MAX"',
945
- );
946
- }
947
-
948
- args.push("AGGREGATE", aggregate);
949
- }
950
-
951
- return args;
952
- }
953
-
954
- /**
955
- * Throws with a standardized error message if "value"
956
- * is not a float
957
- *
958
- * @param {Request} request
959
- * @param {string} name of the tested parameter
960
- * @param {*} value of the tested parameter
961
- * @throws
962
- */
963
- function assertFloat(request, name, value) {
964
- // Number.parseXxx computes the 1st member of an array if one is provided
965
- if (Array.isArray(value) || Number.isNaN(Number.parseFloat(value))) {
966
- throw kerror.get("invalid_type", name, "number");
967
- }
968
- }
969
-
970
- /**
971
- * Throws with a standardized error message if "value"
972
- * is not an integer
973
- *
974
- * @param {Request} request
975
- * @param {string} name of the tested parameter
976
- * @param {*} value of the tested parameter
977
- * @throws
978
- */
979
- function assertInt(request, name, value) {
980
- // Number.parseXxx computes the 1st member of an array if one is provided
981
- if (Array.isArray(value) || Number.isNaN(Number.parseInt(value))) {
982
- throw kerror.get("invalid_type", name, "integer");
983
- }
984
- }
985
-
986
- /**
987
- * Deal with arguments being either an array or a string: return the array
988
- * intact if it's the former, and convert it to an array if it's a string
989
- * @param {Array|String} arg
990
- * @returns {Array}
991
- */
992
- function toArray(arg) {
993
- return typeof arg === "string" ? arg.split(",") : arg;
994
- }
995
-
996
- /**
997
- * Sanitize an array argument, converting it from a string if necessary
998
- * @param {Array|String} arg
999
- * @returns {Array}
1000
- */
1001
- function sanitizeArrayArgument(arg) {
1002
- const result = toArray(arg);
1003
-
1004
- return result.map((v) => (typeof v === "string" ? v.toUpperCase() : v));
1005
- }
1006
-
1007
- /**
1008
- * Parse a LIMIT argument and throws if not a valid LIMIT parameter
1009
- * @param {Array} arg
1010
- * @throws
1011
- */
1012
- function processLimit(arg) {
1013
- let result = ["LIMIT"];
1014
-
1015
- result = result.concat(toArray(arg));
1016
-
1017
- // "result" should contain LIMIT offset count
1018
- if (result.length !== 3) {
1019
- throw kerror.get("invalid_argument", "limit", "<offset, count>");
1020
- }
1021
-
1022
- return result;
1023
- }