kuzzle 2.49.1 → 2.50.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. package/dist/bin/check-node-version.js +11 -0
  2. package/dist/bin/copy-protobuf.js +17 -0
  3. package/dist/lib/api/controllers/adminController.d.ts +51 -0
  4. package/dist/lib/api/controllers/adminController.js +191 -0
  5. package/{lib → dist/lib}/api/controllers/authController.d.ts +20 -40
  6. package/{lib → dist/lib}/api/controllers/authController.js +23 -24
  7. package/dist/lib/api/controllers/bulkController.d.ts +46 -0
  8. package/dist/lib/api/controllers/bulkController.js +132 -0
  9. package/dist/lib/api/controllers/clusterController.d.ts +6 -0
  10. package/{lib → dist/lib}/api/controllers/clusterController.js +7 -11
  11. package/dist/lib/api/controllers/collectionController.d.ts +136 -0
  12. package/dist/lib/api/controllers/collectionController.js +356 -0
  13. package/dist/lib/api/controllers/documentController.d.ts +181 -0
  14. package/dist/lib/api/controllers/documentController.js +768 -0
  15. package/dist/lib/api/controllers/index.d.ts +12 -0
  16. package/{lib → dist/lib}/api/controllers/index.js +13 -14
  17. package/dist/lib/api/controllers/indexController.d.ts +65 -0
  18. package/dist/lib/api/controllers/indexController.js +139 -0
  19. package/dist/lib/api/controllers/memoryStorageController.d.ts +8 -0
  20. package/dist/lib/api/controllers/memoryStorageController.js +867 -0
  21. package/dist/lib/api/controllers/realtimeController.d.ts +47 -0
  22. package/dist/lib/api/controllers/realtimeController.js +128 -0
  23. package/dist/lib/api/controllers/securityController.d.ts +423 -0
  24. package/dist/lib/api/controllers/securityController.js +1139 -0
  25. package/dist/lib/api/controllers/serverController.d.ts +82 -0
  26. package/dist/lib/api/controllers/serverController.js +321 -0
  27. package/dist/lib/api/documentExtractor.d.ts +9 -0
  28. package/dist/lib/api/documentExtractor.js +274 -0
  29. package/dist/lib/api/funnel.d.ts +183 -0
  30. package/dist/lib/api/funnel.js +821 -0
  31. package/dist/lib/api/httpRoutes.d.ts +17 -0
  32. package/dist/lib/api/httpRoutes.js +1496 -0
  33. package/dist/lib/api/rateLimiter.d.ts +18 -0
  34. package/dist/lib/api/rateLimiter.js +74 -0
  35. package/{lib → dist/lib}/api/request/kuzzleRequest.d.ts +2 -2
  36. package/{lib → dist/lib}/api/request/requestContext.d.ts +2 -1
  37. package/dist/lib/cluster/command.d.ts +73 -0
  38. package/dist/lib/cluster/command.js +236 -0
  39. package/dist/lib/cluster/index.d.ts +2 -0
  40. package/{lib → dist/lib}/cluster/index.js +1 -2
  41. package/dist/lib/cluster/node.d.ts +278 -0
  42. package/dist/lib/cluster/node.js +876 -0
  43. package/dist/lib/cluster/publisher.d.ts +188 -0
  44. package/dist/lib/cluster/publisher.js +347 -0
  45. package/dist/lib/cluster/subscriber.d.ts +269 -0
  46. package/dist/lib/cluster/subscriber.js +555 -0
  47. package/dist/lib/cluster/workers/IDCardRenewer.d.ts +13 -0
  48. package/dist/lib/cluster/workers/IDCardRenewer.js +120 -0
  49. package/{lib → dist/lib}/config/documentEventAliases.d.ts +1 -2
  50. package/dist/lib/config/index.d.ts +5 -0
  51. package/dist/lib/config/index.js +244 -0
  52. package/dist/lib/config/sdkCompatibility.json +9 -0
  53. package/dist/lib/core/auth/formatProcessing.d.ts +30 -0
  54. package/dist/lib/core/auth/formatProcessing.js +55 -0
  55. package/dist/lib/core/auth/passportResponse.d.ts +15 -0
  56. package/{lib → dist/lib}/core/auth/passportResponse.js +24 -30
  57. package/dist/lib/core/auth/passportWrapper.d.ts +28 -0
  58. package/dist/lib/core/auth/passportWrapper.js +126 -0
  59. package/{lib → dist/lib}/core/backend/backendConfig.js +2 -2
  60. package/{lib → dist/lib}/core/backend/backendErrors.js +9 -12
  61. package/dist/lib/core/cache/cacheEngine.d.ts +15 -0
  62. package/dist/lib/core/cache/cacheEngine.js +205 -0
  63. package/dist/lib/core/network/accessLogger.d.ts +29 -0
  64. package/dist/lib/core/network/accessLogger.js +250 -0
  65. package/dist/lib/core/network/clientConnection.d.ts +15 -0
  66. package/{lib → dist/lib}/core/network/clientConnection.js +17 -24
  67. package/dist/lib/core/network/context.d.ts +42 -0
  68. package/dist/lib/core/network/context.js +57 -0
  69. package/dist/lib/core/network/entryPoint.d.ts +62 -0
  70. package/dist/lib/core/network/entryPoint.js +261 -0
  71. package/dist/lib/core/network/httpRouter/index.d.ts +85 -0
  72. package/dist/lib/core/network/httpRouter/index.js +258 -0
  73. package/dist/lib/core/network/httpRouter/routeHandler.d.ts +46 -0
  74. package/dist/lib/core/network/httpRouter/routeHandler.js +101 -0
  75. package/dist/lib/core/network/httpRouter/routePart.d.ts +35 -0
  76. package/dist/lib/core/network/httpRouter/routePart.js +117 -0
  77. package/dist/lib/core/network/protocolManifest.d.ts +6 -0
  78. package/{lib → dist/lib}/core/network/protocolManifest.js +5 -9
  79. package/dist/lib/core/network/protocols/httpMessage.d.ts +22 -0
  80. package/dist/lib/core/network/protocols/httpMessage.js +62 -0
  81. package/dist/lib/core/network/protocols/httpwsProtocol.d.ts +171 -0
  82. package/dist/lib/core/network/protocols/httpwsProtocol.js +921 -0
  83. package/dist/lib/core/network/protocols/internalProtocol.d.ts +27 -0
  84. package/dist/lib/core/network/protocols/internalProtocol.js +82 -0
  85. package/dist/lib/core/network/protocols/mqttProtocol.d.ts +39 -0
  86. package/dist/lib/core/network/protocols/mqttProtocol.js +219 -0
  87. package/dist/lib/core/network/protocols/protocol.d.ts +26 -0
  88. package/dist/lib/core/network/protocols/protocol.js +74 -0
  89. package/dist/lib/core/network/router.d.ts +49 -0
  90. package/dist/lib/core/network/router.js +193 -0
  91. package/dist/lib/core/plugin/plugin.d.ts +56 -0
  92. package/dist/lib/core/plugin/plugin.js +282 -0
  93. package/{lib → dist/lib}/core/plugin/pluginContext.js +2 -2
  94. package/dist/lib/core/plugin/pluginManifest.d.ts +5 -0
  95. package/{lib → dist/lib}/core/plugin/pluginManifest.js +16 -27
  96. package/dist/lib/core/plugin/pluginRepository.d.ts +53 -0
  97. package/dist/lib/core/plugin/pluginRepository.js +112 -0
  98. package/dist/lib/core/plugin/pluginsManager.d.ts +190 -0
  99. package/dist/lib/core/plugin/pluginsManager.js +817 -0
  100. package/dist/lib/core/plugin/privilegedContext.d.ts +14 -0
  101. package/{lib → dist/lib}/core/plugin/privilegedContext.js +10 -14
  102. package/dist/lib/core/realtime/actionEnum.d.ts +25 -0
  103. package/{lib → dist/lib}/core/realtime/actionEnum.js +7 -10
  104. package/dist/lib/core/realtime/index.d.ts +8 -0
  105. package/{lib → dist/lib}/core/realtime/index.js +9 -13
  106. package/dist/lib/core/realtime/notification/document.d.ts +34 -0
  107. package/dist/lib/core/realtime/notification/document.js +98 -0
  108. package/dist/lib/core/realtime/notification/index.d.ts +3 -0
  109. package/{lib → dist/lib}/core/realtime/notification/index.js +4 -5
  110. package/dist/lib/core/realtime/notification/server.d.ts +17 -0
  111. package/{lib → dist/lib}/core/realtime/notification/server.js +8 -10
  112. package/dist/lib/core/realtime/notification/user.d.ts +29 -0
  113. package/dist/lib/core/realtime/notification/user.js +66 -0
  114. package/dist/lib/core/realtime/notifier.d.ts +171 -0
  115. package/dist/lib/core/realtime/notifier.js +405 -0
  116. package/dist/lib/core/security/index.d.ts +14 -0
  117. package/{lib → dist/lib}/core/security/index.js +15 -19
  118. package/dist/lib/core/security/roleRepository.d.ts +143 -0
  119. package/dist/lib/core/security/roleRepository.js +445 -0
  120. package/dist/lib/core/security/securityLoader.d.ts +24 -0
  121. package/dist/lib/core/security/securityLoader.js +125 -0
  122. package/{lib → dist/lib}/core/security/tokenRepository.js +1 -1
  123. package/dist/lib/core/security/userRepository.d.ts +81 -0
  124. package/dist/lib/core/security/userRepository.js +346 -0
  125. package/dist/lib/core/shared/abstractManifest.d.ts +27 -0
  126. package/dist/lib/core/shared/abstractManifest.js +85 -0
  127. package/dist/lib/core/shared/sdk/impersonatedSdk.d.ts +7 -0
  128. package/dist/lib/core/shared/sdk/impersonatedSdk.js +80 -0
  129. package/{lib → dist/lib}/core/shared/store.d.ts +2 -2
  130. package/dist/lib/core/statistics/statistics.d.ts +94 -0
  131. package/dist/lib/core/statistics/statistics.js +287 -0
  132. package/dist/lib/core/storage/clientAdapter.d.ts +62 -0
  133. package/dist/lib/core/storage/clientAdapter.js +756 -0
  134. package/dist/lib/core/storage/storageEngine.d.ts +13 -0
  135. package/dist/lib/core/storage/storageEngine.js +52 -0
  136. package/dist/lib/core/validation/baseType.d.ts +35 -0
  137. package/dist/lib/core/validation/baseType.js +70 -0
  138. package/dist/lib/core/validation/types/anything.d.ts +10 -0
  139. package/{lib → dist/lib}/core/validation/types/anything.js +7 -10
  140. package/dist/lib/core/validation/types/boolean.d.ts +16 -0
  141. package/{lib → dist/lib}/core/validation/types/boolean.js +18 -23
  142. package/dist/lib/core/validation/types/date.d.ts +17 -0
  143. package/dist/lib/core/validation/types/date.js +215 -0
  144. package/dist/lib/core/validation/types/email.d.ts +17 -0
  145. package/dist/lib/core/validation/types/email.js +80 -0
  146. package/dist/lib/core/validation/types/enum.d.ts +17 -0
  147. package/dist/lib/core/validation/types/enum.js +70 -0
  148. package/dist/lib/core/validation/types/geoPoint.d.ts +17 -0
  149. package/{lib → dist/lib}/core/validation/types/geoPoint.js +19 -24
  150. package/dist/lib/core/validation/types/geoShape.d.ts +31 -0
  151. package/dist/lib/core/validation/types/geoShape.js +280 -0
  152. package/dist/lib/core/validation/types/integer.d.ts +7 -0
  153. package/{lib → dist/lib}/core/validation/types/integer.js +21 -27
  154. package/dist/lib/core/validation/types/ipAddress.d.ts +17 -0
  155. package/dist/lib/core/validation/types/ipAddress.js +73 -0
  156. package/dist/lib/core/validation/types/numeric.d.ts +17 -0
  157. package/dist/lib/core/validation/types/numeric.js +84 -0
  158. package/dist/lib/core/validation/types/object.d.ts +24 -0
  159. package/dist/lib/core/validation/types/object.js +74 -0
  160. package/dist/lib/core/validation/types/string.d.ts +17 -0
  161. package/dist/lib/core/validation/types/string.js +85 -0
  162. package/dist/lib/core/validation/types/url.d.ts +17 -0
  163. package/dist/lib/core/validation/types/url.js +73 -0
  164. package/dist/lib/core/validation/validation.d.ts +113 -0
  165. package/dist/lib/core/validation/validation.js +692 -0
  166. package/dist/lib/kerror/codes/0-core.json +194 -0
  167. package/dist/lib/kerror/codes/1-services.json +351 -0
  168. package/dist/lib/kerror/codes/2-api.json +195 -0
  169. package/dist/lib/kerror/codes/3-network.json +151 -0
  170. package/dist/lib/kerror/codes/4-plugin.json +498 -0
  171. package/dist/lib/kerror/codes/5-validation.json +158 -0
  172. package/dist/lib/kerror/codes/6-protocol.json +28 -0
  173. package/dist/lib/kerror/codes/7-security.json +283 -0
  174. package/dist/lib/kerror/codes/8-cluster.json +16 -0
  175. package/dist/lib/kerror/codes/index.d.ts +24 -0
  176. package/dist/lib/kerror/codes/index.js +140 -0
  177. package/{lib → dist/lib}/kerror/index.d.ts +5 -5
  178. package/{lib → dist/lib}/kuzzle/Logger.d.ts +6 -0
  179. package/{lib → dist/lib}/kuzzle/Logger.js +26 -5
  180. package/dist/lib/kuzzle/dumpGenerator.d.ts +14 -0
  181. package/dist/lib/kuzzle/dumpGenerator.js +180 -0
  182. package/dist/lib/kuzzle/event/pipeRunner.d.ts +30 -0
  183. package/dist/lib/kuzzle/event/pipeRunner.js +119 -0
  184. package/dist/lib/kuzzle/event/waterfall.d.ts +2 -0
  185. package/dist/lib/kuzzle/event/waterfall.js +90 -0
  186. package/dist/lib/kuzzle/internalIndexHandler.d.ts +186 -0
  187. package/dist/lib/kuzzle/internalIndexHandler.js +174 -0
  188. package/{lib → dist/lib}/kuzzle/kuzzle.d.ts +6 -7
  189. package/{lib → dist/lib}/kuzzle/kuzzle.js +5 -2
  190. package/dist/lib/kuzzle/kuzzleStateEnum.d.ts +20 -0
  191. package/{lib → dist/lib}/kuzzle/kuzzleStateEnum.js +5 -8
  192. package/dist/lib/kuzzle/vault.d.ts +2 -0
  193. package/dist/lib/kuzzle/vault.js +63 -0
  194. package/dist/lib/model/security/rights.d.ts +8 -0
  195. package/{lib → dist/lib}/model/security/rights.js +4 -8
  196. package/{lib → dist/lib}/model/security/role.d.ts +1 -1
  197. package/{lib → dist/lib}/model/security/user.d.ts +1 -0
  198. package/dist/lib/model/storage/apiKey.d.ts +49 -0
  199. package/dist/lib/model/storage/apiKey.js +126 -0
  200. package/dist/lib/model/storage/baseModel.d.ts +100 -0
  201. package/dist/lib/model/storage/baseModel.js +211 -0
  202. package/dist/lib/service/cache/redis.d.ts +74 -0
  203. package/dist/lib/service/cache/redis.js +237 -0
  204. package/dist/lib/service/service.d.ts +30 -0
  205. package/dist/lib/service/service.js +74 -0
  206. package/{lib → dist/lib}/service/storage/7/elasticsearch.d.ts +2 -2
  207. package/{lib → dist/lib}/service/storage/7/elasticsearch.js +23 -25
  208. package/dist/lib/service/storage/7/esWrapper.d.ts +19 -0
  209. package/dist/lib/service/storage/7/esWrapper.js +245 -0
  210. package/{lib → dist/lib}/service/storage/8/elasticsearch.js +23 -25
  211. package/dist/lib/service/storage/8/esWrapper.d.ts +19 -0
  212. package/dist/lib/service/storage/8/esWrapper.js +245 -0
  213. package/{lib → dist/lib}/types/Plugin.d.ts +1 -1
  214. package/{lib/types → dist/lib/types/controllers}/Controller.d.ts +2 -2
  215. package/{lib/types → dist/lib/types/controllers}/ControllerDefinition.d.ts +1 -1
  216. package/dist/lib/types/controllers/adminControlller.type.d.ts +5 -0
  217. package/dist/lib/types/controllers/adminControlller.type.js +3 -0
  218. package/dist/lib/types/controllers/authController.type.d.ts +5 -0
  219. package/dist/lib/types/controllers/authController.type.js +3 -0
  220. package/dist/lib/types/core/auth/formatProcessing.type.d.ts +7 -0
  221. package/dist/lib/types/core/auth/formatProcessing.type.js +3 -0
  222. package/{lib → dist/lib}/types/index.d.ts +3 -3
  223. package/{lib → dist/lib}/types/index.js +3 -3
  224. package/dist/lib/util/assertType.d.ts +41 -0
  225. package/{lib → dist/lib}/util/assertType.js +38 -56
  226. package/dist/lib/util/asyncStore.d.ts +38 -0
  227. package/dist/lib/util/asyncStore.js +70 -0
  228. package/dist/lib/util/bytes.d.ts +2 -0
  229. package/dist/lib/util/bytes.js +33 -0
  230. package/dist/lib/util/debug.d.ts +2 -0
  231. package/{lib → dist/lib}/util/debug.js +15 -23
  232. package/dist/lib/util/deprecate.d.ts +1 -0
  233. package/dist/lib/util/deprecate.js +64 -0
  234. package/dist/lib/util/didYouMean.d.ts +2 -0
  235. package/{lib → dist/lib}/util/didYouMean.js +9 -15
  236. package/dist/lib/util/extractFields.d.ts +17 -0
  237. package/{lib → dist/lib}/util/extractFields.js +18 -32
  238. package/dist/lib/util/memoize.d.ts +7 -0
  239. package/{lib → dist/lib}/util/memoize.js +14 -21
  240. package/dist/lib/util/promback.d.ts +13 -0
  241. package/dist/lib/util/promback.js +60 -0
  242. package/dist/lib/util/requestAssertions.d.ts +10 -0
  243. package/dist/lib/util/requestAssertions.js +143 -0
  244. package/dist/lib/util/safeObject.d.ts +3 -0
  245. package/{lib → dist/lib}/util/safeObject.js +7 -13
  246. package/dist/lib/util/stackTrace.d.ts +19 -0
  247. package/{lib → dist/lib}/util/stackTrace.js +35 -41
  248. package/dist/lib/util/wildcard.d.ts +1 -0
  249. package/{lib → dist/lib}/util/wildcard.js +21 -30
  250. package/dist/package.json +120 -0
  251. package/package.json +45 -58
  252. package/bin/start-kuzzle-server +0 -126
  253. package/check-node-version.js +0 -17
  254. package/lib/api/controllers/adminController.js +0 -229
  255. package/lib/api/controllers/bulkController.js +0 -210
  256. package/lib/api/controllers/collectionController.js +0 -502
  257. package/lib/api/controllers/documentController.js +0 -1156
  258. package/lib/api/controllers/indexController.js +0 -179
  259. package/lib/api/controllers/memoryStorageController.js +0 -1023
  260. package/lib/api/controllers/realtimeController.js +0 -155
  261. package/lib/api/controllers/securityController.js +0 -1571
  262. package/lib/api/controllers/serverController.js +0 -381
  263. package/lib/api/documentExtractor.js +0 -309
  264. package/lib/api/funnel.js +0 -1143
  265. package/lib/api/httpRoutes.js +0 -1547
  266. package/lib/api/rateLimiter.js +0 -87
  267. package/lib/cluster/command.js +0 -284
  268. package/lib/cluster/node.js +0 -1203
  269. package/lib/cluster/publisher.js +0 -386
  270. package/lib/cluster/subscriber.js +0 -776
  271. package/lib/cluster/workers/IDCardRenewer.js +0 -144
  272. package/lib/config/index.js +0 -351
  273. package/lib/config/sdkCompatibility.json +0 -9
  274. package/lib/core/auth/formatProcessing.js +0 -66
  275. package/lib/core/auth/passportWrapper.js +0 -126
  276. package/lib/core/cache/cacheEngine.js +0 -278
  277. package/lib/core/network/accessLogger.js +0 -322
  278. package/lib/core/network/context.js +0 -80
  279. package/lib/core/network/entryPoint.js +0 -358
  280. package/lib/core/network/httpRouter/index.js +0 -316
  281. package/lib/core/network/httpRouter/routeHandler.js +0 -111
  282. package/lib/core/network/httpRouter/routePart.js +0 -147
  283. package/lib/core/network/protocols/httpMessage.js +0 -69
  284. package/lib/core/network/protocols/httpwsProtocol.js +0 -1254
  285. package/lib/core/network/protocols/internalProtocol.js +0 -109
  286. package/lib/core/network/protocols/mqttProtocol.js +0 -291
  287. package/lib/core/network/protocols/protocol.js +0 -102
  288. package/lib/core/network/router.js +0 -255
  289. package/lib/core/plugin/plugin.js +0 -436
  290. package/lib/core/plugin/pluginRepository.js +0 -132
  291. package/lib/core/plugin/pluginsManager.js +0 -1244
  292. package/lib/core/realtime/notification/document.js +0 -108
  293. package/lib/core/realtime/notification/user.js +0 -70
  294. package/lib/core/realtime/notifier.js +0 -541
  295. package/lib/core/security/README.md +0 -223
  296. package/lib/core/security/roleRepository.js +0 -569
  297. package/lib/core/security/securityLoader.js +0 -174
  298. package/lib/core/security/userRepository.js +0 -446
  299. package/lib/core/shared/README.md +0 -3
  300. package/lib/core/shared/abstractManifest.js +0 -102
  301. package/lib/core/shared/sdk/impersonatedSdk.js +0 -94
  302. package/lib/core/statistics/index.js +0 -24
  303. package/lib/core/statistics/statistics.js +0 -373
  304. package/lib/core/storage/clientAdapter.js +0 -1045
  305. package/lib/core/storage/storageEngine.js +0 -63
  306. package/lib/core/validation/baseType.js +0 -80
  307. package/lib/core/validation/index.js +0 -24
  308. package/lib/core/validation/types/date.js +0 -284
  309. package/lib/core/validation/types/email.js +0 -92
  310. package/lib/core/validation/types/enum.js +0 -100
  311. package/lib/core/validation/types/geoShape.js +0 -370
  312. package/lib/core/validation/types/ipAddress.js +0 -83
  313. package/lib/core/validation/types/numeric.js +0 -108
  314. package/lib/core/validation/types/object.js +0 -88
  315. package/lib/core/validation/types/string.js +0 -110
  316. package/lib/core/validation/types/url.js +0 -83
  317. package/lib/core/validation/validation.js +0 -1180
  318. package/lib/kerror/codes/0-core.json +0 -194
  319. package/lib/kerror/codes/1-services.json +0 -351
  320. package/lib/kerror/codes/2-api.json +0 -195
  321. package/lib/kerror/codes/3-network.json +0 -151
  322. package/lib/kerror/codes/4-plugin.json +0 -498
  323. package/lib/kerror/codes/5-validation.json +0 -158
  324. package/lib/kerror/codes/6-protocol.json +0 -28
  325. package/lib/kerror/codes/7-security.json +0 -283
  326. package/lib/kerror/codes/8-cluster.json +0 -16
  327. package/lib/kerror/codes/index.js +0 -208
  328. package/lib/kuzzle/dumpGenerator.js +0 -259
  329. package/lib/kuzzle/event/pipeRunner.js +0 -144
  330. package/lib/kuzzle/event/waterfall.js +0 -101
  331. package/lib/kuzzle/internalIndexHandler.js +0 -234
  332. package/lib/kuzzle/vault.js +0 -89
  333. package/lib/model/storage/apiKey.js +0 -158
  334. package/lib/model/storage/baseModel.js +0 -275
  335. package/lib/service/cache/redis.js +0 -282
  336. package/lib/service/service.js +0 -84
  337. package/lib/service/storage/7/esWrapper.js +0 -303
  338. package/lib/service/storage/8/esWrapper.js +0 -303
  339. package/lib/util/asyncStore.js +0 -112
  340. package/lib/util/bytes.js +0 -36
  341. package/lib/util/deprecate.js +0 -82
  342. package/lib/util/promback.js +0 -66
  343. package/lib/util/readYamlFile.d.ts +0 -2
  344. package/lib/util/readYamlFile.js +0 -10
  345. package/lib/util/requestAssertions.js +0 -157
  346. /package/{index.d.ts → dist/index.d.ts} +0 -0
  347. /package/{index.js → dist/index.js} +0 -0
  348. /package/{lib → dist/lib}/api/controllers/baseController.d.ts +0 -0
  349. /package/{lib → dist/lib}/api/controllers/baseController.js +0 -0
  350. /package/{lib → dist/lib}/api/controllers/debugController.d.ts +0 -0
  351. /package/{lib → dist/lib}/api/controllers/debugController.js +0 -0
  352. /package/{lib → dist/lib}/api/openapi/OpenApiManager.d.ts +0 -0
  353. /package/{lib → dist/lib}/api/openapi/OpenApiManager.js +0 -0
  354. /package/{lib → dist/lib}/api/openapi/index.d.ts +0 -0
  355. /package/{lib → dist/lib}/api/openapi/index.js +0 -0
  356. /package/{lib → dist/lib}/api/openapi/openApiGenerator.d.ts +0 -0
  357. /package/{lib → dist/lib}/api/openapi/openApiGenerator.js +0 -0
  358. /package/{lib → dist/lib}/api/request/index.d.ts +0 -0
  359. /package/{lib → dist/lib}/api/request/index.js +0 -0
  360. /package/{lib → dist/lib}/api/request/kuzzleRequest.js +0 -0
  361. /package/{lib → dist/lib}/api/request/requestContext.js +0 -0
  362. /package/{lib → dist/lib}/api/request/requestInput.d.ts +0 -0
  363. /package/{lib → dist/lib}/api/request/requestInput.js +0 -0
  364. /package/{lib → dist/lib}/api/request/requestResponse.d.ts +0 -0
  365. /package/{lib → dist/lib}/api/request/requestResponse.js +0 -0
  366. /package/{lib → dist/lib}/cluster/idCardHandler.d.ts +0 -0
  367. /package/{lib → dist/lib}/cluster/idCardHandler.js +0 -0
  368. /package/{lib → dist/lib}/cluster/protobuf/command.proto +0 -0
  369. /package/{lib → dist/lib}/cluster/protobuf/sync.proto +0 -0
  370. /package/{lib → dist/lib}/cluster/state.d.ts +0 -0
  371. /package/{lib → dist/lib}/cluster/state.js +0 -0
  372. /package/{lib → dist/lib}/config/default.config.d.ts +0 -0
  373. /package/{lib → dist/lib}/config/default.config.js +0 -0
  374. /package/{lib → dist/lib}/config/documentEventAliases.js +0 -0
  375. /package/{lib → dist/lib}/core/auth/tokenManager.d.ts +0 -0
  376. /package/{lib → dist/lib}/core/auth/tokenManager.js +0 -0
  377. /package/{lib → dist/lib}/core/backend/applicationManager.d.ts +0 -0
  378. /package/{lib → dist/lib}/core/backend/applicationManager.js +0 -0
  379. /package/{lib → dist/lib}/core/backend/backend.d.ts +0 -0
  380. /package/{lib → dist/lib}/core/backend/backend.js +0 -0
  381. /package/{lib → dist/lib}/core/backend/backendCluster.d.ts +0 -0
  382. /package/{lib → dist/lib}/core/backend/backendCluster.js +0 -0
  383. /package/{lib → dist/lib}/core/backend/backendConfig.d.ts +0 -0
  384. /package/{lib → dist/lib}/core/backend/backendController.d.ts +0 -0
  385. /package/{lib → dist/lib}/core/backend/backendController.js +0 -0
  386. /package/{lib → dist/lib}/core/backend/backendErrors.d.ts +0 -0
  387. /package/{lib → dist/lib}/core/backend/backendHook.d.ts +0 -0
  388. /package/{lib → dist/lib}/core/backend/backendHook.js +0 -0
  389. /package/{lib → dist/lib}/core/backend/backendImport.d.ts +0 -0
  390. /package/{lib → dist/lib}/core/backend/backendImport.js +0 -0
  391. /package/{lib → dist/lib}/core/backend/backendOpenApi.d.ts +0 -0
  392. /package/{lib → dist/lib}/core/backend/backendOpenApi.js +0 -0
  393. /package/{lib → dist/lib}/core/backend/backendPipe.d.ts +0 -0
  394. /package/{lib → dist/lib}/core/backend/backendPipe.js +0 -0
  395. /package/{lib → dist/lib}/core/backend/backendPlugin.d.ts +0 -0
  396. /package/{lib → dist/lib}/core/backend/backendPlugin.js +0 -0
  397. /package/{lib → dist/lib}/core/backend/backendStorage.d.ts +0 -0
  398. /package/{lib → dist/lib}/core/backend/backendStorage.js +0 -0
  399. /package/{lib → dist/lib}/core/backend/backendSubscription.d.ts +0 -0
  400. /package/{lib → dist/lib}/core/backend/backendSubscription.js +0 -0
  401. /package/{lib → dist/lib}/core/backend/backendVault.d.ts +0 -0
  402. /package/{lib → dist/lib}/core/backend/backendVault.js +0 -0
  403. /package/{lib → dist/lib}/core/backend/index.d.ts +0 -0
  404. /package/{lib → dist/lib}/core/backend/index.js +0 -0
  405. /package/{lib → dist/lib}/core/backend/internalLogger.d.ts +0 -0
  406. /package/{lib → dist/lib}/core/backend/internalLogger.js +0 -0
  407. /package/{lib → dist/lib}/core/cache/cacheDbEnum.d.ts +0 -0
  408. /package/{lib → dist/lib}/core/cache/cacheDbEnum.js +0 -0
  409. /package/{lib → dist/lib}/core/debug/kuzzleDebugger.d.ts +0 -0
  410. /package/{lib → dist/lib}/core/debug/kuzzleDebugger.js +0 -0
  411. /package/{lib → dist/lib}/core/plugin/pluginContext.d.ts +0 -0
  412. /package/{lib → dist/lib}/core/realtime/channel.d.ts +0 -0
  413. /package/{lib → dist/lib}/core/realtime/channel.js +0 -0
  414. /package/{lib → dist/lib}/core/realtime/connectionRooms.d.ts +0 -0
  415. /package/{lib → dist/lib}/core/realtime/connectionRooms.js +0 -0
  416. /package/{lib → dist/lib}/core/realtime/hotelClerk.d.ts +0 -0
  417. /package/{lib → dist/lib}/core/realtime/hotelClerk.js +0 -0
  418. /package/{lib → dist/lib}/core/realtime/room.d.ts +0 -0
  419. /package/{lib → dist/lib}/core/realtime/room.js +0 -0
  420. /package/{lib → dist/lib}/core/realtime/subscription.d.ts +0 -0
  421. /package/{lib → dist/lib}/core/realtime/subscription.js +0 -0
  422. /package/{lib → dist/lib}/core/security/profileRepository.d.ts +0 -0
  423. /package/{lib → dist/lib}/core/security/profileRepository.js +0 -0
  424. /package/{lib → dist/lib}/core/security/tokenRepository.d.ts +0 -0
  425. /package/{lib → dist/lib}/core/shared/KoncordeWrapper.d.ts +0 -0
  426. /package/{lib → dist/lib}/core/shared/KoncordeWrapper.js +0 -0
  427. /package/{lib → dist/lib}/core/shared/ObjectRepository.d.ts +0 -0
  428. /package/{lib → dist/lib}/core/shared/ObjectRepository.js +0 -0
  429. /package/{lib → dist/lib}/core/shared/sdk/embeddedSdk.d.ts +0 -0
  430. /package/{lib → dist/lib}/core/shared/sdk/embeddedSdk.js +0 -0
  431. /package/{lib → dist/lib}/core/shared/sdk/funnelProtocol.d.ts +0 -0
  432. /package/{lib → dist/lib}/core/shared/sdk/funnelProtocol.js +0 -0
  433. /package/{lib → dist/lib}/core/shared/store.js +0 -0
  434. /package/{lib → dist/lib}/core/storage/indexCache.d.ts +0 -0
  435. /package/{lib → dist/lib}/core/storage/indexCache.js +0 -0
  436. /package/{lib → dist/lib}/core/storage/storeScopeEnum.d.ts +0 -0
  437. /package/{lib → dist/lib}/core/storage/storeScopeEnum.js +0 -0
  438. /package/{lib → dist/lib}/kerror/errors/badRequestError.d.ts +0 -0
  439. /package/{lib → dist/lib}/kerror/errors/badRequestError.js +0 -0
  440. /package/{lib → dist/lib}/kerror/errors/externalServiceError.d.ts +0 -0
  441. /package/{lib → dist/lib}/kerror/errors/externalServiceError.js +0 -0
  442. /package/{lib → dist/lib}/kerror/errors/forbiddenError.d.ts +0 -0
  443. /package/{lib → dist/lib}/kerror/errors/forbiddenError.js +0 -0
  444. /package/{lib → dist/lib}/kerror/errors/gatewayTimeoutError.d.ts +0 -0
  445. /package/{lib → dist/lib}/kerror/errors/gatewayTimeoutError.js +0 -0
  446. /package/{lib → dist/lib}/kerror/errors/index.d.ts +0 -0
  447. /package/{lib → dist/lib}/kerror/errors/index.js +0 -0
  448. /package/{lib → dist/lib}/kerror/errors/internalError.d.ts +0 -0
  449. /package/{lib → dist/lib}/kerror/errors/internalError.js +0 -0
  450. /package/{lib → dist/lib}/kerror/errors/kuzzleError.d.ts +0 -0
  451. /package/{lib → dist/lib}/kerror/errors/kuzzleError.js +0 -0
  452. /package/{lib → dist/lib}/kerror/errors/multipleErrorsError.d.ts +0 -0
  453. /package/{lib → dist/lib}/kerror/errors/multipleErrorsError.js +0 -0
  454. /package/{lib → dist/lib}/kerror/errors/notFoundError.d.ts +0 -0
  455. /package/{lib → dist/lib}/kerror/errors/notFoundError.js +0 -0
  456. /package/{lib → dist/lib}/kerror/errors/partialError.d.ts +0 -0
  457. /package/{lib → dist/lib}/kerror/errors/partialError.js +0 -0
  458. /package/{lib → dist/lib}/kerror/errors/pluginImplementationError.d.ts +0 -0
  459. /package/{lib → dist/lib}/kerror/errors/pluginImplementationError.js +0 -0
  460. /package/{lib → dist/lib}/kerror/errors/preconditionError.d.ts +0 -0
  461. /package/{lib → dist/lib}/kerror/errors/preconditionError.js +0 -0
  462. /package/{lib → dist/lib}/kerror/errors/serviceUnavailableError.d.ts +0 -0
  463. /package/{lib → dist/lib}/kerror/errors/serviceUnavailableError.js +0 -0
  464. /package/{lib → dist/lib}/kerror/errors/sizeLimitError.d.ts +0 -0
  465. /package/{lib → dist/lib}/kerror/errors/sizeLimitError.js +0 -0
  466. /package/{lib → dist/lib}/kerror/errors/tooManyRequestsError.d.ts +0 -0
  467. /package/{lib → dist/lib}/kerror/errors/tooManyRequestsError.js +0 -0
  468. /package/{lib → dist/lib}/kerror/errors/unauthorizedError.d.ts +0 -0
  469. /package/{lib → dist/lib}/kerror/errors/unauthorizedError.js +0 -0
  470. /package/{lib → dist/lib}/kerror/index.js +0 -0
  471. /package/{lib → dist/lib}/kuzzle/event/KuzzleEventEmitter.d.ts +0 -0
  472. /package/{lib → dist/lib}/kuzzle/event/KuzzleEventEmitter.js +0 -0
  473. /package/{lib → dist/lib}/kuzzle/index.d.ts +0 -0
  474. /package/{lib → dist/lib}/kuzzle/index.js +0 -0
  475. /package/{lib → dist/lib}/model/security/profile.d.ts +0 -0
  476. /package/{lib → dist/lib}/model/security/profile.js +0 -0
  477. /package/{lib → dist/lib}/model/security/role.js +0 -0
  478. /package/{lib → dist/lib}/model/security/token.d.ts +0 -0
  479. /package/{lib → dist/lib}/model/security/token.js +0 -0
  480. /package/{lib → dist/lib}/model/security/user.js +0 -0
  481. /package/{lib → dist/lib}/service/storage/8/elasticsearch.d.ts +0 -0
  482. /package/{lib → dist/lib}/service/storage/Elasticsearch.d.ts +0 -0
  483. /package/{lib → dist/lib}/service/storage/Elasticsearch.js +0 -0
  484. /package/{lib → dist/lib}/service/storage/commons/queryTranslator.d.ts +0 -0
  485. /package/{lib → dist/lib}/service/storage/commons/queryTranslator.js +0 -0
  486. /package/{lib → dist/lib}/types/ClientConnection.d.ts +0 -0
  487. /package/{lib → dist/lib}/types/ClientConnection.js +0 -0
  488. /package/{lib → dist/lib}/types/Deprecation.d.ts +0 -0
  489. /package/{lib → dist/lib}/types/Deprecation.js +0 -0
  490. /package/{lib → dist/lib}/types/EventHandler.d.ts +0 -0
  491. /package/{lib → dist/lib}/types/EventHandler.js +0 -0
  492. /package/{lib → dist/lib}/types/Global.d.ts +0 -0
  493. /package/{lib → dist/lib}/types/Global.js +0 -0
  494. /package/{lib → dist/lib}/types/HttpMessage.d.ts +0 -0
  495. /package/{lib → dist/lib}/types/HttpMessage.js +0 -0
  496. /package/{lib → dist/lib}/types/HttpStream.d.ts +0 -0
  497. /package/{lib → dist/lib}/types/HttpStream.js +0 -0
  498. /package/{lib → dist/lib}/types/Kuzzle.d.ts +0 -0
  499. /package/{lib → dist/lib}/types/Kuzzle.js +0 -0
  500. /package/{lib → dist/lib}/types/KuzzleDocument.d.ts +0 -0
  501. /package/{lib → dist/lib}/types/KuzzleDocument.js +0 -0
  502. /package/{lib → dist/lib}/types/OpenApiDefinition.d.ts +0 -0
  503. /package/{lib → dist/lib}/types/OpenApiDefinition.js +0 -0
  504. /package/{lib → dist/lib}/types/PasswordPolicy.d.ts +0 -0
  505. /package/{lib → dist/lib}/types/PasswordPolicy.js +0 -0
  506. /package/{lib → dist/lib}/types/Plugin.js +0 -0
  507. /package/{lib → dist/lib}/types/PluginManifest.d.ts +0 -0
  508. /package/{lib → dist/lib}/types/PluginManifest.js +0 -0
  509. /package/{lib → dist/lib}/types/Policy.d.ts +0 -0
  510. /package/{lib → dist/lib}/types/Policy.js +0 -0
  511. /package/{lib → dist/lib}/types/PolicyRestrictions.d.ts +0 -0
  512. /package/{lib → dist/lib}/types/PolicyRestrictions.js +0 -0
  513. /package/{lib → dist/lib}/types/ProfileDefinition.d.ts +0 -0
  514. /package/{lib → dist/lib}/types/ProfileDefinition.js +0 -0
  515. /package/{lib → dist/lib}/types/RoleDefinition.d.ts +0 -0
  516. /package/{lib → dist/lib}/types/RoleDefinition.js +0 -0
  517. /package/{lib → dist/lib}/types/StrategyDefinition.d.ts +0 -0
  518. /package/{lib → dist/lib}/types/StrategyDefinition.js +0 -0
  519. /package/{lib → dist/lib}/types/Target.d.ts +0 -0
  520. /package/{lib → dist/lib}/types/Target.js +0 -0
  521. /package/{lib → dist/lib}/types/Token.d.ts +0 -0
  522. /package/{lib → dist/lib}/types/Token.js +0 -0
  523. /package/{lib → dist/lib}/types/User.d.ts +0 -0
  524. /package/{lib → dist/lib}/types/User.js +0 -0
  525. /package/{lib → dist/lib}/types/config/DumpConfiguration.d.ts +0 -0
  526. /package/{lib → dist/lib}/types/config/DumpConfiguration.js +0 -0
  527. /package/{lib → dist/lib}/types/config/HttpConfiguration.d.ts +0 -0
  528. /package/{lib → dist/lib}/types/config/HttpConfiguration.js +0 -0
  529. /package/{lib → dist/lib}/types/config/KuzzleConfiguration.d.ts +0 -0
  530. /package/{lib → dist/lib}/types/config/KuzzleConfiguration.js +0 -0
  531. /package/{lib → dist/lib}/types/config/LimitsConfiguration.d.ts +0 -0
  532. /package/{lib → dist/lib}/types/config/LimitsConfiguration.js +0 -0
  533. /package/{lib → dist/lib}/types/config/PluginsConfiguration.d.ts +0 -0
  534. /package/{lib → dist/lib}/types/config/PluginsConfiguration.js +0 -0
  535. /package/{lib → dist/lib}/types/config/SecurityConfiguration.d.ts +0 -0
  536. /package/{lib → dist/lib}/types/config/SecurityConfiguration.js +0 -0
  537. /package/{lib → dist/lib}/types/config/ServerConfiguration.d.ts +0 -0
  538. /package/{lib → dist/lib}/types/config/ServerConfiguration.js +0 -0
  539. /package/{lib → dist/lib}/types/config/ServicesConfiguration.d.ts +0 -0
  540. /package/{lib → dist/lib}/types/config/ServicesConfiguration.js +0 -0
  541. /package/{lib → dist/lib}/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +0 -0
  542. /package/{lib → dist/lib}/types/config/internalCache/InternalCacheRedisConfiguration.js +0 -0
  543. /package/{lib → dist/lib}/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +0 -0
  544. /package/{lib → dist/lib}/types/config/publicCache/PublicCacheRedisConfiguration.js +0 -0
  545. /package/{lib → dist/lib}/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +0 -0
  546. /package/{lib → dist/lib}/types/config/storageEngine/StorageEngineElasticsearchConfiguration.js +0 -0
  547. /package/{lib/types → dist/lib/types/controllers}/Controller.js +0 -0
  548. /package/{lib/types → dist/lib/types/controllers}/ControllerDefinition.js +0 -0
  549. /package/{lib/types → dist/lib/types/controllers}/ControllerRights.d.ts +0 -0
  550. /package/{lib/types → dist/lib/types/controllers}/ControllerRights.js +0 -0
  551. /package/{lib → dist/lib}/types/errors/ErrorDefinition.d.ts +0 -0
  552. /package/{lib → dist/lib}/types/errors/ErrorDefinition.js +0 -0
  553. /package/{lib → dist/lib}/types/errors/ErrorDomains.d.ts +0 -0
  554. /package/{lib → dist/lib}/types/errors/ErrorDomains.js +0 -0
  555. /package/{lib → dist/lib}/types/events/EventGenericDocument.d.ts +0 -0
  556. /package/{lib → dist/lib}/types/events/EventGenericDocument.js +0 -0
  557. /package/{lib → dist/lib}/types/events/EventProtocol.d.ts +0 -0
  558. /package/{lib → dist/lib}/types/events/EventProtocol.js +0 -0
  559. /package/{lib → dist/lib}/types/realtime/RealtimeScope.d.ts +0 -0
  560. /package/{lib → dist/lib}/types/realtime/RealtimeScope.js +0 -0
  561. /package/{lib → dist/lib}/types/realtime/RealtimeUsers.d.ts +0 -0
  562. /package/{lib → dist/lib}/types/realtime/RealtimeUsers.js +0 -0
  563. /package/{lib → dist/lib}/types/realtime/RoomList.d.ts +0 -0
  564. /package/{lib → dist/lib}/types/realtime/RoomList.js +0 -0
  565. /package/{lib → dist/lib}/types/shared/StoreCollectionsDefinition.d.ts +0 -0
  566. /package/{lib → dist/lib}/types/shared/StoreCollectionsDefinition.js +0 -0
  567. /package/{lib → dist/lib}/types/storage/7/Elasticsearch.d.ts +0 -0
  568. /package/{lib → dist/lib}/types/storage/7/Elasticsearch.js +0 -0
  569. /package/{lib → dist/lib}/types/storage/8/Elasticsearch.d.ts +0 -0
  570. /package/{lib → dist/lib}/types/storage/8/Elasticsearch.js +0 -0
  571. /package/{lib → dist/lib}/util/Inflector.d.ts +0 -0
  572. /package/{lib → dist/lib}/util/Inflector.js +0 -0
  573. /package/{lib → dist/lib}/util/array.d.ts +0 -0
  574. /package/{lib → dist/lib}/util/array.js +0 -0
  575. /package/{lib → dist/lib}/util/async.d.ts +0 -0
  576. /package/{lib → dist/lib}/util/async.js +0 -0
  577. /package/{lib → dist/lib}/util/bufferedPassThrough.d.ts +0 -0
  578. /package/{lib → dist/lib}/util/bufferedPassThrough.js +0 -0
  579. /package/{lib → dist/lib}/util/crypto.d.ts +0 -0
  580. /package/{lib → dist/lib}/util/crypto.js +0 -0
  581. /package/{lib → dist/lib}/util/dump-collection.d.ts +0 -0
  582. /package/{lib → dist/lib}/util/dump-collection.js +0 -0
  583. /package/{lib → dist/lib}/util/esRequest.d.ts +0 -0
  584. /package/{lib → dist/lib}/util/esRequest.js +0 -0
  585. /package/{lib → dist/lib}/util/koncordeCompat.d.ts +0 -0
  586. /package/{lib → dist/lib}/util/koncordeCompat.js +0 -0
  587. /package/{lib → dist/lib}/util/mutex.d.ts +0 -0
  588. /package/{lib → dist/lib}/util/mutex.js +0 -0
  589. /package/{lib → dist/lib}/util/name-generator.d.ts +0 -0
  590. /package/{lib → dist/lib}/util/name-generator.js +0 -0
  591. /package/{lib → dist/lib}/util/time.d.ts +0 -0
  592. /package/{lib → dist/lib}/util/time.js +0 -0
@@ -0,0 +1,867 @@
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
+ /* eslint sort-keys: 0 */
22
+ "use strict";
23
+ const kerror = require("../../kerror").wrap("api", "assert");
24
+ const { Request } = require("../request");
25
+ const { NativeController } = require("./baseController");
26
+ const kassert = require("../../util/requestAssertions");
27
+ const { isPlainObject, has } = require("../../util/safeObject");
28
+ let mapping;
29
+ /**
30
+ * @class MemoryStorageController
31
+ */
32
+ class MemoryStorageController extends NativeController {
33
+ constructor() {
34
+ super();
35
+ initMapping();
36
+ const buildCommandFn = (command) => {
37
+ if (command === "mexecute") {
38
+ return async (request) => global.kuzzle.ask("core:cache:public:mExecute", extractArgumentsFromRequest(command, request));
39
+ }
40
+ const largeCommands = ["mset", "mget", "msetnx"];
41
+ if (largeCommands.includes(command)) {
42
+ return async (request) => global.kuzzle.ask("core:cache:public:execute", command, extractArgumentsFromRequest(command, request));
43
+ }
44
+ return async (request) => global.kuzzle.ask("core:cache:public:execute", command, ...extractArgumentsFromRequest(command, request));
45
+ };
46
+ for (const command of Object.keys(mapping)) {
47
+ this._actions.add(command);
48
+ this[command] = buildCommandFn(command);
49
+ }
50
+ }
51
+ }
52
+ module.exports = MemoryStorageController;
53
+ const scanMatchProperty = {
54
+ skip: true,
55
+ merge: true,
56
+ path: ["args", "match"],
57
+ map: (val) => {
58
+ if (typeof val !== "string") {
59
+ throw kerror.get("invalid_type", "match", "<string>");
60
+ }
61
+ return ["MATCH", val];
62
+ },
63
+ };
64
+ const scanCountProperty = {
65
+ skip: true,
66
+ merge: true,
67
+ path: ["args", "count"],
68
+ map: (val, request) => {
69
+ assertInt(request, "count", val);
70
+ return ["COUNT", val];
71
+ },
72
+ };
73
+ const zrangebyscoreOptionsProperty = {
74
+ skip: true,
75
+ merge: true,
76
+ map: (val) => sanitizeArrayArgument(val),
77
+ path: ["args", "options"],
78
+ };
79
+ const zrangebyscoreLimitProperty = {
80
+ skip: true,
81
+ merge: true,
82
+ map: (val) => processLimit(val),
83
+ path: ["args", "limit"],
84
+ };
85
+ function initMapping() {
86
+ mapping = {
87
+ append: {
88
+ key: ["resource", "_id"],
89
+ value: ["body", "value"],
90
+ },
91
+ bitcount: {
92
+ key: ["resource", "_id"],
93
+ start: { skip: true, path: ["args", "start"] },
94
+ end: { skip: true, path: ["args", "end"] },
95
+ },
96
+ bitop: {
97
+ operation: ["body", "operation"],
98
+ destkey: ["resource", "_id"],
99
+ keys: { merge: true, path: ["body", "keys"] },
100
+ },
101
+ bitpos: {
102
+ key: ["resource", "_id"],
103
+ bit: ["args", "bit"],
104
+ start: { skip: true, path: ["args", "start"] },
105
+ end: { skip: true, path: ["args", "end"] },
106
+ },
107
+ dbsize: null,
108
+ decrby: {
109
+ key: ["resource", "_id"],
110
+ value: ["body", "value"],
111
+ },
112
+ del: {
113
+ keys: ["body", "keys"],
114
+ },
115
+ expire: {
116
+ key: ["resource", "_id"],
117
+ seconds: ["body", "seconds"],
118
+ },
119
+ expireat: {
120
+ key: ["resource", "_id"],
121
+ timestamp: ["body", "timestamp"],
122
+ },
123
+ flushdb: null,
124
+ geoadd: {
125
+ key: { path: ["resource", "_id"] },
126
+ points: {
127
+ map: (val, request) => {
128
+ const result = [];
129
+ kassert.assertBodyHasAttribute(request, "points");
130
+ kassert.assertBodyAttributeType(request, "points", "array");
131
+ if (val.length === 0) {
132
+ throw kerror.get("empty_argument", "points");
133
+ }
134
+ val.forEach((v) => {
135
+ if (typeof v !== "object" || !v.lon || !v.lat || !v.name) {
136
+ throw kerror.get("invalid_argument", "points", "<array of geopoints>");
137
+ }
138
+ assertFloat(request, "lon", v.lon);
139
+ assertFloat(request, "lat", v.lat);
140
+ result.push(v.lon, v.lat, v.name);
141
+ });
142
+ return result;
143
+ },
144
+ path: ["body", "points"],
145
+ merge: true,
146
+ },
147
+ },
148
+ geodist: {
149
+ key: ["resource", "_id"],
150
+ member1: ["args", "member1"],
151
+ member2: ["args", "member2"],
152
+ unit: { skip: true, path: ["args", "unit"] },
153
+ },
154
+ geohash: {
155
+ key: ["resource", "_id"],
156
+ members: {
157
+ merge: true,
158
+ map: (val) => toArray(val),
159
+ path: ["args", "members"],
160
+ },
161
+ },
162
+ georadius: {
163
+ key: ["resource", "_id"],
164
+ lon: ["args", "lon"],
165
+ lat: ["args", "lat"],
166
+ distance: ["args", "distance"],
167
+ unit: ["args", "unit"],
168
+ options: {
169
+ skip: true,
170
+ merge: true,
171
+ map: (val) => sanitizeArrayArgument(val),
172
+ path: ["args", "options"],
173
+ },
174
+ },
175
+ georadiusbymember: {
176
+ key: ["resource", "_id"],
177
+ member: ["args", "member"],
178
+ distance: ["args", "distance"],
179
+ unit: ["args", "unit"],
180
+ options: {
181
+ skip: true,
182
+ merge: true,
183
+ map: (val) => sanitizeArrayArgument(val),
184
+ path: ["args", "options"],
185
+ },
186
+ },
187
+ getbit: {
188
+ key: ["resource", "_id"],
189
+ offset: ["args", "offset"],
190
+ },
191
+ getrange: {
192
+ key: ["resource", "_id"],
193
+ start: ["args", "start"],
194
+ end: ["args", "end"],
195
+ },
196
+ hdel: {
197
+ key: ["resource", "_id"],
198
+ fields: { skip: true, merge: true, path: ["body", "fields"] },
199
+ },
200
+ hmget: {
201
+ key: ["resource", "_id"],
202
+ fields: {
203
+ merge: true,
204
+ map: (val) => toArray(val),
205
+ path: ["args", "fields"],
206
+ },
207
+ },
208
+ hexists: {
209
+ key: ["resource", "_id"],
210
+ field: ["args", "field"],
211
+ },
212
+ hincrby: {
213
+ key: ["resource", "_id"],
214
+ field: ["body", "field"],
215
+ value: ["body", "value"],
216
+ },
217
+ hmset: {
218
+ key: ["resource", "_id"],
219
+ entries: {
220
+ map: (val, request) => {
221
+ const result = [];
222
+ kassert.assertBodyHasAttribute(request, "entries");
223
+ kassert.assertBodyAttributeType(request, "entries", "array");
224
+ val.forEach((v) => {
225
+ if (typeof v !== "object" ||
226
+ !v.field ||
227
+ (!v.value && v.value !== 0)) {
228
+ throw kerror.get("invalid_argument", "entries", "<array of objects>");
229
+ }
230
+ result.push(v.field, v.value);
231
+ });
232
+ return result;
233
+ },
234
+ path: ["body", "entries"],
235
+ merge: true,
236
+ },
237
+ },
238
+ hset: {
239
+ key: ["resource", "_id"],
240
+ field: ["body", "field"],
241
+ value: ["body", "value"],
242
+ },
243
+ hstrlen: {
244
+ key: ["resource", "_id"],
245
+ field: ["args", "field"],
246
+ },
247
+ keys: {
248
+ pattern: ["args", "pattern"],
249
+ },
250
+ lindex: {
251
+ key: ["resource", "_id"],
252
+ index: ["args", "idx"],
253
+ },
254
+ linsert: {
255
+ key: ["resource", "_id"],
256
+ position: ["body", "position"],
257
+ pivot: ["body", "pivot"],
258
+ value: ["body", "value"],
259
+ },
260
+ lpush: {
261
+ key: ["resource", "_id"],
262
+ values: { skip: true, merge: true, path: ["body", "values"] },
263
+ },
264
+ lrange: {
265
+ key: ["resource", "_id"],
266
+ start: ["args", "start"],
267
+ stop: ["args", "stop"],
268
+ },
269
+ lrem: {
270
+ key: ["resource", "_id"],
271
+ count: ["body", "count"],
272
+ value: ["body", "value"],
273
+ },
274
+ lset: {
275
+ key: ["resource", "_id"],
276
+ index: ["body", "index"],
277
+ value: ["body", "value"],
278
+ },
279
+ ltrim: {
280
+ key: ["resource", "_id"],
281
+ start: ["body", "start"],
282
+ stop: ["body", "stop"],
283
+ },
284
+ mget: {
285
+ keys: {
286
+ merge: true,
287
+ map: (val) => toArray(val),
288
+ path: ["args", "keys"],
289
+ },
290
+ },
291
+ mexecute: {
292
+ actions: ["body", "actions"],
293
+ },
294
+ mset: {
295
+ entries: {
296
+ map: (val, request) => {
297
+ const result = [];
298
+ kassert.assertBodyHasAttribute(request, "entries");
299
+ kassert.assertBodyAttributeType(request, "entries", "array");
300
+ val.forEach((entry) => {
301
+ if (typeof entry !== "object" ||
302
+ !entry.key ||
303
+ (!entry.value && entry.value !== 0)) {
304
+ throw kerror.get("invalid_argument", "entries", "<array of objects>");
305
+ }
306
+ result.push(entry.key, entry.value);
307
+ });
308
+ return result;
309
+ },
310
+ path: ["body", "entries"],
311
+ merge: true,
312
+ },
313
+ },
314
+ object: {
315
+ subcommand: ["args", "subcommand"],
316
+ key: ["resource", "_id"],
317
+ },
318
+ pexpire: {
319
+ key: ["resource", "_id"],
320
+ milliseconds: ["body", "milliseconds"],
321
+ },
322
+ pexpireat: {
323
+ key: ["resource", "_id"],
324
+ timestamp: ["body", "timestamp"],
325
+ },
326
+ pfadd: {
327
+ key: ["resource", "_id"],
328
+ elements: { skip: true, merge: true, path: ["body", "elements"] },
329
+ },
330
+ pfmerge: {
331
+ key: ["resource", "_id"],
332
+ sources: { skip: true, merge: true, path: ["body", "sources"] },
333
+ },
334
+ ping: null,
335
+ psetex: {
336
+ key: ["resource", "_id"],
337
+ milliseconds: ["body", "milliseconds"],
338
+ value: ["body", "value"],
339
+ },
340
+ randomkey: null,
341
+ rename: {
342
+ key: ["resource", "_id"],
343
+ newkey: ["body", "newkey"],
344
+ },
345
+ renamenx: {
346
+ key: ["resource", "_id"],
347
+ newkey: ["body", "newkey"],
348
+ },
349
+ rpoplpush: {
350
+ source: ["body", "source"],
351
+ destination: ["body", "destination"],
352
+ },
353
+ sadd: {
354
+ key: ["resource", "_id"],
355
+ members: { skip: true, merge: true, path: ["body", "members"] },
356
+ },
357
+ scan: {
358
+ cursor: ["args", "cursor"],
359
+ match: scanMatchProperty,
360
+ count: scanCountProperty,
361
+ },
362
+ sdiff: {
363
+ key: ["resource", "_id"],
364
+ keys: {
365
+ merge: true,
366
+ map: (val) => toArray(val),
367
+ path: ["args", "keys"],
368
+ },
369
+ },
370
+ sdiffstore: {
371
+ destination: ["body", "destination"],
372
+ key: ["resource", "_id"],
373
+ keys: { merge: true, path: ["body", "keys"] },
374
+ },
375
+ set: null, // handled by extractArgumentsFromRequestForSet
376
+ setex: {
377
+ key: ["resource", "_id"],
378
+ seconds: ["body", "seconds"],
379
+ value: ["body", "value"],
380
+ },
381
+ setnx: {
382
+ key: ["resource", "_id"],
383
+ value: ["body", "value"],
384
+ },
385
+ sinterstore: {
386
+ destination: ["body", "destination"],
387
+ keys: { merge: true, path: ["body", "keys"] },
388
+ },
389
+ sismember: {
390
+ key: ["resource", "_id"],
391
+ member: ["args", "member"],
392
+ },
393
+ smove: {
394
+ key: ["resource", "_id"],
395
+ destination: ["body", "destination"],
396
+ member: ["body", "member"],
397
+ },
398
+ sort: null, // handled by extractArgumentsFromRequestForSort
399
+ spop: {
400
+ key: ["resource", "_id"],
401
+ count: { skip: true, path: ["body", "count"] },
402
+ },
403
+ srandmember: {
404
+ key: ["resource", "_id"],
405
+ count: { skip: true, path: ["args", "count"] },
406
+ },
407
+ srem: {
408
+ key: ["resource", "_id"],
409
+ members: { skip: true, merge: true, path: ["body", "members"] },
410
+ },
411
+ sscan: {
412
+ key: ["resource", "_id"],
413
+ cursor: ["args", "cursor"],
414
+ match: scanMatchProperty,
415
+ count: scanCountProperty,
416
+ },
417
+ sunion: {
418
+ keys: {
419
+ merge: true,
420
+ map: (val) => toArray(val),
421
+ path: ["args", "keys"],
422
+ },
423
+ },
424
+ sunionstore: {
425
+ destination: ["body", "destination"],
426
+ keys: { merge: true, path: ["body", "keys"] },
427
+ },
428
+ time: null,
429
+ touch: {
430
+ keys: { merge: true, path: ["body", "keys"] },
431
+ },
432
+ zadd: null, // handled by extractArgumentsFromRequestForZAdd
433
+ zcount: {
434
+ key: ["resource", "_id"],
435
+ min: ["args", "min"],
436
+ max: ["args", "max"],
437
+ },
438
+ zincrby: {
439
+ key: ["resource", "_id"],
440
+ value: ["body", "value"],
441
+ member: ["body", "member"],
442
+ },
443
+ zinterstore: null, // handled by extractArgumentsFromRequestForZInterstore
444
+ zlexcount: {
445
+ key: ["resource", "_id"],
446
+ min: ["args", "min"],
447
+ max: ["args", "max"],
448
+ },
449
+ zrange: {
450
+ key: ["resource", "_id"],
451
+ start: ["args", "start"],
452
+ stop: ["args", "stop"],
453
+ options: {
454
+ skip: true,
455
+ merge: true,
456
+ map: (val) => sanitizeArrayArgument(val),
457
+ path: ["args", "options"],
458
+ },
459
+ },
460
+ zrangebylex: {
461
+ key: ["resource", "_id"],
462
+ min: ["args", "min"],
463
+ max: ["args", "max"],
464
+ limit: {
465
+ skip: true,
466
+ merge: true,
467
+ map: (val) => processLimit(val),
468
+ path: ["args", "limit"],
469
+ },
470
+ },
471
+ zrangebyscore: {
472
+ key: ["resource", "_id"],
473
+ min: ["args", "min"],
474
+ max: ["args", "max"],
475
+ options: zrangebyscoreOptionsProperty,
476
+ limit: zrangebyscoreLimitProperty,
477
+ },
478
+ zrem: {
479
+ key: ["resource", "_id"],
480
+ members: { merge: true, path: ["body", "members"] },
481
+ },
482
+ zremrangebylex: {
483
+ key: ["resource", "_id"],
484
+ min: ["body", "min"],
485
+ max: ["body", "max"],
486
+ },
487
+ zremrangebyrank: {
488
+ key: ["resource", "_id"],
489
+ min: ["body", "start"],
490
+ max: ["body", "stop"],
491
+ },
492
+ zremrangebyscore: {
493
+ key: ["resource", "_id"],
494
+ min: ["body", "min"],
495
+ max: ["body", "max"],
496
+ },
497
+ zrevrangebylex: {
498
+ key: ["resource", "_id"],
499
+ max: ["args", "max"],
500
+ min: ["args", "min"],
501
+ limit: {
502
+ skip: true,
503
+ merge: true,
504
+ map: (val) => processLimit(val),
505
+ path: ["args", "limit"],
506
+ },
507
+ },
508
+ zrevrangebyscore: {
509
+ key: ["resource", "_id"],
510
+ max: ["args", "max"],
511
+ min: ["args", "min"],
512
+ options: zrangebyscoreOptionsProperty,
513
+ limit: zrangebyscoreLimitProperty,
514
+ },
515
+ zrevrank: {
516
+ key: ["resource", "_id"],
517
+ member: ["args", "member"],
518
+ },
519
+ zunionstore: null, // handled by extractArgumentsFromRequestForZInterstore
520
+ };
521
+ // unique argument key
522
+ mapping.decr =
523
+ mapping.get =
524
+ mapping.hgetall =
525
+ mapping.hkeys =
526
+ mapping.hlen =
527
+ mapping.hvals =
528
+ mapping.incr =
529
+ mapping.llen =
530
+ mapping.lpop =
531
+ mapping.persist =
532
+ mapping.pttl =
533
+ mapping.rpop =
534
+ mapping.scard =
535
+ mapping.smembers =
536
+ mapping.strlen =
537
+ mapping.ttl =
538
+ mapping.type =
539
+ mapping.zcard =
540
+ { key: ["resource", "_id"] };
541
+ // key value
542
+ mapping.getset =
543
+ mapping.lpushx =
544
+ mapping.rpushx =
545
+ {
546
+ key: ["resource", "_id"],
547
+ value: ["body", "value"],
548
+ };
549
+ mapping.pfcount = mapping.sinter = mapping.mget;
550
+ mapping.incrby = mapping.incrbyfloat = mapping.decrby;
551
+ mapping.geopos = mapping.geohash;
552
+ mapping.hget = mapping.hexists;
553
+ mapping.hsetnx = mapping.hset;
554
+ mapping.msetnx = mapping.mset;
555
+ mapping.rpush = mapping.lpush;
556
+ mapping.hincrbyfloat = mapping.hincrby;
557
+ mapping.zrevrange = mapping.zrange;
558
+ mapping.zscore = mapping.zrank = mapping.zrevrank;
559
+ mapping.hscan = mapping.zscan = mapping.sscan;
560
+ mapping.exists = mapping.mget;
561
+ }
562
+ /**
563
+ * @param {string} command
564
+ * @param {Request} request
565
+ * @returns {*}
566
+ */
567
+ function extractArgumentsFromRequest(command, request) {
568
+ let args = [];
569
+ // Dealing with exceptions
570
+ if (command === "set") {
571
+ return extractArgumentsFromRequestForSet(request);
572
+ }
573
+ if (command === "sort") {
574
+ return extractArgumentsFromRequestForSort(request);
575
+ }
576
+ if (command === "zadd") {
577
+ return extractArgumentsFromRequestForZAdd(request);
578
+ }
579
+ if (command === "zinterstore") {
580
+ return extractArgumentsFromRequestForZInterstore(request);
581
+ }
582
+ if (command === "zunionstore") {
583
+ return extractArgumentsFromRequestForZInterstore(request);
584
+ }
585
+ if (command === "mexecute") {
586
+ return extractArgumentsFromRequestForMExecute(request);
587
+ }
588
+ if (!mapping[command]) {
589
+ return [];
590
+ }
591
+ if (!request.input.body) {
592
+ request.input.body = {};
593
+ }
594
+ Object.keys(mapping[command]).forEach((key) => {
595
+ const data = mapping[command][key];
596
+ const path = Array.isArray(data) ? data : data.path;
597
+ const toMerge = !Array.isArray(data) && data.merge === true;
598
+ const map = !Array.isArray(data) && data.map;
599
+ const skip = !Array.isArray(data) && data.skip === true;
600
+ let value = path.reduce((previousValue, currentValue, currentIndex, array) => {
601
+ if (previousValue[array[currentIndex]] !== undefined &&
602
+ previousValue[array[currentIndex]] !== null) {
603
+ return previousValue[array[currentIndex]];
604
+ }
605
+ return undefined;
606
+ }, request.input);
607
+ if (value === undefined) {
608
+ if (skip) {
609
+ return;
610
+ }
611
+ throw kerror.get("missing_argument", key);
612
+ }
613
+ if (map) {
614
+ value = data.map(value, request);
615
+ }
616
+ if (value !== undefined) {
617
+ if (toMerge && Array.isArray(value)) {
618
+ args = args.concat(value);
619
+ }
620
+ else {
621
+ args.push(value);
622
+ }
623
+ }
624
+ });
625
+ return args;
626
+ }
627
+ /**
628
+ * @param {Request} request
629
+ * @returns {*[]}
630
+ */
631
+ function extractArgumentsFromRequestForSet(request) {
632
+ const args = [request.input.args._id];
633
+ kassert.assertHasId(request);
634
+ kassert.assertHasBody(request);
635
+ if (["undefined", "boolean", "object"].indexOf(typeof request.input.body.value) !== -1) {
636
+ throw kerror.get("invalid_type", "value", "string, number");
637
+ }
638
+ if (request.input.body.nx && request.input.body.xx) {
639
+ throw kerror.get("mutually_exclusive", "nx", "xx");
640
+ }
641
+ if (request.input.body.ex && request.input.body.px) {
642
+ throw kerror.get("mutually_exclusive", "ex", "px");
643
+ }
644
+ args.push(request.input.body.value);
645
+ if (request.input.body.ex !== undefined) {
646
+ args.push("EX", request.input.body.ex);
647
+ }
648
+ if (request.input.body.px !== undefined) {
649
+ args.push("PX", request.input.body.px);
650
+ }
651
+ if (request.input.body.nx) {
652
+ args.push("NX");
653
+ }
654
+ if (request.input.body.xx) {
655
+ args.push("XX");
656
+ }
657
+ return args;
658
+ }
659
+ /**
660
+ * @param {Request} request
661
+ * @returns {*[]}
662
+ */
663
+ function extractArgumentsFromRequestForSort(request) {
664
+ const args = [request.input.args._id];
665
+ kassert.assertHasId(request);
666
+ if (request.input.body) {
667
+ if (request.input.body.alpha) {
668
+ args.push("ALPHA");
669
+ }
670
+ if (request.input.body.direction !== undefined) {
671
+ const direction = request.input.body.direction.toUpperCase();
672
+ if (["ASC", "DESC"].indexOf(direction) === -1) {
673
+ throw kerror.get("invalid_argument", "direction", '"ASC", "DESC"');
674
+ }
675
+ args.push(direction);
676
+ }
677
+ if (request.input.body.by !== undefined) {
678
+ args.push("BY", request.input.body.by);
679
+ }
680
+ if (request.input.body.limit !== undefined) {
681
+ kassert.assertBodyAttributeType(request, "limit", "array");
682
+ assertInt(request, "limit.offset", request.input.body.limit[0]);
683
+ assertInt(request, "limit.count", request.input.body.limit[1]);
684
+ args.push("LIMIT", request.input.body.limit[0], request.input.body.limit[1]);
685
+ }
686
+ if (request.input.body.get !== undefined) {
687
+ kassert.assertBodyAttributeType(request, "get", "array");
688
+ request.input.body.get.forEach((pattern) => {
689
+ args.push("GET");
690
+ args.push(pattern);
691
+ });
692
+ }
693
+ if (request.input.body.store !== undefined) {
694
+ args.push("STORE", request.input.body.store);
695
+ }
696
+ }
697
+ return args;
698
+ }
699
+ /**
700
+ * @param {Request} request
701
+ * @returns {*[]}
702
+ */
703
+ function extractArgumentsFromRequestForMExecute(request) {
704
+ kassert.assertHasBody(request);
705
+ kassert.assertBodyHasAttribute(request, "actions");
706
+ kassert.assertBodyAttributeType(request, "actions", "array");
707
+ const actions = request.input.body.actions;
708
+ return actions.map((command) => {
709
+ if (!has(command, "action")) {
710
+ throw kerror.get("missing_argument", "action");
711
+ }
712
+ if (!has(command, "args")) {
713
+ throw kerror.get("missing_argument", "args");
714
+ }
715
+ if (!isPlainObject(command.args)) {
716
+ throw kerror.get("invalid_type", "args", "object");
717
+ }
718
+ if (command.action === "mexecute") {
719
+ throw kerror.get("forbidden_argument", "mexecute");
720
+ }
721
+ if (!has(mapping, command.action)) {
722
+ throw kerror.get("forbidden_argument", command.action);
723
+ }
724
+ const subRequest = new Request(command.args);
725
+ const extractedArguments = extractArgumentsFromRequest(command.action, subRequest);
726
+ return [command.action, ...extractedArguments];
727
+ });
728
+ }
729
+ /**
730
+ * @param {Request} request
731
+ * @returns {*[]}
732
+ */
733
+ function extractArgumentsFromRequestForZAdd(request) {
734
+ const args = [request.input.args._id];
735
+ kassert.assertHasId(request);
736
+ kassert.assertHasBody(request);
737
+ kassert.assertBodyHasAttribute(request, "elements");
738
+ kassert.assertBodyAttributeType(request, "elements", "array");
739
+ if (request.input.body.nx && request.input.body.xx) {
740
+ throw kerror.get("mutually_exclusive", "nx", "xx");
741
+ }
742
+ if (request.input.body.nx) {
743
+ args.push("NX");
744
+ }
745
+ if (request.input.body.xx) {
746
+ args.push("XX");
747
+ }
748
+ if (request.input.body.ch) {
749
+ args.push("CH");
750
+ }
751
+ if (request.input.body.incr) {
752
+ args.push("INCR");
753
+ }
754
+ if (request.input.body.elements.length === 0) {
755
+ throw kerror.get("empty_argument", "elements");
756
+ }
757
+ if (request.input.body.incr && request.input.body.elements.length > 1) {
758
+ throw kerror.get("too_many_arguments", "elements");
759
+ }
760
+ request.input.body.elements.forEach((element, index) => {
761
+ if (!isPlainObject(element)) {
762
+ throw kerror.get("invalid_argument", "elements", "<array of objects>");
763
+ }
764
+ if (!element.member) {
765
+ throw kerror.get("missing_argument", `elements[${index}].member`);
766
+ }
767
+ assertFloat(request, "score", element.score);
768
+ args.push(element.score);
769
+ args.push(element.member);
770
+ });
771
+ return args;
772
+ }
773
+ /**
774
+ * @param {Request} request
775
+ * @returns {*[]}
776
+ */
777
+ function extractArgumentsFromRequestForZInterstore(request) {
778
+ let args = [request.input.args._id];
779
+ kassert.assertHasId(request);
780
+ kassert.assertHasBody(request);
781
+ kassert.assertBodyHasAttribute(request, "keys");
782
+ kassert.assertBodyAttributeType(request, "keys", "array");
783
+ if (request.input.body.keys.length === 0) {
784
+ throw kerror.get("empty_argument", "keys");
785
+ }
786
+ args.push(request.input.body.keys.length);
787
+ args = args.concat(request.input.body.keys);
788
+ if (request.input.body.weights) {
789
+ kassert.assertBodyAttributeType(request, "weights", "array");
790
+ if (request.input.body.weights.length > 0) {
791
+ args.push("WEIGHTS");
792
+ args = args.concat(request.input.body.weights);
793
+ }
794
+ }
795
+ if (request.input.body.aggregate) {
796
+ kassert.assertBodyAttributeType(request, "aggregate", "string");
797
+ const aggregate = request.input.body.aggregate.toUpperCase();
798
+ if (["SUM", "MIN", "MAX"].indexOf(aggregate) === -1) {
799
+ throw kerror.get("invalid_argument", "aggregate", '"SUM", "MIN" or "MAX"');
800
+ }
801
+ args.push("AGGREGATE", aggregate);
802
+ }
803
+ return args;
804
+ }
805
+ /**
806
+ * Throws with a standardized error message if "value"
807
+ * is not a float
808
+ *
809
+ * @param {Request} request
810
+ * @param {string} name of the tested parameter
811
+ * @param {*} value of the tested parameter
812
+ * @throws
813
+ */
814
+ function assertFloat(request, name, value) {
815
+ // Number.parseXxx computes the 1st member of an array if one is provided
816
+ if (Array.isArray(value) || Number.isNaN(Number.parseFloat(value))) {
817
+ throw kerror.get("invalid_type", name, "number");
818
+ }
819
+ }
820
+ /**
821
+ * Throws with a standardized error message if "value"
822
+ * is not an integer
823
+ *
824
+ * @param {Request} request
825
+ * @param {string} name of the tested parameter
826
+ * @param {*} value of the tested parameter
827
+ * @throws
828
+ */
829
+ function assertInt(request, name, value) {
830
+ // Number.parseXxx computes the 1st member of an array if one is provided
831
+ if (Array.isArray(value) || Number.isNaN(Number.parseInt(value))) {
832
+ throw kerror.get("invalid_type", name, "integer");
833
+ }
834
+ }
835
+ /**
836
+ * Deal with arguments being either an array or a string: return the array
837
+ * intact if it's the former, and convert it to an array if it's a string
838
+ * @param {Array|String} arg
839
+ * @returns {Array}
840
+ */
841
+ function toArray(arg) {
842
+ return typeof arg === "string" ? arg.split(",") : arg;
843
+ }
844
+ /**
845
+ * Sanitize an array argument, converting it from a string if necessary
846
+ * @param {Array|String} arg
847
+ * @returns {Array}
848
+ */
849
+ function sanitizeArrayArgument(arg) {
850
+ const result = toArray(arg);
851
+ return result.map((v) => (typeof v === "string" ? v.toUpperCase() : v));
852
+ }
853
+ /**
854
+ * Parse a LIMIT argument and throws if not a valid LIMIT parameter
855
+ * @param {Array} arg
856
+ * @throws
857
+ */
858
+ function processLimit(arg) {
859
+ let result = ["LIMIT"];
860
+ result = result.concat(toArray(arg));
861
+ // "result" should contain LIMIT offset count
862
+ if (result.length !== 3) {
863
+ throw kerror.get("invalid_argument", "limit", "<offset, count>");
864
+ }
865
+ return result;
866
+ }
867
+ //# sourceMappingURL=memoryStorageController.js.map