kuzzle 2.56.0 → 2.57.0-beta.2

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 (408) hide show
  1. package/dist/bin/copy-binaries.js +71 -4
  2. package/dist/bin/start-kuzzle-server +191 -97
  3. package/dist/index.d.ts +31 -1
  4. package/dist/index.js +45 -2
  5. package/dist/lib/api/controllers/adminController.d.ts +4 -3
  6. package/dist/lib/api/controllers/adminController.js +1 -2
  7. package/dist/lib/api/controllers/authController.d.ts +37 -16
  8. package/dist/lib/api/controllers/authController.js +88 -39
  9. package/dist/lib/api/controllers/baseController.d.ts +10 -5
  10. package/dist/lib/api/controllers/baseController.js +36 -15
  11. package/dist/lib/api/controllers/bulkController.d.ts +11 -7
  12. package/dist/lib/api/controllers/bulkController.js +28 -5
  13. package/dist/lib/api/controllers/clusterController.d.ts +2 -2
  14. package/dist/lib/api/controllers/clusterController.js +3 -3
  15. package/dist/lib/api/controllers/collectionController.d.ts +57 -21
  16. package/dist/lib/api/controllers/collectionController.js +40 -11
  17. package/dist/lib/api/controllers/debugController.d.ts +1 -1
  18. package/dist/lib/api/controllers/documentController.d.ts +137 -28
  19. package/dist/lib/api/controllers/documentController.js +156 -125
  20. package/dist/lib/api/controllers/index.d.ts +27 -12
  21. package/dist/lib/api/controllers/index.js +28 -13
  22. package/dist/lib/api/controllers/indexController.d.ts +17 -10
  23. package/dist/lib/api/controllers/indexController.js +13 -11
  24. package/dist/lib/api/controllers/memoryStorageController.d.ts +2 -5
  25. package/dist/lib/api/controllers/memoryStorageController.js +199 -127
  26. package/dist/lib/api/controllers/realtimeController.d.ts +19 -9
  27. package/dist/lib/api/controllers/realtimeController.js +8 -4
  28. package/dist/lib/api/controllers/securityController.d.ts +42 -29
  29. package/dist/lib/api/controllers/securityController.js +35 -19
  30. package/dist/lib/api/controllers/serverController.d.ts +114 -19
  31. package/dist/lib/api/controllers/serverController.js +69 -29
  32. package/dist/lib/api/documentExtractor.d.ts +9 -7
  33. package/dist/lib/api/documentExtractor.js +105 -41
  34. package/dist/lib/api/funnel.d.ts +131 -29
  35. package/dist/lib/api/funnel.js +436 -225
  36. package/dist/lib/api/httpRoutes.d.ts +16 -11
  37. package/dist/lib/api/httpRoutes.js +272 -2
  38. package/dist/lib/api/openapi/OpenApiManager.d.ts +1 -1
  39. package/dist/lib/api/openapi/openApiGenerator.d.ts +1 -1
  40. package/dist/lib/api/rateLimiter.d.ts +15 -5
  41. package/dist/lib/api/rateLimiter.js +42 -14
  42. package/dist/lib/api/request/kuzzleRequest.d.ts +83 -12
  43. package/dist/lib/api/request/kuzzleRequest.js +88 -23
  44. package/dist/lib/api/request/requestContext.d.ts +20 -5
  45. package/dist/lib/api/request/requestContext.js +14 -4
  46. package/dist/lib/api/request/requestInput.d.ts +37 -6
  47. package/dist/lib/api/request/requestInput.js +22 -9
  48. package/dist/lib/api/request/requestResponse.d.ts +45 -9
  49. package/dist/lib/api/request/requestResponse.js +34 -3
  50. package/dist/lib/cluster/command.d.ts +131 -37
  51. package/dist/lib/cluster/command.js +243 -71
  52. package/dist/lib/cluster/idCardHandler.d.ts +18 -5
  53. package/dist/lib/cluster/idCardHandler.js +52 -19
  54. package/dist/lib/cluster/index.d.ts +8 -2
  55. package/dist/lib/cluster/index.js +6 -2
  56. package/dist/lib/cluster/node.d.ts +127 -49
  57. package/dist/lib/cluster/node.js +412 -179
  58. package/dist/lib/cluster/protobuf/command.proto +18 -0
  59. package/dist/lib/cluster/protobuf/commandMessages.d.ts +104 -0
  60. package/dist/lib/cluster/protobuf/commandMessages.js +30 -0
  61. package/dist/lib/cluster/protobuf/syncMessages.d.ts +184 -0
  62. package/dist/lib/cluster/protobuf/syncMessages.js +23 -0
  63. package/dist/lib/cluster/publisher.d.ts +118 -78
  64. package/dist/lib/cluster/publisher.js +174 -72
  65. package/dist/lib/cluster/state.d.ts +15 -9
  66. package/dist/lib/cluster/state.js +12 -8
  67. package/dist/lib/cluster/subscriber.d.ts +185 -131
  68. package/dist/lib/cluster/subscriber.js +357 -95
  69. package/dist/lib/cluster/workers/IDCardRenewer.d.ts +39 -8
  70. package/dist/lib/cluster/workers/IDCardRenewer.js +88 -23
  71. package/dist/lib/config/default.config.d.ts +2 -2
  72. package/dist/lib/config/default.config.js +10 -3
  73. package/dist/lib/config/documentEventAliases.d.ts +1 -1
  74. package/dist/lib/config/index.d.ts +2 -5
  75. package/dist/lib/config/index.js +30 -17
  76. package/dist/lib/core/auth/formatProcessing.d.ts +3 -3
  77. package/dist/lib/core/auth/passportResponse.d.ts +1 -1
  78. package/dist/lib/core/auth/passportWrapper.d.ts +1 -1
  79. package/dist/lib/core/auth/passportWrapper.js +14 -13
  80. package/dist/lib/core/auth/tokenManager.d.ts +24 -3
  81. package/dist/lib/core/auth/tokenManager.js +47 -19
  82. package/dist/lib/core/backend/applicationManager.d.ts +2 -2
  83. package/dist/lib/core/backend/backend.d.ts +16 -5
  84. package/dist/lib/core/backend/backend.js +14 -6
  85. package/dist/lib/core/backend/backendCluster.d.ts +1 -1
  86. package/dist/lib/core/backend/backendConfig.d.ts +17 -5
  87. package/dist/lib/core/backend/backendConfig.js +1 -0
  88. package/dist/lib/core/backend/backendController.d.ts +1 -1
  89. package/dist/lib/core/backend/backendController.js +8 -1
  90. package/dist/lib/core/backend/backendErrors.d.ts +15 -8
  91. package/dist/lib/core/backend/backendErrors.js +5 -0
  92. package/dist/lib/core/backend/backendHook.d.ts +1 -1
  93. package/dist/lib/core/backend/backendImport.d.ts +1 -1
  94. package/dist/lib/core/backend/backendOpenApi.d.ts +3 -2
  95. package/dist/lib/core/backend/backendPipe.d.ts +1 -1
  96. package/dist/lib/core/backend/backendPipe.js +9 -1
  97. package/dist/lib/core/backend/backendPlugin.d.ts +2 -2
  98. package/dist/lib/core/backend/backendSubscription.d.ts +2 -2
  99. package/dist/lib/core/backend/backendVault.d.ts +1 -1
  100. package/dist/lib/core/backend/backendVault.js +8 -1
  101. package/dist/lib/core/cache/cacheEngine.d.ts +7 -4
  102. package/dist/lib/core/cache/cacheEngine.js +25 -8
  103. package/dist/lib/core/debug/kuzzleDebugger.d.ts +2 -1
  104. package/dist/lib/core/debug/kuzzleDebugger.js +31 -17
  105. package/dist/lib/core/network/accessLogger.d.ts +33 -18
  106. package/dist/lib/core/network/accessLogger.js +135 -73
  107. package/dist/lib/core/network/clientConnection.d.ts +13 -11
  108. package/dist/lib/core/network/clientConnection.js +33 -9
  109. package/dist/lib/core/network/context.d.ts +17 -22
  110. package/dist/lib/core/network/context.js +43 -26
  111. package/dist/lib/core/network/entryPoint.d.ts +38 -16
  112. package/dist/lib/core/network/entryPoint.js +119 -48
  113. package/dist/lib/core/network/httpRouter/index.d.ts +20 -50
  114. package/dist/lib/core/network/httpRouter/index.js +61 -75
  115. package/dist/lib/core/network/httpRouter/routeHandler.d.ts +17 -32
  116. package/dist/lib/core/network/httpRouter/routeHandler.js +26 -36
  117. package/dist/lib/core/network/httpRouter/routePart.d.ts +9 -18
  118. package/dist/lib/core/network/httpRouter/routePart.js +61 -43
  119. package/dist/lib/core/network/httpRouter/routeTypes.d.ts +3 -0
  120. package/dist/lib/core/network/httpRouter/routeTypes.js +23 -0
  121. package/dist/lib/core/network/networkEntryPoint.d.ts +20 -0
  122. package/dist/lib/core/network/networkEntryPoint.js +23 -0
  123. package/dist/lib/core/network/protocolManifest.d.ts +5 -4
  124. package/dist/lib/core/network/protocolManifest.js +6 -3
  125. package/dist/lib/core/network/protocols/httpMessage.d.ts +25 -18
  126. package/dist/lib/core/network/protocols/httpMessage.js +14 -11
  127. package/dist/lib/core/network/protocols/httpwsProtocol.d.ts +84 -93
  128. package/dist/lib/core/network/protocols/httpwsProtocol.js +284 -129
  129. package/dist/lib/core/network/protocols/internalProtocol.d.ts +26 -15
  130. package/dist/lib/core/network/protocols/internalProtocol.js +17 -16
  131. package/dist/lib/core/network/protocols/mqttProtocol.d.ts +56 -32
  132. package/dist/lib/core/network/protocols/mqttProtocol.js +91 -44
  133. package/dist/lib/core/network/protocols/protocol.d.ts +85 -21
  134. package/dist/lib/core/network/protocols/protocol.js +83 -27
  135. package/dist/lib/core/network/router.d.ts +13 -22
  136. package/dist/lib/core/network/router.js +59 -46
  137. package/dist/lib/core/plugin/plugin.d.ts +57 -51
  138. package/dist/lib/core/plugin/plugin.js +218 -103
  139. package/dist/lib/core/plugin/pluginContext.d.ts +54 -11
  140. package/dist/lib/core/plugin/pluginContext.js +99 -58
  141. package/dist/lib/core/plugin/pluginManifest.d.ts +6 -2
  142. package/dist/lib/core/plugin/pluginManifest.js +18 -11
  143. package/dist/lib/core/plugin/pluginRepository.d.ts +35 -44
  144. package/dist/lib/core/plugin/pluginRepository.js +35 -50
  145. package/dist/lib/core/plugin/pluginsManager.d.ts +128 -46
  146. package/dist/lib/core/plugin/pluginsManager.js +468 -231
  147. package/dist/lib/core/plugin/privilegedContext.d.ts +4 -9
  148. package/dist/lib/core/plugin/privilegedContext.js +5 -10
  149. package/dist/lib/core/realtime/actionEnum.d.ts +12 -21
  150. package/dist/lib/core/realtime/actionEnum.js +6 -7
  151. package/dist/lib/core/realtime/channel.d.ts +11 -5
  152. package/dist/lib/core/realtime/channel.js +17 -2
  153. package/dist/lib/core/realtime/connectionRooms.d.ts +2 -2
  154. package/dist/lib/core/realtime/hotelClerk.d.ts +12 -6
  155. package/dist/lib/core/realtime/hotelClerk.js +29 -11
  156. package/dist/lib/core/realtime/index.d.ts +8 -3
  157. package/dist/lib/core/realtime/index.js +12 -5
  158. package/dist/lib/core/realtime/notification/document.d.ts +54 -25
  159. package/dist/lib/core/realtime/notification/document.js +10 -13
  160. package/dist/lib/core/realtime/notification/index.d.ts +9 -3
  161. package/dist/lib/core/realtime/notification/index.js +10 -4
  162. package/dist/lib/core/realtime/notification/server.d.ts +7 -10
  163. package/dist/lib/core/realtime/notification/server.js +4 -7
  164. package/dist/lib/core/realtime/notification/user.d.ts +45 -21
  165. package/dist/lib/core/realtime/notification/user.js +8 -9
  166. package/dist/lib/core/realtime/notifier.d.ts +52 -40
  167. package/dist/lib/core/realtime/notifier.js +60 -25
  168. package/dist/lib/core/realtime/room.d.ts +1 -1
  169. package/dist/lib/core/realtime/subscription.d.ts +11 -6
  170. package/dist/lib/core/realtime/subscription.js +5 -1
  171. package/dist/lib/core/security/index.d.ts +14 -6
  172. package/dist/lib/core/security/index.js +27 -13
  173. package/dist/lib/core/security/profileRepository.d.ts +24 -19
  174. package/dist/lib/core/security/profileRepository.js +23 -10
  175. package/dist/lib/core/security/roleRepository.d.ts +60 -23
  176. package/dist/lib/core/security/roleRepository.js +122 -53
  177. package/dist/lib/core/security/securityLoader.d.ts +33 -18
  178. package/dist/lib/core/security/securityLoader.js +43 -16
  179. package/dist/lib/core/security/tokenRepository.d.ts +21 -7
  180. package/dist/lib/core/security/tokenRepository.js +50 -23
  181. package/dist/lib/core/security/userRepository.d.ts +44 -21
  182. package/dist/lib/core/security/userRepository.js +59 -19
  183. package/dist/lib/core/shared/KoncordeWrapper.d.ts +1 -1
  184. package/dist/lib/core/shared/ObjectRepository.d.ts +80 -18
  185. package/dist/lib/core/shared/ObjectRepository.js +57 -29
  186. package/dist/lib/core/shared/abstractManifest.d.ts +21 -8
  187. package/dist/lib/core/shared/abstractManifest.js +57 -17
  188. package/dist/lib/core/shared/sdk/embeddedSdk.d.ts +3 -1
  189. package/dist/lib/core/shared/sdk/embeddedSdk.js +8 -7
  190. package/dist/lib/core/shared/sdk/funnelProtocol.d.ts +2 -1
  191. package/dist/lib/core/shared/sdk/funnelProtocol.js +12 -3
  192. package/dist/lib/core/shared/sdk/impersonatedSdk.d.ts +11 -5
  193. package/dist/lib/core/shared/sdk/impersonatedSdk.js +22 -9
  194. package/dist/lib/core/shared/store.d.ts +45 -29
  195. package/dist/lib/core/shared/store.js +48 -27
  196. package/dist/lib/core/statistics/statistics.d.ts +1 -1
  197. package/dist/lib/core/storage/clientAdapter.d.ts +39 -21
  198. package/dist/lib/core/storage/clientAdapter.js +88 -48
  199. package/dist/lib/core/storage/indexCache.d.ts +8 -0
  200. package/dist/lib/core/storage/indexCache.js +16 -7
  201. package/dist/lib/core/storage/storageEngine.d.ts +7 -6
  202. package/dist/lib/core/storage/storageEngine.js +11 -8
  203. package/dist/lib/core/validation/baseType.d.ts +22 -22
  204. package/dist/lib/core/validation/baseType.js +11 -26
  205. package/dist/lib/core/validation/specification.d.ts +148 -0
  206. package/dist/lib/core/validation/specification.js +34 -0
  207. package/dist/lib/core/validation/typeOptions.d.ts +62 -0
  208. package/dist/lib/core/validation/typeOptions.js +23 -0
  209. package/dist/lib/core/validation/types/anything.d.ts +3 -6
  210. package/dist/lib/core/validation/types/anything.js +7 -7
  211. package/dist/lib/core/validation/types/boolean.d.ts +5 -12
  212. package/dist/lib/core/validation/types/boolean.js +7 -12
  213. package/dist/lib/core/validation/types/date.d.ts +19 -11
  214. package/dist/lib/core/validation/types/date.js +212 -161
  215. package/dist/lib/core/validation/types/email.d.ts +7 -11
  216. package/dist/lib/core/validation/types/email.js +13 -17
  217. package/dist/lib/core/validation/types/enum.d.ts +7 -11
  218. package/dist/lib/core/validation/types/enum.js +39 -20
  219. package/dist/lib/core/validation/types/geoPoint.d.ts +5 -13
  220. package/dist/lib/core/validation/types/geoPoint.js +10 -15
  221. package/dist/lib/core/validation/types/geoShape.d.ts +22 -21
  222. package/dist/lib/core/validation/types/geoShape.js +113 -129
  223. package/dist/lib/core/validation/types/geoShapeUtils.d.ts +15 -0
  224. package/dist/lib/core/validation/types/geoShapeUtils.js +75 -0
  225. package/dist/lib/core/validation/types/integer.d.ts +7 -5
  226. package/dist/lib/core/validation/types/integer.js +7 -13
  227. package/dist/lib/core/validation/types/ipAddress.d.ts +7 -11
  228. package/dist/lib/core/validation/types/ipAddress.js +13 -17
  229. package/dist/lib/core/validation/types/numeric.d.ts +7 -11
  230. package/dist/lib/core/validation/types/numeric.js +22 -29
  231. package/dist/lib/core/validation/types/object.d.ts +8 -15
  232. package/dist/lib/core/validation/types/object.js +12 -21
  233. package/dist/lib/core/validation/types/string.d.ts +7 -11
  234. package/dist/lib/core/validation/types/string.js +22 -29
  235. package/dist/lib/core/validation/types/url.d.ts +7 -11
  236. package/dist/lib/core/validation/types/url.js +14 -18
  237. package/dist/lib/core/validation/validation.d.ts +119 -80
  238. package/dist/lib/core/validation/validation.js +470 -412
  239. package/dist/lib/core/validation/validationUtils.d.ts +31 -0
  240. package/dist/lib/core/validation/validationUtils.js +190 -0
  241. package/dist/lib/kerror/codes/4-plugin.json +0 -12
  242. package/dist/lib/kerror/codes/index.d.ts +12 -2
  243. package/dist/lib/kerror/codes/index.js +5 -4
  244. package/dist/lib/kerror/errors/badRequestError.d.ts +1 -1
  245. package/dist/lib/kerror/errors/badRequestError.js +1 -1
  246. package/dist/lib/kerror/errors/externalServiceError.d.ts +1 -1
  247. package/dist/lib/kerror/errors/externalServiceError.js +1 -1
  248. package/dist/lib/kerror/errors/forbiddenError.d.ts +1 -1
  249. package/dist/lib/kerror/errors/forbiddenError.js +1 -1
  250. package/dist/lib/kerror/errors/gatewayTimeoutError.d.ts +1 -1
  251. package/dist/lib/kerror/errors/gatewayTimeoutError.js +1 -1
  252. package/dist/lib/kerror/errors/internalError.d.ts +1 -1
  253. package/dist/lib/kerror/errors/internalError.js +1 -1
  254. package/dist/lib/kerror/errors/kuzzleError.d.ts +32 -3
  255. package/dist/lib/kerror/errors/kuzzleError.js +21 -7
  256. package/dist/lib/kerror/errors/multipleErrorsError.d.ts +2 -2
  257. package/dist/lib/kerror/errors/multipleErrorsError.js +2 -2
  258. package/dist/lib/kerror/errors/notFoundError.d.ts +1 -1
  259. package/dist/lib/kerror/errors/notFoundError.js +1 -1
  260. package/dist/lib/kerror/errors/partialError.d.ts +8 -2
  261. package/dist/lib/kerror/errors/partialError.js +22 -9
  262. package/dist/lib/kerror/errors/pluginImplementationError.d.ts +9 -1
  263. package/dist/lib/kerror/errors/pluginImplementationError.js +9 -3
  264. package/dist/lib/kerror/errors/preconditionError.d.ts +1 -1
  265. package/dist/lib/kerror/errors/preconditionError.js +1 -1
  266. package/dist/lib/kerror/errors/serviceUnavailableError.d.ts +1 -1
  267. package/dist/lib/kerror/errors/serviceUnavailableError.js +1 -1
  268. package/dist/lib/kerror/errors/sizeLimitError.d.ts +1 -1
  269. package/dist/lib/kerror/errors/sizeLimitError.js +1 -1
  270. package/dist/lib/kerror/errors/tooManyRequestsError.d.ts +1 -1
  271. package/dist/lib/kerror/errors/tooManyRequestsError.js +1 -1
  272. package/dist/lib/kerror/errors/unauthorizedError.d.ts +1 -1
  273. package/dist/lib/kerror/errors/unauthorizedError.js +1 -1
  274. package/dist/lib/kerror/index.d.ts +19 -13
  275. package/dist/lib/kerror/index.js +60 -19
  276. package/dist/lib/kuzzle/Logger.d.ts +2 -2
  277. package/dist/lib/kuzzle/dumpGenerator.d.ts +12 -8
  278. package/dist/lib/kuzzle/dumpGenerator.js +130 -62
  279. package/dist/lib/kuzzle/event/KuzzleEventEmitter.d.ts +18 -9
  280. package/dist/lib/kuzzle/event/KuzzleEventEmitter.js +45 -18
  281. package/dist/lib/kuzzle/event/pipeRunner.d.ts +37 -16
  282. package/dist/lib/kuzzle/event/pipeRunner.js +73 -26
  283. package/dist/lib/kuzzle/event/waterfall.d.ts +11 -1
  284. package/dist/lib/kuzzle/event/waterfall.js +38 -13
  285. package/dist/lib/kuzzle/internalIndexHandler.d.ts +11 -174
  286. package/dist/lib/kuzzle/internalIndexHandler.js +58 -29
  287. package/dist/lib/kuzzle/kuzzle.d.ts +25 -10
  288. package/dist/lib/kuzzle/kuzzle.js +74 -17
  289. package/dist/lib/kuzzle/kuzzleStateEnum.d.ts +16 -12
  290. package/dist/lib/kuzzle/kuzzleStateEnum.js +5 -7
  291. package/dist/lib/kuzzle/vault.d.ts +5 -1
  292. package/dist/lib/kuzzle/vault.js +29 -17
  293. package/dist/lib/model/security/profile.d.ts +34 -5
  294. package/dist/lib/model/security/profile.js +6 -5
  295. package/dist/lib/model/security/rights.d.ts +12 -4
  296. package/dist/lib/model/security/rights.js +7 -6
  297. package/dist/lib/model/security/role.d.ts +8 -4
  298. package/dist/lib/model/security/role.js +12 -6
  299. package/dist/lib/model/security/token.d.ts +8 -0
  300. package/dist/lib/model/security/user.d.ts +8 -2
  301. package/dist/lib/model/security/user.js +7 -4
  302. package/dist/lib/model/storage/apiKey.d.ts +55 -26
  303. package/dist/lib/model/storage/apiKey.js +97 -24
  304. package/dist/lib/model/storage/baseModel.d.ts +77 -66
  305. package/dist/lib/model/storage/baseModel.js +21 -34
  306. package/dist/lib/service/cache/redis.d.ts +53 -36
  307. package/dist/lib/service/cache/redis.js +148 -71
  308. package/dist/lib/service/service.d.ts +14 -19
  309. package/dist/lib/service/service.js +41 -22
  310. package/dist/lib/service/storage/7/elasticsearch.d.ts +136 -93
  311. package/dist/lib/service/storage/7/elasticsearch.js +218 -165
  312. package/dist/lib/service/storage/7/esWrapper.d.ts +30 -13
  313. package/dist/lib/service/storage/7/esWrapper.js +58 -37
  314. package/dist/lib/service/storage/8/elasticsearch.d.ts +153 -119
  315. package/dist/lib/service/storage/8/elasticsearch.js +286 -213
  316. package/dist/lib/service/storage/8/esWrapper.d.ts +30 -13
  317. package/dist/lib/service/storage/8/esWrapper.js +59 -38
  318. package/dist/lib/service/storage/commons/queryTranslator.d.ts +3 -3
  319. package/dist/lib/service/storage/commons/queryTranslator.js +71 -35
  320. package/dist/lib/types/ApiRoute.d.ts +12 -0
  321. package/dist/lib/types/ApiRoute.js +23 -0
  322. package/dist/lib/types/ClientConnection.d.ts +1 -1
  323. package/dist/lib/types/EventHandler.d.ts +10 -0
  324. package/dist/lib/types/Global.d.ts +8 -3
  325. package/dist/lib/types/HttpMessage.d.ts +2 -2
  326. package/dist/lib/types/HttpStream.d.ts +1 -1
  327. package/dist/lib/types/HttpStream.js +3 -1
  328. package/dist/lib/types/JSONObject.d.ts +9 -0
  329. package/dist/lib/types/JSONObject.js +23 -0
  330. package/dist/lib/types/Kuzzle.d.ts +5 -3
  331. package/dist/lib/types/KuzzleDocument.d.ts +1 -1
  332. package/dist/lib/types/KuzzleWebSocket.d.ts +24 -0
  333. package/dist/lib/types/KuzzleWebSocket.js +23 -0
  334. package/dist/lib/types/OpenApiDefinition.d.ts +1 -1
  335. package/dist/lib/types/Plugin.d.ts +33 -8
  336. package/dist/lib/types/PluginInstance.d.ts +67 -0
  337. package/dist/lib/types/PluginInstance.js +23 -0
  338. package/dist/lib/types/Policy.d.ts +1 -1
  339. package/dist/lib/types/Target.d.ts +8 -0
  340. package/dist/lib/types/Token.d.ts +14 -2
  341. package/dist/lib/types/config/HttpConfiguration.d.ts +5 -0
  342. package/dist/lib/types/config/KuzzleConfiguration.d.ts +102 -1
  343. package/dist/lib/types/config/PluginsConfiguration.d.ts +3 -2
  344. package/dist/lib/types/config/SecurityConfiguration.d.ts +6 -2
  345. package/dist/lib/types/config/ServerConfiguration.d.ts +2 -2
  346. package/dist/lib/types/config/ServicesConfiguration.d.ts +1 -1
  347. package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.d.ts +131 -0
  348. package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.js +3 -0
  349. package/dist/lib/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +2 -106
  350. package/dist/lib/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +2 -26
  351. package/dist/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +3 -0
  352. package/dist/lib/types/controllers/Controller.d.ts +12 -3
  353. package/dist/lib/types/controllers/ControllerDefinition.d.ts +2 -2
  354. package/dist/lib/types/controllers/{adminControlller.type.js → adminController.type.js} +1 -1
  355. package/dist/lib/types/controllers/authController.type.d.ts +2 -2
  356. package/dist/lib/types/core/auth/formatProcessing.type.d.ts +7 -1
  357. package/dist/lib/types/errors/ErrorDomains.d.ts +1 -1
  358. package/dist/lib/types/events/EventGenericDocument.d.ts +10 -9
  359. package/dist/lib/types/events/EventProtocol.d.ts +4 -4
  360. package/dist/lib/types/index.d.ts +7 -0
  361. package/dist/lib/types/index.js +7 -0
  362. package/dist/lib/types/shared/StoreCollectionsDefinition.d.ts +1 -1
  363. package/dist/lib/types/storage/7/Elasticsearch.d.ts +62 -13
  364. package/dist/lib/types/storage/8/Elasticsearch.d.ts +62 -13
  365. package/dist/lib/util/Inflector.d.ts +4 -1
  366. package/dist/lib/util/Inflector.js +0 -3
  367. package/dist/lib/util/assertType.d.ts +24 -27
  368. package/dist/lib/util/assertType.js +28 -39
  369. package/dist/lib/util/async.js +19 -6
  370. package/dist/lib/util/asyncStore.js +1 -1
  371. package/dist/lib/util/bufferedPassThrough.d.ts +9 -0
  372. package/dist/lib/util/bufferedPassThrough.js +27 -13
  373. package/dist/lib/util/bytes.d.ts +1 -1
  374. package/dist/lib/util/bytes.js +6 -2
  375. package/dist/lib/util/debug.d.ts +3 -1
  376. package/dist/lib/util/debug.js +42 -10
  377. package/dist/lib/util/deprecate.d.ts +9 -1
  378. package/dist/lib/util/deprecate.js +10 -6
  379. package/dist/lib/util/didYouMean.d.ts +2 -1
  380. package/dist/lib/util/didYouMean.js +8 -4
  381. package/dist/lib/util/distributedLock.d.ts +56 -0
  382. package/dist/lib/util/distributedLock.js +166 -0
  383. package/dist/lib/util/dump-collection.d.ts +1 -1
  384. package/dist/lib/util/dump-collection.js +4 -5
  385. package/dist/lib/util/extractFields.d.ts +15 -11
  386. package/dist/lib/util/extractFields.js +8 -9
  387. package/dist/lib/util/koncordeCompat.d.ts +2 -2
  388. package/dist/lib/util/koncordeCompat.js +33 -0
  389. package/dist/lib/util/memoize.d.ts +7 -6
  390. package/dist/lib/util/memoize.js +3 -3
  391. package/dist/lib/util/mutex.d.ts +22 -2
  392. package/dist/lib/util/mutex.js +39 -1
  393. package/dist/lib/util/name-generator.js +14 -2
  394. package/dist/lib/util/promback.d.ts +20 -11
  395. package/dist/lib/util/promback.js +14 -7
  396. package/dist/lib/util/requestAssertions.d.ts +30 -10
  397. package/dist/lib/util/requestAssertions.js +125 -121
  398. package/dist/lib/util/safeObject.d.ts +3 -3
  399. package/dist/lib/util/safeObject.js +7 -3
  400. package/dist/lib/util/stackTrace.d.ts +13 -5
  401. package/dist/lib/util/stackTrace.js +17 -12
  402. package/dist/lib/util/thrown.d.ts +13 -0
  403. package/dist/lib/util/thrown.js +46 -0
  404. package/dist/package.json +26 -19
  405. package/package.json +26 -19
  406. package/dist/lib/util/wildcard.d.ts +0 -1
  407. package/dist/lib/util/wildcard.js +0 -46
  408. /package/dist/lib/types/controllers/{adminControlller.type.d.ts → adminController.type.d.ts} +0 -0
@@ -1,12 +1,8 @@
1
- export = kuzzleStateEnum;
2
- type kuzzleStateEnum = number;
3
- /**
4
- * @typedef {number} kuzzleStateEnum
5
- */
6
1
  /**
7
- * Enum for Kuzzle's state
8
- * @readOnly
9
- * @enum {kuzzleStateEnum}
2
+ * Enum for Kuzzle's state.
3
+ *
4
+ * A frozen object rather than a TypeScript `enum`: the JavaScript exported a
5
+ * frozen one, and an `enum` emits an ordinary, mutable object.
10
6
  */
11
7
  declare const kuzzleStateEnum: Readonly<{
12
8
  NOT_ENOUGH_NODES: 4;
@@ -14,7 +10,15 @@ declare const kuzzleStateEnum: Readonly<{
14
10
  SHUTTING_DOWN: 3;
15
11
  STARTING: 1;
16
12
  }>;
17
- declare namespace kuzzleStateEnum {
18
- export { kuzzleStateEnum };
19
- }
20
- type kuzzleStateEnum = number;
13
+ /**
14
+ * The value and the type keep the same name, which is what lets `kuzzle.ts`
15
+ * write both `kuzzleStateEnum.RUNNING` and `get state(): kuzzleStateEnum` —
16
+ * the two spellings the JavaScript supported through a `@typedef`.
17
+ *
18
+ * Derived from the object rather than declared, so it cannot drift. It widens
19
+ * to `number`, which is exactly what `@typedef {number} kuzzleStateEnum` said:
20
+ * `Object.freeze` over a plain literal gives `Readonly<{ … : number }>`, not
21
+ * literal types, so no call site has to change.
22
+ */
23
+ type kuzzleStateEnum = (typeof kuzzleStateEnum)[keyof typeof kuzzleStateEnum];
24
+ export = kuzzleStateEnum;
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /*
2
3
  * Kuzzle, a backend software, self-hostable and ready to use
3
4
  * to power modern apps
@@ -18,14 +19,11 @@
18
19
  * See the License for the specific language governing permissions and
19
20
  * limitations under the License.
20
21
  */
21
- "use strict";
22
22
  /**
23
- * @typedef {number} kuzzleStateEnum
24
- */
25
- /**
26
- * Enum for Kuzzle's state
27
- * @readOnly
28
- * @enum {kuzzleStateEnum}
23
+ * Enum for Kuzzle's state.
24
+ *
25
+ * A frozen object rather than a TypeScript `enum`: the JavaScript exported a
26
+ * frozen one, and an `enum` emits an ordinary, mutable object.
29
27
  */
30
28
  const kuzzleStateEnum = Object.freeze({
31
29
  NOT_ENOUGH_NODES: 4,
@@ -1,2 +1,6 @@
1
- export function load(vaultKey: any, secretsFile: any): Vault;
2
1
  import { Vault } from "kuzzle-vault";
2
+ declare function load(vaultKey?: string, secretsFile?: string, useNewAlgorithm?: boolean): Vault;
3
+ declare const _default: {
4
+ load: typeof load;
5
+ };
6
+ export = _default;
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /*
2
3
  * Kuzzle, a backend software, self-hostable and ready to use
3
4
  * to power modern apps
@@ -18,42 +19,53 @@
18
19
  * See the License for the specific language governing permissions and
19
20
  * limitations under the License.
20
21
  */
21
- "use strict";
22
- const assert = require("assert");
23
- const fs = require("fs");
24
- const path = require("path");
25
- const _ = require("lodash");
26
- const { Vault } = require("kuzzle-vault");
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ const node_assert_1 = __importDefault(require("node:assert"));
26
+ const node_fs_1 = __importDefault(require("node:fs"));
27
+ const node_path_1 = __importDefault(require("node:path"));
28
+ const kuzzle_vault_1 = require("kuzzle-vault");
29
+ const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
27
30
  // The Vault package remove the variable from env after reading it and we have
28
31
  // to instantiate the Vault two times with Kaaf (one before init and one after)
32
+ //
33
+ // `| undefined` is the truth until the first call assigns it. A module-scope
34
+ // `let` escapes TypeScript's definite-assignment analysis, so `: string` passed
35
+ // strict while being false for every read before that first assignment
36
+ // (TD-57, #2760).
29
37
  let ENV_VAULT_KEY;
30
- function load(vaultKey, secretsFile) {
38
+ function load(vaultKey, secretsFile, useNewAlgorithm = false) {
31
39
  // Using KaaF kuzzle is an npm package and is located under node_modules folder
32
40
  // We need to get back to root folder of the project to get the secret file
33
41
  const defaultEncryptedSecretsFile = __dirname.endsWith("/node_modules/kuzzle/lib/kuzzle")
34
- ? path.resolve(`${__dirname}/../../../../config/secrets.enc.json`)
35
- : path.resolve(`${__dirname}/../../config/secrets.enc.json`);
42
+ ? node_path_1.default.resolve(`${__dirname}/../../../../config/secrets.enc.json`)
43
+ : node_path_1.default.resolve(`${__dirname}/../../config/secrets.enc.json`);
36
44
  const encryptedSecretsFile = secretsFile ||
37
45
  process.env.KUZZLE_SECRETS_FILE ||
38
46
  defaultEncryptedSecretsFile;
39
47
  let key = vaultKey;
40
- if (_.isEmpty(vaultKey) &&
41
- (!_.isEmpty(process.env.KUZZLE_VAULT_KEY) || !_.isEmpty(ENV_VAULT_KEY))) {
48
+ if ((0, isEmpty_1.default)(vaultKey) &&
49
+ (!(0, isEmpty_1.default)(process.env.KUZZLE_VAULT_KEY) || !(0, isEmpty_1.default)(ENV_VAULT_KEY))) {
42
50
  // Keep the vault key value when reading it from the env
43
51
  key = ENV_VAULT_KEY = process.env.KUZZLE_VAULT_KEY || ENV_VAULT_KEY;
44
52
  }
45
- const fileExists = fs.existsSync(encryptedSecretsFile);
53
+ const fileExists = node_fs_1.default.existsSync(encryptedSecretsFile);
46
54
  // Abort if a custom secrets file has been provided but Kuzzle can't load it
47
- if (!_.isEmpty(process.env.KUZZLE_SECRETS_FILE) || !_.isEmpty(secretsFile)) {
48
- assert(fileExists, `A secret file has been provided but Kuzzle cannot find it at "${encryptedSecretsFile}".`);
55
+ if (!(0, isEmpty_1.default)(process.env.KUZZLE_SECRETS_FILE) || !(0, isEmpty_1.default)(secretsFile)) {
56
+ (0, node_assert_1.default)(fileExists, `A secret file has been provided but Kuzzle cannot find it at "${encryptedSecretsFile}".`);
49
57
  }
50
58
  // Abort if a secret file is found (default or custom)
51
59
  // but no vault key has been provided
52
- assert(!(fileExists && _.isEmpty(key)), "A secret file has been provided but Kuzzle cannot find the Vault key. Aborting.");
60
+ (0, node_assert_1.default)(!(fileExists && (0, isEmpty_1.default)(key)), "A secret file has been provided but Kuzzle cannot find the Vault key. Aborting.");
53
61
  // Abort if a vault key has been provided
54
62
  // but no secrets file can be loaded (default or custom)
55
- assert(!(!_.isEmpty(key) && !fileExists), `A Vault key is present but Kuzzle cannot find the secret file at "${encryptedSecretsFile}". Aborting.`);
56
- const vault = new Vault(key);
63
+ (0, node_assert_1.default)(!(!(0, isEmpty_1.default)(key) && !fileExists), `A Vault key is present but Kuzzle cannot find the secret file at "${encryptedSecretsFile}". Aborting.`);
64
+ const vault = new kuzzle_vault_1.Vault(key, {
65
+ cipher: useNewAlgorithm
66
+ ? kuzzle_vault_1.CryptonomiconCipher.AES_256_GCM
67
+ : kuzzle_vault_1.CryptonomiconCipher.AES_256_CBC,
68
+ });
57
69
  if (key) {
58
70
  vault.decrypt(encryptedSecretsFile);
59
71
  }
@@ -1,17 +1,32 @@
1
- import { Policy, OptimizedPolicy, OptimizedPolicyRestrictions } from "../../types/index";
2
- import { Role } from "./role";
3
- import { KuzzleRequest } from "../../../index";
1
+ import type { Policy, OptimizedPolicy, OptimizedPolicyRestrictions } from "../../types/index";
2
+ import type { Role } from "./role";
3
+ import type { KuzzleRequest } from "../../../index";
4
4
  /** @internal */
5
5
  type InternalProfilePolicy = {
6
6
  role: Role;
7
+ /**
8
+ * Carried straight off the optimized policy, which may not have one.
9
+ * Declared as always present all the same, as v2.56.0 declared it: this
10
+ * reaches plugins through `getPolicies()`.
11
+ */
7
12
  restrictedTo: OptimizedPolicyRestrictions;
8
13
  };
9
14
  /**
10
15
  * @class Profile
11
16
  */
12
17
  export declare class Profile {
18
+ /**
19
+ * `null` until the profile is stored — see ADR-0001, TD-62. Declared
20
+ * `string` all the same, as v2.56.0 declared it (see `User._id`).
21
+ */
13
22
  _id: string;
14
23
  policies: Policy[];
24
+ /**
25
+ * Unset while the profile is persisted — `persistToDatabase` clears it so the
26
+ * derived form is never written — and the two readers below test for
27
+ * `undefined` (ADR-0001, TD-40 / TD-56). Declared as always present all the
28
+ * same, as v2.56.0 declared it.
29
+ */
15
30
  optimizedPolicies: OptimizedPolicy[];
16
31
  rateLimit: number;
17
32
  constructor();
@@ -40,7 +55,7 @@ export declare class Profile {
40
55
  * @returns {Promise}
41
56
  */
42
57
  validateDefinition({ strict }?: {
43
- strict?: boolean;
58
+ strict?: boolean | undefined;
44
59
  }): Promise<boolean>;
45
60
  /**
46
61
  * Resolves an array of rights related to the profile's roles.
@@ -48,7 +63,21 @@ export declare class Profile {
48
63
  * @returns {Promise}
49
64
  */
50
65
  getRights(): Promise<{}>;
51
- static _hash(): boolean;
66
+ /**
67
+ * Hashes a rights item into the key it is stored under.
68
+ *
69
+ * Placeholder on purpose: `profileRepository` replaces it with
70
+ * `global.kuzzle.hash` at startup, and the `false` returned here is exactly
71
+ * how that patching detects an un-patched class. The overload signature
72
+ * describes the patched function; the implementation is the stub.
73
+ *
74
+ * The patch is `global.kuzzle.hash`, which returns a **number** (`murmur.v3`)
75
+ * — hence `number | false` in practice. Declared `any`, v2.56.0's public
76
+ * type being `() => boolean`: code compiled against that reads a `boolean`
77
+ * back or assigns a `boolean`-returning stub, and no narrower type accepts
78
+ * both that and the patch.
79
+ */
80
+ static _hash(rightsItem?: unknown): any;
52
81
  validateRateLimit(): void;
53
82
  }
54
83
  export {};
@@ -72,9 +72,9 @@ class Profile {
72
72
  if (!global.kuzzle) {
73
73
  throw kerror.get("security", "profile", "uninitialized", this._id);
74
74
  }
75
- return bluebird_1.default.map(this.optimizedPolicies, async ({ restrictedTo, roleId }) => {
75
+ return bluebird_1.default.map(this.optimizedPolicies ?? [], async ({ restrictedTo, roleId }) => {
76
76
  const role = await global.kuzzle.ask("core:security:role:get", roleId);
77
- return { restrictedTo, role };
77
+ return { restrictedTo: restrictedTo, role };
78
78
  });
79
79
  }
80
80
  /**
@@ -209,9 +209,10 @@ class Profile {
209
209
  value: actionRights,
210
210
  };
211
211
  const rightsObject = {
212
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
213
- // @ts-ignore
214
- [this.constructor._hash(rightsItem)]: rightsItem,
212
+ // `String()` is what the computed key does implicitly anyway
213
+ // (`_hash` returns a number, or `false` while un-patched), and
214
+ // it is what makes that return type legal here — see `_hash`.
215
+ [String(this.constructor._hash(rightsItem))]: rightsItem,
215
216
  };
216
217
  lodash_1.default.assignWith(profileRights, rightsObject, rights_1.default.merge);
217
218
  }
@@ -1,8 +1,16 @@
1
+ interface PolicyRight {
2
+ value?: string | boolean;
3
+ }
1
4
  /**
2
5
  * Merge function for policies rights
3
- * @param {Object} prev existing policies rights
4
- * @param {Object} cur new policies rights to merge
5
6
  *
6
- * @returns {Object} the merged policies rights
7
+ * @param prev existing policies rights
8
+ * @param cur new policies rights to merge
9
+ *
10
+ * @returns the merged policies rights
7
11
  */
8
- export function merge(prev: any, cur: any): any;
12
+ declare function merge(prev: PolicyRight | undefined, cur: PolicyRight): PolicyRight;
13
+ declare const _default: {
14
+ merge: typeof merge;
15
+ };
16
+ export = _default;
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /*
2
3
  * Kuzzle, a backend software, self-hostable and ready to use
3
4
  * to power modern apps
@@ -18,16 +19,16 @@
18
19
  * See the License for the specific language governing permissions and
19
20
  * limitations under the License.
20
21
  */
21
- "use strict";
22
- function isAllowed(obj) {
23
- return obj && (obj.value === "allowed" || obj.value === true);
22
+ function isAllowed(right) {
23
+ return Boolean(right && (right.value === "allowed" || right.value === true));
24
24
  }
25
25
  /**
26
26
  * Merge function for policies rights
27
- * @param {Object} prev existing policies rights
28
- * @param {Object} cur new policies rights to merge
29
27
  *
30
- * @returns {Object} the merged policies rights
28
+ * @param prev existing policies rights
29
+ * @param cur new policies rights to merge
30
+ *
31
+ * @returns the merged policies rights
31
32
  */
32
33
  function merge(prev, cur) {
33
34
  cur.value = isAllowed(cur) || isAllowed(prev) ? "allowed" : "denied";
@@ -1,11 +1,15 @@
1
- import { ControllerRight, ControllerRights } from "../../types/controllers/ControllerRights";
2
- import { KuzzleRequest } from "../../../index";
3
- import { OptimizedPolicyRestrictions } from "../../types/PolicyRestrictions";
1
+ import type { ControllerRight, ControllerRights } from "../../types/controllers/ControllerRights";
2
+ import type { KuzzleRequest } from "../../../index";
3
+ import type { OptimizedPolicyRestrictions } from "../../types/PolicyRestrictions";
4
4
  /**
5
5
  * @class Role
6
6
  */
7
7
  export declare class Role {
8
8
  controllers: ControllerRights;
9
+ /**
10
+ * The constructor does not set it; `RoleRepository` does, on the way out of
11
+ * the store. See ADR-0001, TD-62.
12
+ */
9
13
  _id: string;
10
14
  constructor();
11
15
  /**
@@ -23,7 +27,7 @@ export declare class Role {
23
27
  * @param {Map<string, string[]>} restrictedTo Restricted indexes
24
28
  * @returns {Boolean} resolves to a Boolean value
25
29
  */
26
- checkRestrictions(index: string, collection: string, restrictedTo: OptimizedPolicyRestrictions): boolean;
30
+ checkRestrictions(index: string, collection: string, restrictedTo?: OptimizedPolicyRestrictions): boolean;
27
31
  /**
28
32
  * Verifies that a controller rights definition is correct
29
33
  *
@@ -75,7 +75,8 @@ class Role {
75
75
  (this.controllers.ms || this.controllers.memoryStorage)) {
76
76
  controllerRights = this.controllers.ms || this.controllers.memoryStorage;
77
77
  }
78
- else if ((0, safeObject_1.has)(this.controllers, request.input.controller)) {
78
+ else if (request.input.controller !== null &&
79
+ (0, safeObject_1.has)(this.controllers, request.input.controller)) {
79
80
  controllerRights = this.controllers[request.input.controller];
80
81
  }
81
82
  else if (this.controllers["*"] !== undefined) {
@@ -84,11 +85,13 @@ class Role {
84
85
  else {
85
86
  return false;
86
87
  }
87
- if (controllerRights.actions === undefined) {
88
+ if (controllerRights === undefined ||
89
+ controllerRights.actions === undefined) {
88
90
  return false;
89
91
  }
90
92
  let actionRights;
91
- if ((0, safeObject_1.has)(controllerRights.actions, request.input.action)) {
93
+ if (request.input.action !== null &&
94
+ (0, safeObject_1.has)(controllerRights.actions, request.input.action)) {
92
95
  actionRights = controllerRights.actions[request.input.action];
93
96
  }
94
97
  else if (controllerRights.actions["*"] !== undefined) {
@@ -125,7 +128,10 @@ class Role {
125
128
  * @param {Map<string, string[]>} restrictedTo Restricted indexes
126
129
  * @returns {Boolean} resolves to a Boolean value
127
130
  */
128
- checkRestrictions(index, collection, restrictedTo) {
131
+ checkRestrictions(index, collection,
132
+ // Optional, and the first line already reads it as such: an optimized
133
+ // policy carries `restrictedTo` only when the profile restricted it.
134
+ restrictedTo) {
129
135
  // If no restrictions, we allow the action:
130
136
  if (!restrictedTo || restrictedTo.size === 0) {
131
137
  return true;
@@ -191,8 +197,8 @@ class Role {
191
197
  */
192
198
  canLogIn() {
193
199
  for (const controllerKey of ["auth", "*"]) {
194
- if (this.controllers[controllerKey]) {
195
- const controller = this.controllers[controllerKey];
200
+ const controller = this.controllers[controllerKey];
201
+ if (controller) {
196
202
  for (const actionKey of ["login", "*"]) {
197
203
  const action = controller.actions[actionKey];
198
204
  if (typeof action === "boolean" && action) {
@@ -17,6 +17,14 @@ export interface TokenContent {
17
17
  * Represents a token that identify an user.
18
18
  */
19
19
  export declare class Token implements TokenContent {
20
+ /**
21
+ * The constructor writes `null` for any of these five its `TokenContent`
22
+ * did not carry, and a `Token` is routinely built empty —
23
+ * `Token.Anonymous()` and the repository's cache miss both do it (ADR-0001,
24
+ * TD-62). They are declared non-nullable all the same, as v2.56.0 declared
25
+ * them: plugins read `request.context.token.userId` as a `string`, and
26
+ * `| null` broke that under `strict`.
27
+ */
20
28
  _id: string;
21
29
  expiresAt: number;
22
30
  ttl: number;
@@ -1,9 +1,15 @@
1
- import { Profile } from "./profile";
2
- import { KuzzleRequest } from "../../../index";
1
+ import type { Profile } from "./profile";
2
+ import type { KuzzleRequest } from "../../../index";
3
3
  /**
4
4
  * @class User
5
5
  */
6
6
  export declare class User {
7
+ /**
8
+ * `null` until the user is stored — see ADR-0001, TD-62. Declared `string`
9
+ * all the same, as v2.56.0 declared it: `request.context.user._id` read as
10
+ * a `string` is everywhere in plugins and applications, and a
11
+ * `string | null` broke every one of them under `strict`.
12
+ */
7
13
  _id: string;
8
14
  profileIds: string[];
9
15
  strategies: any;
@@ -109,20 +109,23 @@ class User {
109
109
  const profilesPolicies = await Promise.all(profiles.map((profile) => profile.getAllowedPolicies(request)));
110
110
  // Every target must be allowed by at least one profile
111
111
  for (const target of targets) {
112
+ // Held in locals: the closures below lose the narrowing this guard gives
113
+ // the properties.
114
+ const { index, collections } = target;
112
115
  // Skip targets with no Index or Collection
113
- if (!target.index || !target.collections) {
116
+ if (!index || !collections) {
114
117
  continue;
115
118
  }
116
119
  // TODO: Support Wildcard
117
- if (target.index.includes("*")) {
120
+ if (index.includes("*")) {
118
121
  return false;
119
122
  }
120
- for (const collection of target.collections) {
123
+ for (const collection of collections) {
121
124
  // TODO: Support Wildcard
122
125
  if (collection.includes("*")) {
123
126
  return false;
124
127
  }
125
- const isTargetAllowed = profilesPolicies.some((policies) => policies.some((policy) => policy.role.checkRestrictions(target.index, collection, policy.restrictedTo)));
128
+ const isTargetAllowed = profilesPolicies.some((policies) => policies.some((policy) => policy.role.checkRestrictions(index, collection, policy.restrictedTo)));
126
129
  if (!isTargetAllowed) {
127
130
  return false;
128
131
  }
@@ -1,49 +1,78 @@
1
- export = ApiKey;
1
+ import type { JSONObject } from "../../types/JSONObject";
2
+ import type { KuzzleRequest } from "../../api/request";
3
+ import BaseModel from "./baseModel";
4
+ import type { User } from "../security/user";
5
+ interface ApiKeyCreateOptions {
6
+ creatorId?: string | null;
7
+ apiKeyId?: string | null;
8
+ refresh?: boolean | string;
9
+ bypassMaxTTL?: boolean;
10
+ }
2
11
  declare class ApiKey extends BaseModel {
12
+ userId: string;
13
+ description: string;
14
+ expiresAt: number;
15
+ ttl: number | string;
16
+ token: string;
17
+ fingerprint: string;
18
+ constructor(_source: JSONObject, _id?: string | null);
3
19
  /**
4
20
  * @override
5
21
  */
6
- static override get collection(): string;
22
+ _afterDelete(): Promise<void>;
23
+ serialize({ includeToken }?: {
24
+ includeToken?: boolean;
25
+ }): {
26
+ _id: string | null;
27
+ _source: JSONObject;
28
+ };
7
29
  /**
8
30
  * @override
9
31
  */
10
- static override get fields(): string[];
32
+ static get collection(): string;
33
+ /**
34
+ * @override
35
+ */
36
+ static get fields(): string[];
11
37
  /**
12
38
  * Creates a new API key for an user
13
39
  *
14
- * @param {User} user
15
- * @param {String} expiresIn - API key expiration date in ms format
16
- * @param {String} description
17
- * @param {Object} options - creatorId (null), apiKeyId (null), refresh (null), bypassMaxTTL (false)
18
- *
19
- * @returns {Promise<ApiKey>}
40
+ * @param user
41
+ * @param expiresIn - API key expiration date in ms format
42
+ * @param description
43
+ * @param options - creatorId (null), apiKeyId (null), refresh (null), bypassMaxTTL (false)
20
44
  */
21
- static create(user: User, expiresIn: string, description: string, { creatorId, apiKeyId, refresh, bypassMaxTTL }?: any): Promise<ApiKey>;
45
+ static create(user: User, expiresIn: number | string, description: string, { creatorId, apiKeyId, refresh, bypassMaxTTL, }?: ApiKeyCreateOptions): Promise<ApiKey>;
22
46
  /**
23
47
  * Loads an user API key from the database
24
48
  *
25
- * @param {String} userId - User ID
26
- * @param {String} id - API key ID
27
- *
28
- * @returns {Promise<ApiKey>}
49
+ * @param userId - User ID
50
+ * @param id - API key ID
29
51
  */
30
52
  static load(userId: string, id: string): Promise<ApiKey>;
31
53
  /**
32
- * Deletes API keys for an user
54
+ * Loads an user API key from the database by its fingerprint
33
55
  *
34
- * @param {User} user
35
- * @param {Object} options - refresh (null)
56
+ * @param userId - User ID
57
+ * @param fingerprint - API key fingerprint
58
+ */
59
+ static loadByFingerprint(userId: string, fingerprint: string): Promise<ApiKey>;
60
+ /**
61
+ * Loads a user's API key from a request, identified by its `_id`, its
62
+ * clear-text `key` or its `fingerprint` (in that order of precedence).
36
63
  *
37
- * @returns {Promise}
64
+ * @param userId - User ID
65
+ * @param request - Request carrying the `_id`, `key` or `fingerprint` argument
38
66
  */
39
- static deleteByUser(user: User, { refresh }?: any): Promise<any>;
40
- constructor(_source: any, _id?: any);
67
+ static loadFromRequest(userId: string, request: KuzzleRequest): Promise<ApiKey>;
41
68
  /**
42
- * @override
69
+ * Deletes API keys for an user
70
+ *
71
+ * @param user
72
+ * @param options - refresh (null)
43
73
  */
44
- override _afterDelete(): Promise<void>;
45
- serialize({ includeToken }?: {
46
- includeToken?: boolean;
47
- }): any;
74
+ static deleteByUser(user: User, { refresh }?: {
75
+ refresh?: boolean | string;
76
+ }): Promise<void>;
48
77
  }
49
- import BaseModel = require("./baseModel");
78
+ export = ApiKey;