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,12 +19,14 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const Protocol = require('./protocol');
25
- const ClientConnection = require('../clientConnection');
24
+ const Protocol = require("./protocol");
25
+ const ClientConnection = require("../clientConnection");
26
26
 
27
- const debug = require('../../../util/debug')('kuzzle:network:protocols:internal');
27
+ const debug = require("../../../util/debug")(
28
+ "kuzzle:network:protocols:internal"
29
+ );
28
30
 
29
31
  /**
30
32
  * Internal protocol to use SDK realtime subscription from plugins.
@@ -35,10 +37,10 @@ const debug = require('../../../util/debug')('kuzzle:network:protocols:internal'
35
37
  * - 'core:network:internal:message'
36
38
  */
37
39
  class InternalProtocol extends Protocol {
38
- constructor () {
39
- super('internal');
40
+ constructor() {
41
+ super("internal");
40
42
 
41
- this.connection = new ClientConnection(this.name, ['127.0.0.1']);
43
+ this.connection = new ClientConnection(this.name, ["127.0.0.1"]);
42
44
 
43
45
  /**
44
46
  * List of channel IDs
@@ -47,10 +49,10 @@ class InternalProtocol extends Protocol {
47
49
  this.channels = new Set();
48
50
  }
49
51
 
50
- async init (entryPoint) {
52
+ async init(entryPoint) {
51
53
  await super.init(null, entryPoint);
52
54
 
53
- debug('initializing InternalProtocol');
55
+ debug("initializing InternalProtocol");
54
56
 
55
57
  this.entryPoint.newConnection(this.connection);
56
58
 
@@ -59,46 +61,47 @@ class InternalProtocol extends Protocol {
59
61
  *
60
62
  * @returns {string} connectionId
61
63
  */
62
- global.kuzzle.onAsk('core:network:internal:connectionId:get', () => (
63
- this.connection.id
64
- ));
64
+ global.kuzzle.onAsk(
65
+ "core:network:internal:connectionId:get",
66
+ () => this.connection.id
67
+ );
65
68
  }
66
69
 
67
- joinChannel (channel, connectionId) {
68
- debug('joinChannel: %s', channel, connectionId);
70
+ joinChannel(channel, connectionId) {
71
+ debug("joinChannel: %s", channel, connectionId);
69
72
 
70
73
  this.channels.add(channel);
71
74
  }
72
75
 
73
- leaveChannel (channel, connectionId) {
74
- debug('leaveChannel: %s', channel, connectionId);
76
+ leaveChannel(channel, connectionId) {
77
+ debug("leaveChannel: %s", channel, connectionId);
75
78
 
76
79
  this.channels.delete(channel);
77
80
  }
78
81
 
79
- disconnect (connectionId) {
80
- debug('disconnect: %s', connectionId);
82
+ disconnect(connectionId) {
83
+ debug("disconnect: %s", connectionId);
81
84
 
82
85
  // Never happens, the InternalProtocol always keep his only connection open
83
86
  }
84
87
 
85
- broadcast (data) {
86
- debug('broadcast: %a', data);
88
+ broadcast(data) {
89
+ debug("broadcast: %a", data);
87
90
 
88
91
  this._send(data);
89
92
  }
90
93
 
91
- notify (data) {
92
- debug('notify: %a', data);
94
+ notify(data) {
95
+ debug("notify: %a", data);
93
96
 
94
97
  this._send(data);
95
98
  }
96
99
 
97
- _send (data) {
100
+ _send(data) {
98
101
  for (let i = 0; i < data.channels.length; i++) {
99
102
  const message = { ...data.payload, room: data.channels[i] };
100
103
 
101
- global.kuzzle.emit('core:network:internal:message', message);
104
+ global.kuzzle.emit("core:network:internal:message", message);
102
105
  }
103
106
  }
104
107
  }
@@ -19,25 +19,25 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const net = require('net');
24
+ const net = require("net");
25
25
 
26
- const aedes = require('aedes');
26
+ const aedes = require("aedes");
27
27
 
28
- const ClientConnection = require('../clientConnection');
29
- const Protocol = require('./protocol');
30
- const { Request } = require('../../../api/request');
31
- const { removeStacktrace } = require('../../../util/stackTrace');
32
- const kerror = require('../../../kerror').wrap('network', 'mqtt');
33
- const debug = require('../../../util/debug')('kuzzle:network:protocols:mqtt');
28
+ const ClientConnection = require("../clientConnection");
29
+ const Protocol = require("./protocol");
30
+ const { Request } = require("../../../api/request");
31
+ const { removeStacktrace } = require("../../../util/stackTrace");
32
+ const kerror = require("../../../kerror").wrap("network", "mqtt");
33
+ const debug = require("../../../util/debug")("kuzzle:network:protocols:mqtt");
34
34
 
35
35
  /**
36
36
  * @class MqttProtocol
37
37
  */
38
38
  class MqttProtocol extends Protocol {
39
- constructor () {
40
- super('mqtt');
39
+ constructor() {
40
+ super("mqtt");
41
41
 
42
42
  this.aedes = new aedes.Server();
43
43
  this.server = net.createServer(this.aedes.handle);
@@ -46,32 +46,35 @@ class MqttProtocol extends Protocol {
46
46
  this.connectionsById = new Map();
47
47
 
48
48
  // needs to be bound to this object's context
49
- this.publishCallback = function pubcb (error) {
49
+ this.publishCallback = function pubcb(error) {
50
50
  if (error) {
51
51
  global.kuzzle.info(`[MQTT] Publishing message failed: ${error}`);
52
52
  }
53
53
  };
54
54
  }
55
55
 
56
- async init (entryPoint) {
56
+ async init(entryPoint) {
57
57
  await super.init(null, entryPoint);
58
58
 
59
59
  if (this.config.enabled === false) {
60
60
  return false;
61
61
  }
62
62
 
63
- debug('initializing MQTT Server with config: %a', this.config);
63
+ debug("initializing MQTT Server with config: %a", this.config);
64
64
 
65
- this.config = Object.assign({
66
- allowPubSub: false,
67
- developmentMode: false,
68
- disconnectDelay: 250,
69
- requestTopic: 'Kuzzle/request',
70
- responseTopic: 'Kuzzle/response',
71
- server: {
72
- port: 1883
73
- }
74
- }, this.config);
65
+ this.config = Object.assign(
66
+ {
67
+ allowPubSub: false,
68
+ developmentMode: false,
69
+ disconnectDelay: 250,
70
+ requestTopic: "Kuzzle/request",
71
+ responseTopic: "Kuzzle/response",
72
+ server: {
73
+ port: 1883,
74
+ },
75
+ },
76
+ this.config
77
+ );
75
78
 
76
79
  /*
77
80
  * To avoid ill-use of our topics, we need to configure authorizations:
@@ -84,18 +87,20 @@ class MqttProtocol extends Protocol {
84
87
  this.aedes.authorizeSubscribe = this._authorizeSubscribe.bind(this);
85
88
 
86
89
  // Message events
87
- this.aedes.on('client', this.onConnection.bind(this));
88
- this.aedes.on('clientError', this.onDisconnection.bind(this));
89
- this.aedes.on('clientDisconnect', this.onDisconnection.bind(this));
90
- this.aedes.on('publish', this.onMessage.bind(this));
90
+ this.aedes.on("client", this.onConnection.bind(this));
91
+ this.aedes.on("clientError", this.onDisconnection.bind(this));
92
+ this.aedes.on("clientDisconnect", this.onDisconnection.bind(this));
93
+ this.aedes.on("publish", this.onMessage.bind(this));
91
94
 
92
- await new Promise(res => this.server.listen(this.config.server.port, res));
95
+ await new Promise((res) =>
96
+ this.server.listen(this.config.server.port, res)
97
+ );
93
98
 
94
99
  return true;
95
100
  }
96
101
 
97
- broadcast (data) {
98
- debug('broadcast %a', data);
102
+ broadcast(data) {
103
+ debug("broadcast %a", data);
99
104
 
100
105
  const payload = JSON.stringify(data.payload);
101
106
 
@@ -104,8 +109,8 @@ class MqttProtocol extends Protocol {
104
109
  }
105
110
  }
106
111
 
107
- disconnect (connectionId, message = 'Connection closed by remote host') {
108
- debug('disconnect: connection id: %s, message %s', connectionId, message);
112
+ disconnect(connectionId, message = "Connection closed by remote host") {
113
+ debug("disconnect: connection id: %s, message %s", connectionId, message);
109
114
 
110
115
  const client = this.connectionsById.get(connectionId);
111
116
 
@@ -114,26 +119,26 @@ class MqttProtocol extends Protocol {
114
119
  }
115
120
  }
116
121
 
117
- joinChannel () {
122
+ joinChannel() {
118
123
  // do nothing
119
124
  }
120
125
 
121
- leaveChannel () {
126
+ leaveChannel() {
122
127
  // do nothing
123
128
  }
124
129
 
125
- notify (data) {
126
- debug('notify %a', data);
130
+ notify(data) {
131
+ debug("notify %a", data);
127
132
 
128
133
  const client = this.connectionsById.get(data.connectionId);
129
134
 
130
- if (! client) {
135
+ if (!client) {
131
136
  return;
132
137
  }
133
138
 
134
139
  const payload = Buffer.from(JSON.stringify(data.payload));
135
140
 
136
- data.channels.forEach(topic => {
141
+ data.channels.forEach((topic) => {
137
142
  client.publish({ payload, topic }, this.publishCallback);
138
143
  });
139
144
  }
@@ -141,13 +146,14 @@ class MqttProtocol extends Protocol {
141
146
  /**
142
147
  * @param {Client} client
143
148
  */
144
- onConnection (client) {
145
- debug('onConnection: %s', client.id);
149
+ onConnection(client) {
150
+ debug("onConnection: %s", client.id);
146
151
 
147
152
  const connection = new ClientConnection(
148
153
  this.name,
149
154
  [client.conn.remoteAddress],
150
- {});
155
+ {}
156
+ );
151
157
  this.entryPoint.newConnection(connection);
152
158
 
153
159
  this.connections.set(client, connection);
@@ -157,21 +163,19 @@ class MqttProtocol extends Protocol {
157
163
  /**
158
164
  * @param {Client} client
159
165
  */
160
- onDisconnection (client) {
161
- debug('onDisconnection %s', client.id);
166
+ onDisconnection(client) {
167
+ debug("onDisconnection %s", client.id);
162
168
 
163
169
  if (this.connections.has(client)) {
164
- setTimeout(
165
- () => {
166
- const connection = this.connections.get(client);
167
-
168
- if (connection) {
169
- this.connections.delete(client);
170
- this.connectionsById.delete(connection.id);
171
- this.entryPoint.removeConnection(connection.id);
172
- }
173
- },
174
- this.config.disconnectDelay);
170
+ setTimeout(() => {
171
+ const connection = this.connections.get(client);
172
+
173
+ if (connection) {
174
+ this.connections.delete(client);
175
+ this.connectionsById.delete(connection.id);
176
+ this.entryPoint.removeConnection(connection.id);
177
+ }
178
+ }, this.config.disconnectDelay);
175
179
  }
176
180
  }
177
181
 
@@ -179,10 +183,11 @@ class MqttProtocol extends Protocol {
179
183
  * @param packet
180
184
  * @param client
181
185
  */
182
- onMessage (packet, client) {
183
- if ( packet.topic !== this.config.requestTopic
184
- || packet.payload === null
185
- || client.id === null
186
+ onMessage(packet, client) {
187
+ if (
188
+ packet.topic !== this.config.requestTopic ||
189
+ packet.payload === null ||
190
+ client.id === null
186
191
  ) {
187
192
  return;
188
193
  }
@@ -190,32 +195,36 @@ class MqttProtocol extends Protocol {
190
195
  const connection = this.connections.get(client);
191
196
 
192
197
  if (connection === undefined) {
193
- debug('no connection id for client id %s - packet: %o', client.id, packet);
194
- global.kuzzle.log.error(`[MQTT] Received a packet from an unregistered client: ${client.id}`);
198
+ debug(
199
+ "no connection id for client id %s - packet: %o",
200
+ client.id,
201
+ packet
202
+ );
203
+ global.kuzzle.log.error(
204
+ `[MQTT] Received a packet from an unregistered client: ${client.id}`
205
+ );
195
206
  return;
196
207
  }
197
208
 
198
209
  try {
199
210
  const payload = JSON.parse(packet.payload.toString());
200
211
 
201
- debug('onMessage payload: %o', payload);
212
+ debug("onMessage payload: %o", payload);
202
213
 
203
214
  const request = new Request(payload, { connection });
204
215
 
205
- this.entryPoint.execute(
206
- connection,
207
- request,
208
- response => this._respond(client, response));
209
- }
210
- catch (error) {
216
+ this.entryPoint.execute(connection, request, (response) =>
217
+ this._respond(client, response)
218
+ );
219
+ } catch (error) {
211
220
  this._respondError(client, error);
212
221
  }
213
222
  }
214
223
 
215
- _respond (client, response) {
216
- debug('sending response: %o', response.content);
224
+ _respond(client, response) {
225
+ debug("sending response: %o", response.content);
217
226
 
218
- if (global.NODE_ENV === 'development' && this.config.developmentMode) {
227
+ if (global.NODE_ENV === "development" && this.config.developmentMode) {
219
228
  this.broadcast({
220
229
  channels: [this.config.responseTopic],
221
230
  payload: response.content,
@@ -229,48 +238,49 @@ class MqttProtocol extends Protocol {
229
238
  payload: Buffer.from(JSON.stringify(response.content)),
230
239
  topic: this.config.responseTopic,
231
240
  },
232
- this.publishCallback);
241
+ this.publishCallback
242
+ );
233
243
  }
234
244
 
235
- _respondError (client, error) {
245
+ _respondError(client, error) {
236
246
  const connection = this.connections.get(client);
237
247
 
238
- const errReq = new Request({}, {
239
- connection,
240
- error: kerror.getFrom(error, 'unexpected_error', error.message)
241
- });
248
+ const errReq = new Request(
249
+ {},
250
+ {
251
+ connection,
252
+ error: kerror.getFrom(error, "unexpected_error", error.message),
253
+ }
254
+ );
242
255
  this._respond(client, removeStacktrace(errReq.response.toJSON()));
243
256
  }
244
257
 
245
- _authorizePublish (client, packet, callback) {
258
+ _authorizePublish(client, packet, callback) {
246
259
  const topic = packet.topic.toString();
247
260
 
248
261
  if (this.config.allowPubSub) {
249
262
  if (topic === this.config.responseTopic) {
250
- callback(new Error('Cannot publish: this topic is read-only'));
251
- }
252
- else if (topic.includes('#') || topic.includes('+')) {
253
- callback(new Error('Cannot publish: wildcards are disabled'));
254
- }
255
- else {
263
+ callback(new Error("Cannot publish: this topic is read-only"));
264
+ } else if (topic.includes("#") || topic.includes("+")) {
265
+ callback(new Error("Cannot publish: wildcards are disabled"));
266
+ } else {
256
267
  callback(null);
257
268
  }
258
- }
259
- else {
260
- callback(topic === this.config.requestTopic
261
- ? null
262
- : new Error('Cannot publish on this topic: unauthorized'));
269
+ } else {
270
+ callback(
271
+ topic === this.config.requestTopic
272
+ ? null
273
+ : new Error("Cannot publish on this topic: unauthorized")
274
+ );
263
275
  }
264
276
  }
265
277
 
266
- _authorizeSubscribe (client, sub, callback) {
278
+ _authorizeSubscribe(client, sub, callback) {
267
279
  if (sub.topic === this.config.requestTopic) {
268
- callback(new Error('Cannot subscribe: this topic is write-only'));
269
- }
270
- else if (sub.topic.includes('#') || sub.topic.includes('+')) {
271
- callback(new Error('Cannot subscribe: wildcards are disabled'));
272
- }
273
- else {
280
+ callback(new Error("Cannot subscribe: this topic is write-only"));
281
+ } else if (sub.topic.includes("#") || sub.topic.includes("+")) {
282
+ callback(new Error("Cannot subscribe: wildcards are disabled"));
283
+ } else {
274
284
  callback(null, sub);
275
285
  }
276
286
  }
@@ -19,14 +19,14 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const assert = require('assert');
24
+ const assert = require("assert");
25
25
 
26
- const bytes = require('../../../util/bytes');
26
+ const bytes = require("../../../util/bytes");
27
27
 
28
28
  class Protocol {
29
- constructor (name) {
29
+ constructor(name) {
30
30
  this.maxRequestSize = null;
31
31
  this.entryPoint = null;
32
32
  this.name = name;
@@ -34,9 +34,9 @@ class Protocol {
34
34
 
35
35
  this.initCalled = false;
36
36
 
37
- Reflect.defineProperty(this, '_kuzzle', {
37
+ Reflect.defineProperty(this, "_kuzzle", {
38
38
  value: null,
39
- writable: true
39
+ writable: true,
40
40
  });
41
41
  }
42
42
 
@@ -46,23 +46,25 @@ class Protocol {
46
46
  *
47
47
  * @returns {Promise<boolean>}
48
48
  */
49
- async init (name, entryPoint) {
49
+ async init(name, entryPoint) {
50
50
  this.entryPoint = entryPoint;
51
51
 
52
52
  // name should be passed in the constructor
53
53
  assert(
54
- this.name && ! name,
55
- 'A name has been given in the constructor and init method. Passing the name in the init method is deprecated.');
54
+ this.name && !name,
55
+ "A name has been given in the constructor and init method. Passing the name in the init method is deprecated."
56
+ );
56
57
 
57
- if (! this.name) {
58
+ if (!this.name) {
58
59
  this.name = name;
59
60
  }
60
61
 
61
62
  this.maxRequestSize = bytes(entryPoint.config.maxRequestSize);
62
63
 
63
64
  assert(
64
- typeof this.name === 'string' && this.name.length > 0,
65
- 'Invalid "name" parameter value: expected a non empty string value');
65
+ typeof this.name === "string" && this.name.length > 0,
66
+ 'Invalid "name" parameter value: expected a non empty string value'
67
+ );
66
68
 
67
69
  if (entryPoint.config.protocols && entryPoint.config.protocols[this.name]) {
68
70
  this.config = entryPoint.config.protocols[this.name];
@@ -70,28 +72,29 @@ class Protocol {
70
72
 
71
73
  assert(
72
74
  Number.isInteger(this.maxRequestSize),
73
- 'Invalid "maxRequestSize" parameter value: expected a numeric value');
75
+ 'Invalid "maxRequestSize" parameter value: expected a numeric value'
76
+ );
74
77
 
75
78
  this.initCalled = true;
76
79
 
77
80
  return true;
78
81
  }
79
82
 
80
- broadcast () {
83
+ broadcast() {
81
84
  // do nothing by default
82
85
  }
83
86
 
84
- joinChannel (channel, connectionId) {
87
+ joinChannel(channel, connectionId) {
85
88
  // do nothing by default
86
89
  return { channel, connectionId };
87
90
  }
88
91
 
89
- leaveChannel (channel, connectionId) {
92
+ leaveChannel(channel, connectionId) {
90
93
  // do nothing by default
91
94
  return { channel, connectionId };
92
95
  }
93
96
 
94
- notify () {
97
+ notify() {
95
98
  // do nothing by default
96
99
  }
97
100
  }