kuzzle 2.19.2 → 2.19.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/lib/api/controllers/adminController.js +94 -80
  2. package/lib/api/controllers/authController.js +239 -212
  3. package/lib/api/controllers/baseController.js +89 -51
  4. package/lib/api/controllers/bulkController.js +62 -49
  5. package/lib/api/controllers/clusterController.js +6 -8
  6. package/lib/api/controllers/collectionController.js +140 -129
  7. package/lib/api/controllers/debugController.d.ts +2 -2
  8. package/lib/api/controllers/debugController.js +33 -31
  9. package/lib/api/controllers/documentController.js +365 -274
  10. package/lib/api/controllers/index.js +13 -13
  11. package/lib/api/controllers/indexController.js +46 -50
  12. package/lib/api/controllers/memoryStorageController.js +410 -360
  13. package/lib/api/controllers/realtimeController.js +37 -36
  14. package/lib/api/controllers/securityController.js +553 -412
  15. package/lib/api/controllers/serverController.js +111 -104
  16. package/lib/api/documentExtractor.js +75 -68
  17. package/lib/api/funnel.js +411 -312
  18. package/lib/api/httpRoutes.js +1493 -324
  19. package/lib/api/openapi/OpenApiManager.d.ts +1 -1
  20. package/lib/api/openapi/OpenApiManager.js +22 -22
  21. package/lib/api/openapi/components/document/count.yaml +1 -1
  22. package/lib/api/openapi/components/document/create.yaml +2 -2
  23. package/lib/api/openapi/components/document/delete.yaml +1 -1
  24. package/lib/api/openapi/components/document/deleteByQuery.yaml +1 -1
  25. package/lib/api/openapi/components/document/exists.yaml +1 -1
  26. package/lib/api/openapi/components/document/get.yaml +2 -2
  27. package/lib/api/openapi/components/document/index.js +12 -12
  28. package/lib/api/openapi/components/document/replace.yaml +1 -1
  29. package/lib/api/openapi/components/document/scroll.yaml +1 -1
  30. package/lib/api/openapi/components/document/validate.yaml +1 -1
  31. package/lib/api/openapi/components/index.d.ts +2 -2
  32. package/lib/api/openapi/components/index.js +1 -1
  33. package/lib/api/openapi/components/security/index.js +1 -1
  34. package/lib/api/openapi/components/security/upsertUser.yaml +2 -3
  35. package/lib/api/openapi/index.d.ts +1 -1
  36. package/lib/api/openapi/openApiGenerator.d.ts +1 -1
  37. package/lib/api/openapi/openApiGenerator.js +7 -7
  38. package/lib/api/rateLimiter.js +12 -13
  39. package/lib/api/request/index.d.ts +4 -4
  40. package/lib/api/request/kuzzleRequest.d.ts +9 -9
  41. package/lib/api/request/kuzzleRequest.js +89 -87
  42. package/lib/api/request/requestContext.d.ts +2 -2
  43. package/lib/api/request/requestContext.js +17 -17
  44. package/lib/api/request/requestInput.d.ts +1 -1
  45. package/lib/api/request/requestInput.js +19 -19
  46. package/lib/api/request/requestResponse.d.ts +4 -4
  47. package/lib/api/request/requestResponse.js +31 -33
  48. package/lib/cluster/command.js +48 -44
  49. package/lib/cluster/idCardHandler.d.ts +1 -1
  50. package/lib/cluster/idCardHandler.js +15 -15
  51. package/lib/cluster/index.js +2 -2
  52. package/lib/cluster/node.js +301 -269
  53. package/lib/cluster/publisher.js +45 -46
  54. package/lib/cluster/state.d.ts +5 -5
  55. package/lib/cluster/state.js +8 -8
  56. package/lib/cluster/subscriber.js +163 -113
  57. package/lib/cluster/workers/IDCardRenewer.js +33 -32
  58. package/lib/config/default.config.d.ts +1 -1
  59. package/lib/config/default.config.js +212 -171
  60. package/lib/config/documentEventAliases.js +6 -6
  61. package/lib/config/index.js +161 -98
  62. package/lib/config/sdkCompatibility.json +8 -8
  63. package/lib/core/auth/formatProcessing.js +7 -7
  64. package/lib/core/auth/passportResponse.js +7 -7
  65. package/lib/core/auth/passportWrapper.js +34 -30
  66. package/lib/core/auth/tokenManager.d.ts +2 -2
  67. package/lib/core/auth/tokenManager.js +11 -10
  68. package/lib/core/backend/applicationManager.d.ts +1 -1
  69. package/lib/core/backend/applicationManager.js +2 -2
  70. package/lib/core/backend/backend.d.ts +3 -3
  71. package/lib/core/backend/backend.js +34 -31
  72. package/lib/core/backend/backendCluster.d.ts +2 -2
  73. package/lib/core/backend/backendCluster.js +5 -5
  74. package/lib/core/backend/backendConfig.d.ts +2 -2
  75. package/lib/core/backend/backendConfig.js +3 -3
  76. package/lib/core/backend/backendController.d.ts +2 -2
  77. package/lib/core/backend/backendController.js +9 -10
  78. package/lib/core/backend/backendErrors.d.ts +3 -3
  79. package/lib/core/backend/backendErrors.js +2 -1
  80. package/lib/core/backend/backendHook.d.ts +2 -2
  81. package/lib/core/backend/backendHook.js +5 -5
  82. package/lib/core/backend/backendImport.d.ts +3 -3
  83. package/lib/core/backend/backendImport.js +23 -23
  84. package/lib/core/backend/backendOpenApi.d.ts +2 -2
  85. package/lib/core/backend/backendOpenApi.js +16 -16
  86. package/lib/core/backend/backendPipe.d.ts +2 -2
  87. package/lib/core/backend/backendPipe.js +6 -6
  88. package/lib/core/backend/backendPlugin.d.ts +4 -4
  89. package/lib/core/backend/backendPlugin.js +14 -14
  90. package/lib/core/backend/backendStorage.d.ts +2 -2
  91. package/lib/core/backend/backendStorage.js +1 -2
  92. package/lib/core/backend/backendVault.d.ts +2 -2
  93. package/lib/core/backend/backendVault.js +3 -3
  94. package/lib/core/backend/index.d.ts +14 -14
  95. package/lib/core/backend/internalLogger.d.ts +1 -1
  96. package/lib/core/backend/internalLogger.js +5 -5
  97. package/lib/core/cache/cacheDbEnum.js +4 -4
  98. package/lib/core/cache/cacheEngine.js +79 -85
  99. package/lib/core/network/accessLogger.js +126 -120
  100. package/lib/core/network/clientConnection.js +5 -5
  101. package/lib/core/network/context.js +8 -8
  102. package/lib/core/network/entryPoint.js +100 -85
  103. package/lib/core/network/httpRouter/index.js +63 -60
  104. package/lib/core/network/httpRouter/routeHandler.js +18 -19
  105. package/lib/core/network/httpRouter/routePart.js +23 -19
  106. package/lib/core/network/protocolManifest.js +3 -3
  107. package/lib/core/network/protocols/httpMessage.js +8 -10
  108. package/lib/core/network/protocols/httpwsProtocol.js +305 -250
  109. package/lib/core/network/protocols/internalProtocol.js +27 -24
  110. package/lib/core/network/protocols/mqttProtocol.js +106 -96
  111. package/lib/core/network/protocols/protocol.js +20 -17
  112. package/lib/core/network/router.js +56 -46
  113. package/lib/core/plugin/plugin.js +151 -120
  114. package/lib/core/plugin/pluginContext.d.ts +7 -7
  115. package/lib/core/plugin/pluginContext.js +48 -44
  116. package/lib/core/plugin/pluginManifest.js +13 -12
  117. package/lib/core/plugin/pluginRepository.js +26 -27
  118. package/lib/core/plugin/pluginsManager.js +425 -304
  119. package/lib/core/plugin/privilegedContext.js +3 -3
  120. package/lib/core/realtime/actionEnum.js +1 -1
  121. package/lib/core/realtime/channel.d.ts +1 -1
  122. package/lib/core/realtime/channel.js +22 -22
  123. package/lib/core/realtime/connectionRooms.d.ts +1 -1
  124. package/lib/core/realtime/hotelClerk.d.ts +2 -2
  125. package/lib/core/realtime/hotelClerk.js +53 -50
  126. package/lib/core/realtime/index.js +5 -5
  127. package/lib/core/realtime/notification/document.js +25 -25
  128. package/lib/core/realtime/notification/index.js +4 -4
  129. package/lib/core/realtime/notification/server.js +3 -3
  130. package/lib/core/realtime/notification/user.js +4 -4
  131. package/lib/core/realtime/notifier.js +113 -75
  132. package/lib/core/realtime/room.d.ts +1 -1
  133. package/lib/core/realtime/subscription.d.ts +1 -1
  134. package/lib/core/realtime/subscription.js +1 -1
  135. package/lib/core/security/index.js +8 -8
  136. package/lib/core/security/profileRepository.d.ts +6 -6
  137. package/lib/core/security/profileRepository.js +48 -45
  138. package/lib/core/security/roleRepository.js +127 -115
  139. package/lib/core/security/securityLoader.js +70 -63
  140. package/lib/core/security/tokenRepository.js +132 -118
  141. package/lib/core/security/userRepository.js +104 -88
  142. package/lib/core/shared/KoncordeWrapper.d.ts +1 -1
  143. package/lib/core/shared/KoncordeWrapper.js +3 -1
  144. package/lib/core/shared/abstractManifest.js +22 -23
  145. package/lib/core/shared/repository.js +69 -67
  146. package/lib/core/shared/sdk/embeddedSdk.d.ts +2 -2
  147. package/lib/core/shared/sdk/embeddedSdk.js +36 -32
  148. package/lib/core/shared/sdk/funnelProtocol.d.ts +1 -1
  149. package/lib/core/shared/sdk/funnelProtocol.js +11 -11
  150. package/lib/core/shared/sdk/impersonatedSdk.js +19 -18
  151. package/lib/core/shared/store.js +127 -32
  152. package/lib/core/statistics/index.js +2 -2
  153. package/lib/core/statistics/statistics.js +99 -85
  154. package/lib/core/storage/clientAdapter.js +219 -136
  155. package/lib/core/storage/indexCache.js +3 -3
  156. package/lib/core/storage/storageEngine.js +10 -13
  157. package/lib/core/storage/storeScopeEnum.js +3 -3
  158. package/lib/core/validation/baseType.js +12 -10
  159. package/lib/core/validation/index.js +2 -2
  160. package/lib/core/validation/types/anything.js +4 -4
  161. package/lib/core/validation/types/boolean.js +7 -7
  162. package/lib/core/validation/types/date.js +165 -131
  163. package/lib/core/validation/types/email.js +18 -21
  164. package/lib/core/validation/types/enum.js +34 -21
  165. package/lib/core/validation/types/geoPoint.js +7 -7
  166. package/lib/core/validation/types/geoShape.js +148 -125
  167. package/lib/core/validation/types/integer.js +9 -9
  168. package/lib/core/validation/types/ipAddress.js +17 -19
  169. package/lib/core/validation/types/numeric.js +36 -29
  170. package/lib/core/validation/types/object.js +19 -19
  171. package/lib/core/validation/types/string.js +36 -29
  172. package/lib/core/validation/types/url.js +17 -19
  173. package/lib/core/validation/validation.js +422 -378
  174. package/lib/kerror/codes/1-services.json +7 -1
  175. package/lib/kerror/codes/4-plugin.json +2 -2
  176. package/lib/kerror/codes/index.js +85 -63
  177. package/lib/kerror/errors/badRequestError.d.ts +1 -1
  178. package/lib/kerror/errors/externalServiceError.d.ts +1 -1
  179. package/lib/kerror/errors/forbiddenError.d.ts +1 -1
  180. package/lib/kerror/errors/gatewayTimeoutError.d.ts +1 -1
  181. package/lib/kerror/errors/index.d.ts +15 -15
  182. package/lib/kerror/errors/internalError.d.ts +1 -1
  183. package/lib/kerror/errors/kuzzleError.d.ts +1 -1
  184. package/lib/kerror/errors/multipleErrorsError.d.ts +1 -1
  185. package/lib/kerror/errors/multipleErrorsError.js +1 -1
  186. package/lib/kerror/errors/notFoundError.d.ts +1 -1
  187. package/lib/kerror/errors/partialError.d.ts +1 -1
  188. package/lib/kerror/errors/partialError.js +1 -1
  189. package/lib/kerror/errors/pluginImplementationError.d.ts +1 -1
  190. package/lib/kerror/errors/pluginImplementationError.js +2 -1
  191. package/lib/kerror/errors/preconditionError.d.ts +1 -1
  192. package/lib/kerror/errors/serviceUnavailableError.d.ts +1 -1
  193. package/lib/kerror/errors/sizeLimitError.d.ts +1 -1
  194. package/lib/kerror/errors/tooManyRequestsError.d.ts +1 -1
  195. package/lib/kerror/errors/unauthorizedError.d.ts +1 -1
  196. package/lib/kerror/index.d.ts +3 -3
  197. package/lib/kerror/index.js +17 -16
  198. package/lib/kuzzle/dumpGenerator.js +130 -114
  199. package/lib/kuzzle/event/kuzzleEventEmitter.js +96 -70
  200. package/lib/kuzzle/event/pipeRunner.js +25 -24
  201. package/lib/kuzzle/event/waterfall.js +13 -15
  202. package/lib/kuzzle/index.js +2 -2
  203. package/lib/kuzzle/internalIndexHandler.js +80 -59
  204. package/lib/kuzzle/kuzzle.js +99 -99
  205. package/lib/kuzzle/kuzzleStateEnum.js +1 -1
  206. package/lib/kuzzle/log.js +23 -18
  207. package/lib/kuzzle/vault.js +34 -19
  208. package/lib/model/security/profile.d.ts +3 -3
  209. package/lib/model/security/profile.js +38 -37
  210. package/lib/model/security/rights.js +5 -5
  211. package/lib/model/security/role.d.ts +3 -3
  212. package/lib/model/security/role.js +25 -26
  213. package/lib/model/security/token.d.ts +1 -1
  214. package/lib/model/security/token.js +4 -4
  215. package/lib/model/security/user.d.ts +2 -2
  216. package/lib/model/security/user.js +9 -9
  217. package/lib/model/storage/apiKey.js +43 -33
  218. package/lib/model/storage/baseModel.js +49 -45
  219. package/lib/service/cache/redis.js +60 -55
  220. package/lib/service/service.js +17 -17
  221. package/lib/service/storage/elasticsearch.js +839 -755
  222. package/lib/service/storage/esWrapper.js +103 -86
  223. package/lib/service/storage/queryTranslator.js +52 -59
  224. package/lib/types/Controller.d.ts +3 -3
  225. package/lib/types/ControllerDefinition.d.ts +3 -3
  226. package/lib/types/DebugModule.d.ts +2 -2
  227. package/lib/types/DebugModule.js +1 -1
  228. package/lib/types/Global.d.ts +1 -1
  229. package/lib/types/HttpStream.d.ts +2 -1
  230. package/lib/types/HttpStream.js +7 -5
  231. package/lib/types/Kuzzle.d.ts +1 -1
  232. package/lib/types/KuzzleDocument.d.ts +1 -1
  233. package/lib/types/OpenApiDefinition.d.ts +1 -1
  234. package/lib/types/PasswordPolicy.d.ts +1 -1
  235. package/lib/types/Plugin.d.ts +6 -6
  236. package/lib/types/Plugin.js +2 -2
  237. package/lib/types/Policy.d.ts +1 -1
  238. package/lib/types/RequestPayload.d.ts +1 -1
  239. package/lib/types/ResponsePayload.d.ts +1 -1
  240. package/lib/types/Token.d.ts +1 -1
  241. package/lib/types/User.d.ts +1 -1
  242. package/lib/types/config/DumpConfiguration.d.ts +8 -8
  243. package/lib/types/config/HttpConfiguration.d.ts +1 -1
  244. package/lib/types/config/KuzzleConfiguration.d.ts +1 -1
  245. package/lib/types/config/LimitsConfiguration.d.ts +8 -8
  246. package/lib/types/config/PluginsConfiguration.d.ts +4 -4
  247. package/lib/types/config/SecurityConfiguration.d.ts +62 -62
  248. package/lib/types/config/ServerConfiguration.d.ts +55 -55
  249. package/lib/types/config/ServicesConfiguration.d.ts +2 -2
  250. package/lib/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +10 -10
  251. package/lib/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +3 -3
  252. package/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +194 -110
  253. package/lib/types/errors/ErrorDefinition.d.ts +1 -1
  254. package/lib/types/errors/ErrorDomains.d.ts +1 -1
  255. package/lib/types/index.d.ts +38 -38
  256. package/lib/types/realtime/RealtimeScope.d.ts +1 -1
  257. package/lib/types/realtime/RealtimeUsers.d.ts +1 -1
  258. package/lib/util/assertType.js +13 -11
  259. package/lib/util/async.d.ts +1 -0
  260. package/lib/util/async.js +61 -0
  261. package/lib/util/asyncStore.js +19 -21
  262. package/lib/util/bufferedPassThrough.d.ts +2 -2
  263. package/lib/util/bufferedPassThrough.js +4 -4
  264. package/lib/util/bytes.js +9 -13
  265. package/lib/util/crypto.js +1 -1
  266. package/lib/util/debug.js +5 -5
  267. package/lib/util/deprecate.js +24 -21
  268. package/lib/util/didYouMean.js +7 -7
  269. package/lib/util/dump-collection.d.ts +2 -2
  270. package/lib/util/dump-collection.js +26 -26
  271. package/lib/util/esRequest.d.ts +1 -0
  272. package/lib/util/esRequest.js +62 -0
  273. package/lib/util/extractFields.js +24 -25
  274. package/lib/util/inflector.js +5 -5
  275. package/lib/util/koncordeCompat.d.ts +2 -2
  276. package/lib/util/koncordeCompat.js +5 -5
  277. package/lib/util/memoize.js +3 -5
  278. package/lib/util/mutex.d.ts +19 -1
  279. package/lib/util/mutex.js +39 -12
  280. package/lib/util/name-generator.js +1331 -1331
  281. package/lib/util/promback.js +8 -10
  282. package/lib/util/readYamlFile.d.ts +1 -1
  283. package/lib/util/readYamlFile.js +1 -1
  284. package/lib/util/requestAssertions.js +34 -34
  285. package/lib/util/safeObject.js +5 -5
  286. package/lib/util/stackTrace.js +20 -22
  287. package/lib/util/wildcard.js +15 -15
  288. package/package.json +6 -6
  289. package/npm-shrinkwrap.json +0 -19422
@@ -19,9 +19,9 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const { PluginContext } = require('./pluginContext');
24
+ const { PluginContext } = require("./pluginContext");
25
25
 
26
26
  /**
27
27
  * @class PrivilegedPluginContext
@@ -33,7 +33,7 @@ class PrivilegedPluginContext extends PluginContext {
33
33
  * @param {string} pluginName
34
34
  * @constructor
35
35
  */
36
- constructor (pluginName) {
36
+ constructor(pluginName) {
37
37
  super(pluginName);
38
38
 
39
39
  this.accessors.kuzzle = global.kuzzle;
@@ -19,7 +19,7 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  /**
25
25
  * @typedef {number} notifyActionEnum
@@ -1,4 +1,4 @@
1
- import { RealtimeScope, RealtimeUsers } from '../../types';
1
+ import { RealtimeScope, RealtimeUsers } from "../../types";
2
2
  /**
3
3
  * A channel define how notifications should be send for a particular realtime
4
4
  * room.
@@ -45,7 +45,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
45
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
46
  exports.Channel = void 0;
47
47
  const kerror = __importStar(require("../../kerror"));
48
- const realtimeError = kerror.wrap('core', 'realtime');
48
+ const realtimeError = kerror.wrap("core", "realtime");
49
49
  /**
50
50
  * A channel define how notifications should be send for a particular realtime
51
51
  * room.
@@ -68,15 +68,15 @@ const realtimeError = kerror.wrap('core', 'realtime');
68
68
  * @property cluster
69
69
  */
70
70
  class Channel {
71
- constructor(roomId, { scope = 'all', users = 'none', propagate = true, } = {}) {
71
+ constructor(roomId, { scope = "all", users = "none", propagate = true, } = {}) {
72
72
  this.scope = scope;
73
73
  this.users = users;
74
74
  this.cluster = propagate;
75
75
  if (!Channel.SCOPE_ALLOWED_VALUES.includes(this.scope)) {
76
- throw realtimeError.get('invalid_scope');
76
+ throw realtimeError.get("invalid_scope");
77
77
  }
78
78
  if (!Channel.USERS_ALLOWED_VALUES.includes(this.users)) {
79
- throw realtimeError.get('invalid_users');
79
+ throw realtimeError.get("invalid_users");
80
80
  }
81
81
  this.name = `${roomId}-${Channel.hash(this)}`;
82
82
  }
@@ -86,44 +86,44 @@ class Channel {
86
86
  * This is 10x faster than murmur.
87
87
  */
88
88
  static hash(channel) {
89
- let str = '';
89
+ let str = "";
90
90
  switch (channel.users) {
91
- case 'all':
92
- str += '1';
91
+ case "all":
92
+ str += "1";
93
93
  break;
94
- case 'in':
95
- str += '2';
94
+ case "in":
95
+ str += "2";
96
96
  break;
97
- case 'out':
98
- str += '3';
97
+ case "out":
98
+ str += "3";
99
99
  break;
100
- case 'none':
101
- str += '3';
100
+ case "none":
101
+ str += "3";
102
102
  break;
103
103
  }
104
104
  switch (channel.cluster) {
105
105
  case true:
106
- str += '1';
106
+ str += "1";
107
107
  break;
108
108
  case false:
109
- str += '2';
109
+ str += "2";
110
110
  break;
111
111
  }
112
112
  switch (channel.scope) {
113
- case 'all':
114
- str += '1';
113
+ case "all":
114
+ str += "1";
115
115
  break;
116
- case 'in':
117
- str += '2';
116
+ case "in":
117
+ str += "2";
118
118
  break;
119
- case 'out':
120
- str += '3';
119
+ case "out":
120
+ str += "3";
121
121
  break;
122
122
  }
123
123
  return str;
124
124
  }
125
125
  }
126
126
  exports.Channel = Channel;
127
- Channel.USERS_ALLOWED_VALUES = ['all', 'in', 'out', 'none'];
127
+ Channel.USERS_ALLOWED_VALUES = ["all", "in", "out", "none"];
128
128
  Channel.SCOPE_ALLOWED_VALUES = Channel.USERS_ALLOWED_VALUES;
129
129
  //# sourceMappingURL=channel.js.map
@@ -1,4 +1,4 @@
1
- import { JSONObject } from 'kuzzle-sdk';
1
+ import { JSONObject } from "kuzzle-sdk";
2
2
  /**
3
3
  * Each connection can subscribe to many rooms with different sets of volatile
4
4
  * data.
@@ -1,5 +1,5 @@
1
- import { KuzzleRequest } from '../../api/request';
2
- import { User, RoomList } from '../../types';
1
+ import { KuzzleRequest } from "../../api/request";
2
+ import { User, RoomList } from "../../types";
3
3
  /**
4
4
  * The HotelClerk is responsible of keeping the list of rooms and subscriptions
5
5
  * made to those rooms.
@@ -56,8 +56,8 @@ const channel_1 = require("./channel");
56
56
  const connectionRooms_1 = require("./connectionRooms");
57
57
  const room_1 = require("./room");
58
58
  const subscription_1 = require("./subscription");
59
- const realtimeError = kerror.wrap('core', 'realtime');
60
- const debug = (0, debug_1.default)('kuzzle:realtime:hotelClerk');
59
+ const realtimeError = kerror.wrap("core", "realtime");
60
+ const debug = (0, debug_1.default)("kuzzle:realtime:hotelClerk");
61
61
  /**
62
62
  * The HotelClerk is responsible of keeping the list of rooms and subscriptions
63
63
  * made to those rooms.
@@ -114,13 +114,13 @@ class HotelClerk {
114
114
  * @param {string} roomId
115
115
  * @returns {boolean} status indicating if the room was created or not
116
116
  */
117
- global.kuzzle.onAsk('core:realtime:room:create', (index, collection, roomId) => this.newRoom(index, collection, roomId));
117
+ global.kuzzle.onAsk("core:realtime:room:create", (index, collection, roomId) => this.newRoom(index, collection, roomId));
118
118
  /**
119
119
  * Joins an existing room.
120
120
  * @param {Request} request
121
121
  * @returns {Promise}
122
122
  */
123
- global.kuzzle.onAsk('core:realtime:join', request => this.join(request));
123
+ global.kuzzle.onAsk("core:realtime:join", (request) => this.join(request));
124
124
  /**
125
125
  * Return the list of index, collection, rooms (+ their users count)
126
126
  * on all index/collection pairs that the requesting user is allowed to
@@ -130,25 +130,25 @@ class HotelClerk {
130
130
  * @return {number}
131
131
  * @throws {NotFoundError} If the roomId does not exist
132
132
  */
133
- global.kuzzle.onAsk('core:realtime:list', user => this.list(user));
133
+ global.kuzzle.onAsk("core:realtime:list", (user) => this.list(user));
134
134
  /**
135
135
  * Given an index, returns the list of collections having subscriptions
136
136
  * on them.
137
137
  * @param {string} index
138
138
  * @return {Array.<string>}
139
139
  */
140
- global.kuzzle.onAsk('core:realtime:collections:get', index => this.listCollections(index));
140
+ global.kuzzle.onAsk("core:realtime:collections:get", (index) => this.listCollections(index));
141
141
  /**
142
142
  * Removes a user and all their subscriptions.
143
143
  * @param {string} connectionId
144
144
  */
145
- global.kuzzle.onAsk('core:realtime:connection:remove', connectionId => this.removeConnection(connectionId));
145
+ global.kuzzle.onAsk("core:realtime:connection:remove", (connectionId) => this.removeConnection(connectionId));
146
146
  /**
147
147
  * Adds a new user subscription
148
148
  * @param {Request} request
149
149
  * @return {Object|null}
150
150
  */
151
- global.kuzzle.onAsk('core:realtime:subscribe', request => this.subscribe(request));
151
+ global.kuzzle.onAsk("core:realtime:subscribe", (request) => this.subscribe(request));
152
152
  /**
153
153
  * Unsubscribes a user from a room
154
154
  * @param {string} connectionId
@@ -156,24 +156,23 @@ class HotelClerk {
156
156
  * @param {string} kuid
157
157
  * @param {boolean} [notify]
158
158
  */
159
- global.kuzzle.onAsk('core:realtime:unsubscribe', (connectionId, roomId, notify) => {
159
+ global.kuzzle.onAsk("core:realtime:unsubscribe", (connectionId, roomId, notify) => {
160
160
  return this.unsubscribe(connectionId, roomId, notify);
161
161
  });
162
162
  /**
163
163
  * Returns inner metrics from the HotelClerk
164
164
  * @return {{rooms: number, subscriptions: number}}
165
165
  */
166
- global.kuzzle.onAsk('core:realtime:hotelClerk:metrics', () => this.metrics());
166
+ global.kuzzle.onAsk("core:realtime:hotelClerk:metrics", () => this.metrics());
167
167
  /**
168
168
  * Clear the hotel clerk and properly disconnect connections.
169
169
  */
170
- global.kuzzle.on('kuzzle:shutdown', () => this.clearConnections());
170
+ global.kuzzle.on("kuzzle:shutdown", () => this.clearConnections());
171
171
  /**
172
172
  * Clear subscriptions when a connection is dropped
173
173
  */
174
- global.kuzzle.on('connection:remove', connection => {
175
- this.removeConnection(connection.id)
176
- .catch(err => global.kuzzle.log.info(err));
174
+ global.kuzzle.on("connection:remove", (connection) => {
175
+ this.removeConnection(connection.id).catch((err) => global.kuzzle.log.info(err));
177
176
  });
178
177
  }
179
178
  /**
@@ -191,10 +190,10 @@ class HotelClerk {
191
190
  async subscribe(request) {
192
191
  const { index, collection } = request.input.resource;
193
192
  if (!index) {
194
- return kerror.reject('api', 'assert', 'missing_argument', 'index');
193
+ return kerror.reject("api", "assert", "missing_argument", "index");
195
194
  }
196
195
  if (!collection) {
197
- return kerror.reject('api', 'assert', 'missing_argument', 'collection');
196
+ return kerror.reject("api", "assert", "missing_argument", "collection");
198
197
  }
199
198
  /*
200
199
  * /!\ This check is a duplicate to the one already made by the
@@ -215,7 +214,7 @@ class HotelClerk {
215
214
  normalized = this.koncorde.normalize(request.input.body, (0, koncordeCompat_1.toKoncordeIndex)(index, collection));
216
215
  }
217
216
  catch (e) {
218
- throw kerror.get('api', 'assert', 'koncorde_dsl_error', e.message);
217
+ throw kerror.get("api", "assert", "koncorde_dsl_error", e.message);
219
218
  }
220
219
  this.createRoom(normalized);
221
220
  /**
@@ -235,10 +234,10 @@ class HotelClerk {
235
234
  */
236
235
  const afterSubscribeCallback = async (subscribed) => {
237
236
  if (subscribed) {
238
- global.kuzzle.call('core:realtime:subscribe:after', normalized.id);
237
+ global.kuzzle.call("core:realtime:subscribe:after", normalized.id);
239
238
  // @deprecated -- to be removed in next major version
240
239
  // we have to recreate the old "diff" object
241
- await global.kuzzle.pipe('core:hotelClerk:addSubscription', {
240
+ await global.kuzzle.pipe("core:hotelClerk:addSubscription", {
242
241
  changed: subscribed,
243
242
  collection,
244
243
  connectionId: request.context.connection.id,
@@ -250,7 +249,7 @@ class HotelClerk {
250
249
  };
251
250
  const { channel } = await this.subscribeToRoom(normalized.id, request, afterSubscribeCallback);
252
251
  const subscription = new subscription_1.Subscription(index, collection, request.input.body, normalized.id, request.context.connection.id, request.context.user);
253
- global.kuzzle.emit('core:realtime:user:subscribe:after', subscription);
252
+ global.kuzzle.emit("core:realtime:user:subscribe:after", subscription);
254
253
  return {
255
254
  channel,
256
255
  roomId: normalized.id,
@@ -271,9 +270,9 @@ class HotelClerk {
271
270
  async join(request) {
272
271
  const roomId = request.input.body.roomId;
273
272
  if (!this.rooms.has(roomId)) {
274
- const normalized = await global.kuzzle.ask('cluster:realtime:filters:get', roomId);
273
+ const normalized = await global.kuzzle.ask("cluster:realtime:filters:get", roomId);
275
274
  if (!normalized) {
276
- throw realtimeError.get('room_not_found', roomId);
275
+ throw realtimeError.get("room_not_found", roomId);
277
276
  }
278
277
  this.createRoom(normalized);
279
278
  }
@@ -294,7 +293,7 @@ class HotelClerk {
294
293
  */
295
294
  const afterSubscribeCallback = async (subscribed, cluster) => {
296
295
  if (cluster && subscribed) {
297
- global.kuzzle.call('core:realtime:subscribe:after', roomId);
296
+ global.kuzzle.call("core:realtime:subscribe:after", roomId);
298
297
  }
299
298
  };
300
299
  const { channel } = await this.subscribeToRoom(roomId, request, afterSubscribeCallback);
@@ -312,14 +311,14 @@ class HotelClerk {
312
311
  // We need the room list from the cluster's full state, NOT the one stored
313
312
  // in Koncorde: the latter also contains subscriptions created by the
314
313
  // framework (or by plugins), and we don't want those to appear in the API
315
- const fullStateRooms = await global.kuzzle.ask('cluster:realtime:room:list');
314
+ const fullStateRooms = await global.kuzzle.ask("cluster:realtime:room:list");
316
315
  const isAllowedRequest = new request_1.KuzzleRequest({
317
- action: 'subscribe',
318
- controller: 'realtime',
316
+ action: "subscribe",
317
+ controller: "realtime",
319
318
  }, {});
320
319
  for (const [index, collections] of Object.entries(fullStateRooms)) {
321
320
  isAllowedRequest.input.resource.index = index;
322
- const toRemove = await bluebird_1.default.filter(Object.keys(collections), collection => {
321
+ const toRemove = await bluebird_1.default.filter(Object.keys(collections), (collection) => {
323
322
  isAllowedRequest.input.resource.collection = collection;
324
323
  return !user.isActionAllowed(isAllowedRequest);
325
324
  });
@@ -340,7 +339,7 @@ class HotelClerk {
340
339
  // No need to raise an error if the connection does not have room subscriptions
341
340
  return;
342
341
  }
343
- await bluebird_1.default.map(connectionRooms.roomIds, (roomId) => (this.unsubscribe(connectionId, roomId, notify).catch(global.kuzzle.log.error)));
342
+ await bluebird_1.default.map(connectionRooms.roomIds, (roomId) => this.unsubscribe(connectionId, roomId, notify).catch(global.kuzzle.log.error));
344
343
  }
345
344
  /**
346
345
  * Clear all connections made to this node:
@@ -348,7 +347,7 @@ class HotelClerk {
348
347
  * - send user exit room notifications
349
348
  */
350
349
  async clearConnections() {
351
- await bluebird_1.default.map(this.subscriptions.keys(), (connectionId) => (this.removeConnection(connectionId, false)));
350
+ await bluebird_1.default.map(this.subscriptions.keys(), (connectionId) => this.removeConnection(connectionId, false));
352
351
  }
353
352
  /**
354
353
  * Register a new subscription
@@ -356,7 +355,7 @@ class HotelClerk {
356
355
  * - add the connection to the list of active connections of the room
357
356
  */
358
357
  registerSubscription(connectionId, roomId, volatile) {
359
- debug('Add room %s for connection %s', roomId, connectionId);
358
+ debug("Add room %s for connection %s", roomId, connectionId);
360
359
  let connectionRooms = this.subscriptions.get(connectionId);
361
360
  if (!connectionRooms) {
362
361
  connectionRooms = new connectionRooms_1.ConnectionRooms();
@@ -378,12 +377,12 @@ class HotelClerk {
378
377
  }
379
378
  const roomsLimit = global.kuzzle.config.limits.subscriptionRooms;
380
379
  if (roomsLimit > 0 && this.roomsCount >= roomsLimit) {
381
- throw realtimeError.get('too_many_rooms');
380
+ throw realtimeError.get("too_many_rooms");
382
381
  }
383
382
  this.koncorde.store(normalized);
384
- global.kuzzle.call('core:realtime:room:create:after', normalized);
383
+ global.kuzzle.call("core:realtime:room:create:after", normalized);
385
384
  // @deprecated -- to be removed in the next major version of kuzzle
386
- global.kuzzle.emit('room:new', { collection, index, roomId });
385
+ global.kuzzle.emit("room:new", { collection, index, roomId });
387
386
  /*
388
387
  In some very rare cases, the room may have been created between
389
388
  the beginning of the function executed at the end of normalize,
@@ -405,14 +404,14 @@ class HotelClerk {
405
404
  async unsubscribe(connectionId, roomId, notify = true) {
406
405
  const connectionRooms = this.subscriptions.get(connectionId);
407
406
  const requestContext = new request_1.RequestContext({
408
- connection: { id: connectionId }
407
+ connection: { id: connectionId },
409
408
  });
410
409
  if (!connectionRooms) {
411
- throw realtimeError.get('not_subscribed', connectionId, roomId);
410
+ throw realtimeError.get("not_subscribed", connectionId, roomId);
412
411
  }
413
412
  const volatile = connectionRooms.getVolatile(roomId);
414
413
  if (volatile === undefined) {
415
- throw realtimeError.get('not_subscribed', connectionId, roomId);
414
+ throw realtimeError.get("not_subscribed", connectionId, roomId);
416
415
  }
417
416
  if (connectionRooms.count > 1) {
418
417
  connectionRooms.removeRoom(roomId);
@@ -423,7 +422,7 @@ class HotelClerk {
423
422
  const room = this.rooms.get(roomId);
424
423
  if (!room) {
425
424
  global.kuzzle.log.error(`Cannot remove room "${roomId}": room not found`);
426
- throw realtimeError.get('room_not_found', roomId);
425
+ throw realtimeError.get("room_not_found", roomId);
427
426
  }
428
427
  for (const channel of Object.keys(room.channels)) {
429
428
  global.kuzzle.entryPoint.leaveChannel(channel, connectionId);
@@ -441,21 +440,21 @@ class HotelClerk {
441
440
  // even if the room is deleted for this node, another one may need the
442
441
  // notification
443
442
  const request = new request_1.Request({
444
- action: 'unsubscribe',
443
+ action: "unsubscribe",
445
444
  collection: room.collection,
446
- controller: 'realtime',
445
+ controller: "realtime",
447
446
  index: room.index,
448
447
  volatile,
449
448
  }, requestContext);
450
449
  // Do not send an unsubscription notification if the room has been destroyed
451
450
  // because the other nodes already had destroyed it in the full state
452
- if (notify
453
- && this.rooms.has(roomId)
454
- && room.channels.size > 0
455
- && !roomDeleted) {
456
- global.kuzzle.call('core:realtime:unsubscribe:after', roomId);
451
+ if (notify &&
452
+ this.rooms.has(roomId) &&
453
+ room.channels.size > 0 &&
454
+ !roomDeleted) {
455
+ global.kuzzle.call("core:realtime:unsubscribe:after", roomId);
457
456
  // @deprecated -- to be removed in next major version
458
- await global.kuzzle.pipe('core:hotelClerk:removeRoomForCustomer', {
457
+ await global.kuzzle.pipe("core:hotelClerk:removeRoomForCustomer", {
459
458
  requestContext,
460
459
  room: {
461
460
  collection: room.collection,
@@ -464,10 +463,12 @@ class HotelClerk {
464
463
  },
465
464
  });
466
465
  }
467
- await this.module.notifier.notifyUser(roomId, request, 'out', { count: room.size });
466
+ await this.module.notifier.notifyUser(roomId, request, "out", {
467
+ count: room.size,
468
+ });
468
469
  const kuid = global.kuzzle.tokenManager.getKuidFromConnection(connectionId);
469
470
  const subscription = new subscription_1.Subscription(room.index, room.collection, undefined, roomId, connectionId, { _id: kuid });
470
- global.kuzzle.emit('core:realtime:user:unsubscribe:after', {
471
+ global.kuzzle.emit("core:realtime:user:unsubscribe:after", {
471
472
  /* @deprecated */
472
473
  requestContext,
473
474
  /* @deprecated */
@@ -499,10 +500,10 @@ class HotelClerk {
499
500
  // The cluster will also remove the room from Koncorde if no other node
500
501
  // uses it.
501
502
  // (this node may have no subscribers on it, but other nodes might)
502
- await global.kuzzle.ask('cluster:realtime:room:remove', roomId);
503
+ await global.kuzzle.ask("cluster:realtime:room:remove", roomId);
503
504
  // @deprecated -- to be removed in the next major version
504
505
  try {
505
- await global.kuzzle.pipe('room:remove', roomId);
506
+ await global.kuzzle.pipe("room:remove", roomId);
506
507
  }
507
508
  catch (e) {
508
509
  return;
@@ -526,7 +527,9 @@ class HotelClerk {
526
527
  if (!connectionRooms || !connectionRooms.hasRoom(roomId)) {
527
528
  subscribed = true;
528
529
  this.registerSubscription(connectionId, roomId, request.input.volatile);
529
- notifyPromise = this.module.notifier.notifyUser(roomId, request, 'in', { count: room.size });
530
+ notifyPromise = this.module.notifier.notifyUser(roomId, request, "in", {
531
+ count: room.size,
532
+ });
530
533
  }
531
534
  else {
532
535
  notifyPromise = bluebird_1.default.resolve();
@@ -19,18 +19,18 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const Notifier = require('./notifier');
25
- const { HotelClerk } = require('./hotelClerk');
24
+ const Notifier = require("./notifier");
25
+ const { HotelClerk } = require("./hotelClerk");
26
26
 
27
27
  class RealtimeModule {
28
- constructor () {
28
+ constructor() {
29
29
  this.notifier = new Notifier(this);
30
30
  this.hotelClerk = new HotelClerk(this);
31
31
  }
32
32
 
33
- async init () {
33
+ async init() {
34
34
  await this.notifier.init();
35
35
  await this.hotelClerk.init();
36
36
  }
@@ -19,33 +19,33 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const { InternalError } = require('../../../kerror/errors');
24
+ const { InternalError } = require("../../../kerror/errors");
25
25
 
26
- function getEvent (action) {
26
+ function getEvent(action) {
27
27
  switch (action) {
28
- case 'create':
29
- case 'mCreate':
30
- case 'createOrReplace':
31
- case 'mCreateOrReplace':
32
- case 'replace':
33
- case 'mReplace':
34
- case 'update':
35
- case 'updateByQuery':
36
- case 'mUpdate':
37
- case 'write':
38
- case 'mWrite':
39
- case 'upsert':
40
- return 'write';
28
+ case "create":
29
+ case "mCreate":
30
+ case "createOrReplace":
31
+ case "mCreateOrReplace":
32
+ case "replace":
33
+ case "mReplace":
34
+ case "update":
35
+ case "updateByQuery":
36
+ case "mUpdate":
37
+ case "write":
38
+ case "mWrite":
39
+ case "upsert":
40
+ return "write";
41
41
 
42
- case 'delete':
43
- case 'deleteByQuery':
44
- case 'mDelete':
45
- return 'delete';
42
+ case "delete":
43
+ case "deleteByQuery":
44
+ case "mDelete":
45
+ return "delete";
46
46
 
47
- case 'publish':
48
- return 'publish';
47
+ case "publish":
48
+ return "publish";
49
49
 
50
50
  default:
51
51
  throw new InternalError(`Unknown event type for action "${action}"`);
@@ -57,8 +57,8 @@ function getEvent (action) {
57
57
  * @class DocumentNotification
58
58
  */
59
59
  class DocumentNotification {
60
- constructor (opts) {
61
- this.type = 'document';
60
+ constructor(opts) {
61
+ this.type = "document";
62
62
 
63
63
  this.status = opts.status;
64
64
  this.action = opts.action;
@@ -87,7 +87,7 @@ class DocumentNotification {
87
87
  * @param {result} content - Notification content
88
88
  * @returns {DocumentNotification}
89
89
  */
90
- static fromRequest (request, scope, action, result) {
90
+ static fromRequest(request, scope, action, result) {
91
91
  return new DocumentNotification({
92
92
  action,
93
93
  collection: request.input.resource.collection,
@@ -19,10 +19,10 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  module.exports = {
25
- DocumentNotification: require('./document'),
26
- ServerNotification: require('./server'),
27
- UserNotification: require('./user')
25
+ DocumentNotification: require("./document"),
26
+ ServerNotification: require("./server"),
27
+ UserNotification: require("./user"),
28
28
  };
@@ -19,7 +19,7 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  /**
25
25
  * Creates a notification response from a given room, request object, and content.
@@ -30,9 +30,9 @@
30
30
  * @param {string} message - Notification message
31
31
  */
32
32
  class ServerNotification {
33
- constructor (type, message) {
33
+ constructor(type, message) {
34
34
  this.status = 200;
35
- this.info = 'This is an automated server notification';
35
+ this.info = "This is an automated server notification";
36
36
  this.message = message;
37
37
  this.type = type;
38
38
  this.node = global.kuzzle.id;
@@ -19,7 +19,7 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  /**
25
25
  * User notification document
@@ -27,8 +27,8 @@
27
27
  * @class UserNotification
28
28
  */
29
29
  class UserNotification {
30
- constructor (opts) {
31
- this.type = 'user';
30
+ constructor(opts) {
31
+ this.type = "user";
32
32
 
33
33
  this.status = opts.status;
34
34
  this.user = opts.user;
@@ -50,7 +50,7 @@ class UserNotification {
50
50
  * @param {object} content - Notification content
51
51
  * returns {UserNotification}
52
52
  */
53
- static fromRequest (request, user, result) {
53
+ static fromRequest(request, user, result) {
54
54
  return new UserNotification({
55
55
  action: request.input.action,
56
56
  collection: request.input.resource.collection,