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
@@ -50,14 +50,15 @@ exports.PluginContext = void 0;
50
50
  const bluebird_1 = __importDefault(require("bluebird"));
51
51
  const lodash_1 = __importDefault(require("lodash"));
52
52
  const KoncordeWrapper_1 = require("../shared/KoncordeWrapper");
53
- const index_1 = require("../../../index");
53
+ const request_1 = require("../../api/request");
54
+ const baseType_1 = __importDefault(require("../validation/baseType"));
54
55
  const kerror = __importStar(require("../../kerror"));
55
56
  const errors_1 = require("../../kerror/errors");
56
57
  const Elasticsearch_1 = require("../../service/storage/Elasticsearch");
57
58
  const mutex_1 = require("../../util/mutex");
58
59
  const promback_1 = __importDefault(require("../../util/promback"));
59
60
  const safeObject_1 = require("../../util/safeObject");
60
- const backend_1 = require("../backend");
61
+ const backendCluster_1 = require("../backend/backendCluster");
61
62
  const embeddedSdk_1 = require("../shared/sdk/embeddedSdk");
62
63
  const store_1 = require("../shared/store");
63
64
  const storeScopeEnum_1 = require("../storage/storeScopeEnum");
@@ -116,14 +117,16 @@ class PluginContext {
116
117
  return Elasticsearch_1.Elasticsearch.buildClient(global.kuzzle.config.services.storageEngine.client);
117
118
  }
118
119
  this.constructors = {
119
- BaseValidationType: require("../validation/baseType"),
120
+ BaseValidationType: baseType_1.default,
120
121
  ESClient: PluginContextESClient,
121
122
  Koncorde: KoncordeWrapper_1.Koncorde,
122
123
  Mutex: mutex_1.Mutex,
123
124
  Repository: PluginContextRepository,
125
+ // A plain function called with `new`: it returns an object, so `new`
126
+ // yields that object — which is what plugins have always relied on.
124
127
  Request: instantiateRequest,
125
- RequestContext: index_1.RequestContext,
126
- RequestInput: index_1.RequestInput,
128
+ RequestContext: request_1.RequestContext,
129
+ RequestInput: request_1.RequestInput,
127
130
  };
128
131
  Object.freeze(this.constructors);
129
132
  this.logger = globalThis.kuzzle.log.child(`${pluginName}`);
@@ -140,8 +143,8 @@ class PluginContext {
140
143
  Object.freeze(this.log);
141
144
  /* context.accessors ================================================== */
142
145
  this.accessors = {
143
- cluster: new backend_1.BackendCluster(),
144
- execute: (request, callback) => execute(request, callback),
146
+ cluster: new backendCluster_1.BackendCluster(),
147
+ execute,
145
148
  nodeId: global.nodeId,
146
149
  sdk: new embeddedSdk_1.EmbeddedSDK(),
147
150
  storage: {
@@ -154,7 +157,7 @@ class PluginContext {
154
157
  },
155
158
  subscription: {
156
159
  register: (connectionId, index, collection, filters) => {
157
- const request = new index_1.KuzzleRequest({
160
+ const request = new request_1.KuzzleRequest({
158
161
  action: "subscribe",
159
162
  body: filters,
160
163
  collection,
@@ -179,91 +182,129 @@ class PluginContext {
179
182
  }
180
183
  exports.PluginContext = PluginContext;
181
184
  /**
182
- * @param {KuzzleRequest} request
183
- * @param {Function} [callback]
185
+ * The implementation says what it really returns: `null` in callback mode.
186
+ * The signature above is the declared one — see {@link PluginExecute}.
184
187
  */
185
188
  function execute(request, callback) {
186
- if (callback && typeof callback !== "function") {
189
+ // `null` means "no callback", as `undefined` does: plugins pass it to ask
190
+ // for a promise explicitly.
191
+ if (callback !== undefined &&
192
+ callback !== null &&
193
+ !isPrombackCallback(callback)) {
187
194
  const error = contextError.get("invalid_callback", typeof callback);
188
195
  global.kuzzle.log.error(error);
189
196
  return bluebird_1.default.reject(error);
190
197
  }
191
- const promback = new promback_1.default(callback);
198
+ const promback = new promback_1.default(isPrombackCallback(callback) ? callback : null);
192
199
  if (!request || lodash_1.default.isEmpty(request)) {
193
- return promback.reject(contextError.get("missing_request"));
200
+ return asRequestPromise(promback.reject(contextError.get("missing_request")), request);
194
201
  }
195
202
  if (request.input.controller === "realtime" &&
203
+ request.input.action !== null &&
196
204
  ["subscribe", "unsubscribe"].includes(request.input.action)) {
197
- return promback.reject(contextError.get("unavailable_realtime", request.input.action));
205
+ return asRequestPromise(promback.reject(contextError.get("unavailable_realtime", request.input.action)), request);
198
206
  }
199
207
  request.clearError();
200
208
  request.status = 102;
201
209
  global.kuzzle.funnel
202
210
  .executePluginRequest(request)
203
211
  .then((result) => {
204
- request.setResult(result, {
205
- status: request.status === 102 ? 200 : request.status,
206
- });
212
+ // No status: a pending 102 becomes 200, any other is kept.
213
+ request.response.configure({ result });
207
214
  promback.resolve(request);
208
215
  })
209
216
  .catch((err) => {
210
217
  promback.reject(err);
211
218
  });
212
- return promback.deferred;
219
+ return asRequestPromise(promback.deferred, request);
220
+ }
221
+ /** Whether a plugin handed `accessors.execute` something callable. */
222
+ function isPrombackCallback(value) {
223
+ return typeof value === "function";
224
+ }
225
+ /**
226
+ * What `execute` answers, from a `Promback`'s deferred.
227
+ *
228
+ * `deferred` is null in callback mode — the caller gets its answer that way,
229
+ * and the JavaScript returned that null — and otherwise settles on
230
+ * `KuzzleRequest | undefined`, because `Promback.resolve()` may be called
231
+ * with nothing. This one is always settled with the request it was handed,
232
+ * so mapping through it is what turns the union into the contract.
233
+ */
234
+ function asRequestPromise(deferred, request) {
235
+ return deferred === null ? null : deferred.then(() => request);
213
236
  }
214
237
  /**
215
- * Instantiates a new Request object, using the provided one
216
- * to set the context informations
238
+ * Copies the three routing fields a plugin's request inherits from the one it
239
+ * was built from.
217
240
  *
218
- * @throws
219
- * @param {Request} request
220
- * @param {Object} data
221
- * @param {Object} [options]
222
- * @returns {Request}
241
+ * Through `input.args`, which is what `input.resource`'s own deprecation
242
+ * notice points at and what those accessors read and write anyway — the loop
243
+ * this replaces asked `RequestResource` for an index signature it does not
244
+ * have.
223
245
  */
246
+ function inheritResource(target, source) {
247
+ const to = target.input.args;
248
+ const from = source.input.args;
249
+ for (const field of ["_id", "index", "collection"]) {
250
+ if (!to[field] && from[field]) {
251
+ to[field] = from[field];
252
+ }
253
+ }
254
+ }
224
255
  function instantiateRequest(request, data, options = {}) {
225
- let _request = request, _data = data, _options = options;
226
- if (!_request) {
256
+ if (!request) {
227
257
  throw contextError.get("missing_request_data");
228
258
  }
229
- if (!(_request instanceof index_1.KuzzleRequest)) {
230
- if (_data) {
231
- _options = _data;
232
- }
233
- _data = _request;
234
- _request = null;
259
+ // Two call shapes: `(request, data, options)` and `(data, options)`. The
260
+ // first argument is what tells them apart, and reassigning it — which is
261
+ // what the JavaScript did — throws away the narrowing that `instanceof`
262
+ // had just established.
263
+ let _request;
264
+ let _data;
265
+ let _options;
266
+ if (request instanceof request_1.KuzzleRequest) {
267
+ _request = request;
268
+ _data = data;
269
+ _options = options;
270
+ Object.assign(_options, _request.context.toJSON());
235
271
  }
236
272
  else {
237
- Object.assign(_options, _request.context.toJSON());
273
+ _request = null;
274
+ _data = request;
275
+ _options = data ?? options;
238
276
  }
239
- const target = new index_1.KuzzleRequest(_data, _options);
277
+ const target = new request_1.KuzzleRequest(_data, _options);
240
278
  // forward informations if a request object was supplied
241
- if (_request) {
242
- for (const resource of ["_id", "index", "collection"]) {
243
- if (!target.input.resource[resource]) {
244
- target.input.resource[resource] = _request.input.resource[resource];
245
- }
246
- }
247
- for (const arg of Object.keys(_request.input.args)) {
248
- if (target.input.args[arg] === undefined) {
249
- target.input.args[arg] = _request.input.args[arg];
250
- }
251
- }
252
- if (!_data || _data.jwt === undefined) {
253
- target.input.jwt = _request.input.jwt;
254
- }
255
- if (_data) {
256
- target.input.volatile = {
257
- ..._request.input.volatile,
258
- ..._data.volatile,
259
- };
260
- }
261
- else {
262
- target.input.volatile = _request.input.volatile;
263
- }
279
+ if (_request !== null) {
280
+ inheritInput(target, _request, _data);
264
281
  }
265
282
  return target;
266
283
  }
284
+ /**
285
+ * Copies onto `target` what it did not receive of its own: the routing
286
+ * fields, the arguments, the token and the volatile data.
287
+ */
288
+ function inheritInput(target, source, data) {
289
+ inheritResource(target, source);
290
+ for (const arg of Object.keys(source.input.args)) {
291
+ if (target.input.args[arg] === undefined) {
292
+ target.input.args[arg] = source.input.args[arg];
293
+ }
294
+ }
295
+ if (data?.jwt === undefined && source.input.jwt !== null) {
296
+ target.input.jwt = source.input.jwt;
297
+ }
298
+ if (data) {
299
+ target.input.volatile = {
300
+ ...source.input.volatile,
301
+ ...data.volatile,
302
+ };
303
+ }
304
+ else if (source.input.volatile !== null) {
305
+ target.input.volatile = source.input.volatile;
306
+ }
307
+ }
267
308
  /**
268
309
  * Returns a currified function of pluginsManager.registerStrategy
269
310
  *
@@ -1,5 +1,9 @@
1
- export = PluginManifest;
1
+ import AbstractManifest from "../shared/abstractManifest";
2
2
  declare class PluginManifest extends AbstractManifest {
3
3
  privileged: boolean;
4
+ load(): {
5
+ kuzzleVersion: string;
6
+ name: string;
7
+ };
4
8
  }
5
- import AbstractManifest = require("../shared/abstractManifest");
9
+ export = PluginManifest;
@@ -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,27 +19,33 @@
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 _ = require("lodash");
23
- const kerror = require("../../kerror").wrap("plugin", "manifest");
24
- const AbstractManifest = require("../shared/abstractManifest");
25
- class PluginManifest extends AbstractManifest {
26
- constructor(pluginPath) {
27
- super(pluginPath);
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ const lodash_1 = require("lodash");
26
+ const kerror_1 = require("../../kerror");
27
+ const abstractManifest_1 = __importDefault(require("../shared/abstractManifest"));
28
+ const kerror = (0, kerror_1.wrap)("plugin", "manifest");
29
+ class PluginManifest extends abstractManifest_1.default {
30
+ constructor() {
31
+ super(...arguments);
28
32
  this.privileged = false;
29
33
  }
30
34
  load() {
31
- super.load();
32
- // Ensure ES will accept the plugin name as index
33
- if (!/^[\w-]+$/.test(this.name)) {
35
+ const loaded = super.load();
36
+ // Ensure ES will accept the plugin name as index. `super.load()` answers
37
+ // the name it established, which is what the `String()` here used to
38
+ // stand in for.
39
+ if (!/^[\w-]+$/.test(loaded.name)) {
34
40
  throw kerror.get("invalid_name", this.path);
35
41
  }
36
- if (!_.isNil(this.raw) && !_.isNil(this.raw.privileged)) {
42
+ if (!(0, lodash_1.isNil)(this.raw) && !(0, lodash_1.isNil)(this.raw.privileged)) {
37
43
  if (typeof this.raw.privileged !== "boolean") {
38
44
  throw kerror.get("invalid_privileged", this.path, typeof this.raw.privileged);
39
45
  }
40
46
  this.privileged = this.raw.privileged;
41
47
  }
48
+ return loaded;
42
49
  }
43
50
  }
44
51
  module.exports = PluginManifest;
@@ -1,53 +1,44 @@
1
- export = PluginRepository;
2
- declare class PluginRepository extends ObjectRepository<any> {
3
- constructor(store: any, collection: any);
4
- collection: any;
5
- ObjectConstructor: ObjectConstructor;
6
- init(options: any): void;
1
+ import type { JSONObject } from "../../types/JSONObject";
2
+ import { ObjectRepository } from "../shared/ObjectRepository";
3
+ /**
4
+ * A plugin's private-storage document.
5
+ *
6
+ * `ObjectRepository` requires `_id` on its type parameter, but the plugin-facing
7
+ * `Repository` contract passes a bare `JSONObject` — a document being created
8
+ * legitimately has no id yet. The public methods below therefore take
9
+ * `JSONObject` and assert the shape at the one place the base needs it, which
10
+ * is also exactly where the runtime has always read `object._id`.
11
+ */
12
+ type PluginDocument = JSONObject & {
13
+ _id: string;
14
+ };
15
+ interface PluginRepositoryOptions {
16
+ ObjectConstructor?: new () => unknown;
17
+ }
18
+ declare class PluginRepository extends ObjectRepository<PluginDocument> {
19
+ constructor(store: {
20
+ index: string;
21
+ }, collection: string);
22
+ init(options?: PluginRepositoryOptions): void;
7
23
  /**
8
24
  * Serializes the object before being persisted to database.
9
- *
10
- * @param {object} data - The object to serialize
11
- * @returns {object}
12
- */
13
- serializeToDatabase(data: object): object;
14
- /**
15
- * @param {object} object
16
- * @param {object} [options]
17
- * @returns {Promise}
18
- */
19
- create(object: object, options?: object): Promise<any>;
20
- /**
21
- * @param {object} object
22
- * @param {object} [options]
23
- * @returns {Promise}
24
- */
25
- createOrReplace(object: object, options?: object): Promise<any>;
26
- /**
27
- * @param {object} object
28
- * @param {object} [options]
29
- * @returns {Promise}
30
25
  */
31
- replace(object: object, options?: object): Promise<any>;
26
+ serializeToDatabase(data: PluginDocument): JSONObject;
27
+ create(object: JSONObject, options?: JSONObject): any;
28
+ createOrReplace(object: JSONObject, options?: JSONObject): any;
29
+ replace(object: JSONObject, options?: JSONObject): any;
30
+ update(object: JSONObject, options?: JSONObject): any;
32
31
  /**
33
- * @param {object} object
34
- * @param {object} [options]
35
- * @returns {Promise}
36
- */
37
- update(object: object, options?: object): Promise<any>;
38
- /**
39
- * If we load a user that does not exists, we have to resolve the promise with null
40
- * instead of throwing NotFoundError
32
+ * If we load a user that does not exists, we have to resolve the promise with
33
+ * null instead of throwing NotFoundError.
41
34
  *
42
- * @param {string} documentId
43
- * @returns {Promise}
35
+ * Declared `Promise<PluginDocument>` all the same, as the base's `load()`
36
+ * is — see there.
44
37
  */
45
- load(documentId: string): Promise<any>;
38
+ load(documentId: string): Promise<PluginDocument>;
46
39
  /**
47
- * @param {string} documentId
48
- * @param {object} [options]
49
- * @returns {Promise}
40
+ * Unlike its base, this one deletes by id — the shape a plugin holds.
50
41
  */
51
- delete(documentId: string, options?: object): Promise<any>;
42
+ delete(documentId: string | PluginDocument, options?: JSONObject): Promise<void>;
52
43
  }
53
- import { ObjectRepository } from "../shared/ObjectRepository";
44
+ export = PluginRepository;
@@ -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,13 @@
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 { merge } = require("lodash");
23
- const { NotFoundError } = require("../../kerror/errors");
24
- const { ObjectRepository } = require("../shared/ObjectRepository");
25
- const { cacheDbEnum } = require("../cache/cacheDbEnum");
26
- class PluginRepository extends ObjectRepository {
22
+ const lodash_1 = require("lodash");
23
+ const errors_1 = require("../../kerror/errors");
24
+ const cacheDbEnum_1 = require("../cache/cacheDbEnum");
25
+ const ObjectRepository_1 = require("../shared/ObjectRepository");
26
+ class PluginRepository extends ObjectRepository_1.ObjectRepository {
27
27
  constructor(store, collection) {
28
- super({ cache: cacheDbEnum.NONE, store });
28
+ super({ cache: cacheDbEnum_1.cacheDbEnum.NONE, store });
29
29
  this.collection = collection;
30
30
  this.ObjectConstructor = Object;
31
31
  }
@@ -38,74 +38,59 @@ class PluginRepository extends ObjectRepository {
38
38
  }
39
39
  /**
40
40
  * Serializes the object before being persisted to database.
41
- *
42
- * @param {object} data - The object to serialize
43
- * @returns {object}
44
41
  */
45
42
  serializeToDatabase(data) {
46
- // avoid the data var mutation
47
- const result = merge({}, data);
43
+ // avoid the data var mutation. Typed as JSONObject, not PluginDocument:
44
+ // dropping `_id` is the whole point, and `_id` is required on the latter.
45
+ const result = (0, lodash_1.merge)({}, data);
48
46
  delete result._id;
49
47
  return result;
50
48
  }
51
- /**
52
- * @param {object} object
53
- * @param {object} [options]
54
- * @returns {Promise}
55
- */
56
49
  create(object, options = {}) {
57
- const opts = Object.assign({ method: "create" }, options);
58
- return this.persistToDatabase(object, opts);
50
+ return this.persistToDatabase(object, {
51
+ method: "create",
52
+ ...options,
53
+ });
59
54
  }
60
- /**
61
- * @param {object} object
62
- * @param {object} [options]
63
- * @returns {Promise}
64
- */
65
55
  createOrReplace(object, options = {}) {
66
- const opts = Object.assign({ method: "createOrReplace" }, options);
67
- return this.persistToDatabase(object, opts);
56
+ return this.persistToDatabase(object, {
57
+ method: "createOrReplace",
58
+ ...options,
59
+ });
68
60
  }
69
- /**
70
- * @param {object} object
71
- * @param {object} [options]
72
- * @returns {Promise}
73
- */
74
61
  replace(object, options = {}) {
75
- const opts = Object.assign({ method: "replace" }, options);
76
- return this.persistToDatabase(object, opts);
62
+ return this.persistToDatabase(object, {
63
+ method: "replace",
64
+ ...options,
65
+ });
77
66
  }
78
- /**
79
- * @param {object} object
80
- * @param {object} [options]
81
- * @returns {Promise}
82
- */
83
67
  update(object, options = {}) {
84
- const opts = Object.assign({ method: "update" }, options);
85
- return this.persistToDatabase(object, opts);
68
+ return this.persistToDatabase(object, {
69
+ method: "update",
70
+ ...options,
71
+ });
86
72
  }
87
73
  /**
88
- * If we load a user that does not exists, we have to resolve the promise with null
89
- * instead of throwing NotFoundError
74
+ * If we load a user that does not exists, we have to resolve the promise with
75
+ * null instead of throwing NotFoundError.
90
76
  *
91
- * @param {string} documentId
92
- * @returns {Promise}
77
+ * Declared `Promise<PluginDocument>` all the same, as the base's `load()`
78
+ * is — see there.
93
79
  */
94
80
  load(documentId) {
95
81
  return super.load(documentId).catch((error) => {
96
- if (this.collection === "users" && error instanceof NotFoundError) {
97
- return Promise.resolve(null);
82
+ if (this.collection === "users" && error instanceof errors_1.NotFoundError) {
83
+ return null;
98
84
  }
99
85
  throw error;
100
86
  });
101
87
  }
102
88
  /**
103
- * @param {string} documentId
104
- * @param {object} [options]
105
- * @returns {Promise}
89
+ * Unlike its base, this one deletes by id — the shape a plugin holds.
106
90
  */
107
91
  delete(documentId, options = {}) {
108
- return super.delete({ _id: documentId }, options);
92
+ const _id = typeof documentId === "string" ? documentId : documentId._id;
93
+ return super.delete({ _id }, options);
109
94
  }
110
95
  }
111
96
  module.exports = PluginRepository;