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,7 +19,7 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  // winston is CPU-hungry: isolating it in a worker thread allows for a more
25
25
  // efficient CPU resources management, and more performances in the end
@@ -28,57 +28,55 @@ const {
28
28
  isMainThread,
29
29
  parentPort,
30
30
  workerData,
31
- } = require('worker_threads');
31
+ } = require("worker_threads");
32
32
 
33
- const winston = require('winston');
34
- const WinstonElasticsearch = require('winston-elasticsearch');
35
- const WinstonSyslog = require('winston-syslog');
36
- const moment = require('moment');
33
+ const winston = require("winston");
34
+ const WinstonElasticsearch = require("winston-elasticsearch");
35
+ const WinstonSyslog = require("winston-syslog");
36
+ const moment = require("moment");
37
37
 
38
- const { KuzzleRequest } = require('../../api/request');
38
+ const { KuzzleRequest } = require("../../api/request");
39
39
 
40
- const ALLOWED_TRANSPORTS = [
41
- 'console',
42
- 'elasticsearch',
43
- 'file',
44
- 'syslog',
45
- ];
40
+ const ALLOWED_TRANSPORTS = ["console", "elasticsearch", "file", "syslog"];
46
41
 
47
42
  class AccessLogger {
48
- constructor () {
43
+ constructor() {
49
44
  this.isActive = false;
50
45
  this.worker = null;
51
46
  }
52
47
 
53
- async init () {
48
+ async init() {
54
49
  const config = global.kuzzle.config.server;
55
50
 
56
51
  for (const out of config.logs.transports) {
57
- if (out.transport && ! ALLOWED_TRANSPORTS.includes(out.transport)) {
58
- global.kuzzle.log.error(`Failed to initialize logger transport "${out.transport}": unsupported transport. Skipped.`);
59
- }
60
- else {
61
- this.isActive = this.isActive || ! out.silent;
52
+ if (out.transport && !ALLOWED_TRANSPORTS.includes(out.transport)) {
53
+ global.kuzzle.log.error(
54
+ `Failed to initialize logger transport "${out.transport}": unsupported transport. Skipped.`
55
+ );
56
+ } else {
57
+ this.isActive = this.isActive || !out.silent;
62
58
  }
63
59
  }
64
60
 
65
- if (! this.isActive) {
61
+ if (!this.isActive) {
66
62
  return;
67
63
  }
68
64
 
69
- const anonymous = await global.kuzzle.ask('core:security:user:anonymous:get');
65
+ const anonymous = await global.kuzzle.ask(
66
+ "core:security:user:anonymous:get"
67
+ );
70
68
 
71
69
  this.worker = new Worker(__filename, {
72
70
  workerData: {
73
71
  anonymousUserId: anonymous._id,
74
72
  config,
75
73
  kuzzleId: global.kuzzle.id,
76
- }
74
+ },
77
75
  });
78
76
  }
79
77
 
80
- log (connection, request, extra) {
81
- if (! this.isActive) {
78
+ log(connection, request, extra) {
79
+ if (!this.isActive) {
82
80
  return;
83
81
  }
84
82
 
@@ -94,7 +92,7 @@ class AccessLogger {
94
92
  // logs
95
93
  const size = request.response
96
94
  ? Buffer.byteLength(JSON.stringify(request.response)).toString()
97
- : '-';
95
+ : "-";
98
96
 
99
97
  try {
100
98
  this.worker.postMessage({
@@ -103,117 +101,116 @@ class AccessLogger {
103
101
  request: serialized,
104
102
  size,
105
103
  });
106
- }
107
- catch (error) {
108
- global.kuzzle.log.error(`Failed to write access log for request "${request.id}": ${error.message}`);
104
+ } catch (error) {
105
+ global.kuzzle.log.error(
106
+ `Failed to write access log for request "${request.id}": ${error.message}`
107
+ );
109
108
  }
110
109
  }
111
110
  }
112
111
 
113
112
  class AccessLoggerWorker {
114
- constructor (config, anonymousUserId) {
113
+ constructor(config, anonymousUserId) {
115
114
  this.config = config;
116
115
  this.logger = null;
117
116
  this.anonymousUserId = anonymousUserId;
118
117
  }
119
118
 
120
- init () {
119
+ init() {
121
120
  this.initTransport();
122
121
 
123
- parentPort.on('message', ({ connection, extra, request, size }) => {
122
+ parentPort.on("message", ({ connection, extra, request, size }) => {
124
123
  this.logAccess(
125
124
  connection,
126
125
  new KuzzleRequest(request.data, request.options),
127
126
  size,
128
- extra);
127
+ extra
128
+ );
129
129
  });
130
130
  }
131
131
 
132
- initTransport () {
132
+ initTransport() {
133
133
  const transports = [];
134
134
 
135
135
  for (const conf of this.config.logs.transports) {
136
136
  const opts = {
137
- colorize: conf.colorize === true
138
- ? winston.format.colorize()
139
- : false,
137
+ colorize: conf.colorize === true ? winston.format.colorize() : false,
140
138
  depth: conf.depth || false,
141
139
  format: conf.format
142
140
  ? winston.format[conf.format]()
143
141
  : winston.format.json(),
144
- level: conf.level || 'info',
145
- prettyPrint: conf.prettyPrint === true
146
- ? winston.format.prettyPrint()
147
- : false,
142
+ level: conf.level || "info",
143
+ prettyPrint:
144
+ conf.prettyPrint === true ? winston.format.prettyPrint() : false,
148
145
  silent: conf.silent || false,
149
- timestamp: conf.timestamp === true
150
- ? winston.format.timestamp()
151
- : false
146
+ timestamp: conf.timestamp === true ? winston.format.timestamp() : false,
152
147
  };
153
148
 
154
- switch (conf.transport || 'console') {
155
- case 'console':
149
+ switch (conf.transport || "console") {
150
+ case "console":
156
151
  transports.push(
157
152
  new winston.transports.Console(
158
- Object.assign(
159
- opts,
160
- {
161
- humanReadableUnhandledException: conf.humanReadableUnhandledException || true,
162
- stderrLevels: conf.stderrLevels || ['error', 'debug']
163
- })));
153
+ Object.assign(opts, {
154
+ humanReadableUnhandledException:
155
+ conf.humanReadableUnhandledException || true,
156
+ stderrLevels: conf.stderrLevels || ["error", "debug"],
157
+ })
158
+ )
159
+ );
164
160
  break;
165
- case 'elasticsearch':
161
+ case "elasticsearch":
166
162
  transports.push(
167
163
  new WinstonElasticsearch(
168
- Object.assign(
169
- opts,
170
- {
171
- clientOpts: conf.clientOpts || {},
172
- ensureMappingTemplate: conf.ensureMappingTemplate !== false,
173
- flushInterval: conf.flushInterval || 2000,
174
- index: conf.index,
175
- indexPrefix: conf.indexPrefix || 'kuzzle-access',
176
- indexSuffixPattern: conf.indexSuffixPattern || 'YYYY.MM',
177
- mappingTemplate: conf.mappingTemplate || 'access.log.mapping.json',
178
- messageType: conf.messageType || 'access'
179
- })));
164
+ Object.assign(opts, {
165
+ clientOpts: conf.clientOpts || {},
166
+ ensureMappingTemplate: conf.ensureMappingTemplate !== false,
167
+ flushInterval: conf.flushInterval || 2000,
168
+ index: conf.index,
169
+ indexPrefix: conf.indexPrefix || "kuzzle-access",
170
+ indexSuffixPattern: conf.indexSuffixPattern || "YYYY.MM",
171
+ mappingTemplate:
172
+ conf.mappingTemplate || "access.log.mapping.json",
173
+ messageType: conf.messageType || "access",
174
+ })
175
+ )
176
+ );
180
177
  break;
181
- case 'file':
178
+ case "file":
182
179
  transports.push(
183
180
  new winston.transports.File(
184
- Object.assign(
185
- opts,
186
- {
187
- eol: conf.eol || '\n',
188
- filename: conf.filename || 'kuzzle.access.log',
189
- logstash: conf.logstash || false,
190
- maxFiles: conf.maxFiles,
191
- maxRetries: conf.maxRetries || 2,
192
- maxSize: conf.maxSize,
193
- tailable: conf.tailable,
194
- zippedArchive: conf.zippedArchive || false
195
- })));
181
+ Object.assign(opts, {
182
+ eol: conf.eol || "\n",
183
+ filename: conf.filename || "kuzzle.access.log",
184
+ logstash: conf.logstash || false,
185
+ maxFiles: conf.maxFiles,
186
+ maxRetries: conf.maxRetries || 2,
187
+ maxSize: conf.maxSize,
188
+ tailable: conf.tailable,
189
+ zippedArchive: conf.zippedArchive || false,
190
+ })
191
+ )
192
+ );
196
193
  break;
197
- case 'syslog':
194
+ case "syslog":
198
195
  transports.push(
199
196
  new WinstonSyslog(
200
- Object.assign(
201
- opts,
202
- {
203
- app_name: conf.app_name || process.title,
204
- eol: conf.eol,
205
- facility: conf.facility || 'local0',
206
- host: conf.host || 'localhost',
207
- localhost: conf.localhost || 'localhost',
208
- path: conf.path || '/dev/log',
209
- pid: conf.pid || process.pid,
210
- port: conf.port || 514,
211
- protocol: conf.protocol || 'udp4',
212
- type: conf.type || 'BSD'
213
- })));
197
+ Object.assign(opts, {
198
+ app_name: conf.app_name || process.title,
199
+ eol: conf.eol,
200
+ facility: conf.facility || "local0",
201
+ host: conf.host || "localhost",
202
+ localhost: conf.localhost || "localhost",
203
+ path: conf.path || "/dev/log",
204
+ pid: conf.pid || process.pid,
205
+ port: conf.port || 514,
206
+ protocol: conf.protocol || "udp4",
207
+ type: conf.type || "BSD",
208
+ })
209
+ )
210
+ );
214
211
  break;
215
212
  default:
216
- // do nothing
213
+ // do nothing
217
214
  }
218
215
  }
219
216
 
@@ -226,15 +223,15 @@ class AccessLoggerWorker {
226
223
  * @param {String} size - response size, in bytes
227
224
  * @param {Object} [extra]
228
225
  */
229
- logAccess (connection, request, size, extra = null) {
230
- if (this.config.logs.accessLogFormat === 'logstash') {
226
+ logAccess(connection, request, size, extra = null) {
227
+ if (this.config.logs.accessLogFormat === "logstash") {
231
228
  // custom kuzzle logs to be exported to logstash
232
229
  this.logger.info({
233
230
  connection,
234
231
  error: request.error,
235
232
  extra,
236
233
  request: request.input,
237
- status: request.status
234
+ status: request.status,
238
235
  });
239
236
  return;
240
237
  }
@@ -246,17 +243,18 @@ class AccessLoggerWorker {
246
243
  let user = null;
247
244
 
248
245
  if (request.context.token !== null) {
249
- user = request.context.token.userId === this.anonymousUserId
250
- ? '(anonymous)'
251
- : request.context.token.userId;
246
+ user =
247
+ request.context.token.userId === this.anonymousUserId
248
+ ? "(anonymous)"
249
+ : request.context.token.userId;
252
250
  }
253
251
 
254
252
  // = apache combined
255
253
  const protocol = connection.protocol.toUpperCase();
256
254
  let url;
257
- let verb = 'DO';
255
+ let verb = "DO";
258
256
 
259
- if (connection.protocol.indexOf('HTTP/') === 0) {
257
+ if (connection.protocol.indexOf("HTTP/") === 0) {
260
258
  verb = extra.method;
261
259
  url = extra.url;
262
260
  }
@@ -276,20 +274,22 @@ class AccessLoggerWorker {
276
274
  url += `/${request.input.args._id}`;
277
275
  }
278
276
 
279
- let queryString = '';
277
+ let queryString = "";
280
278
 
281
279
  for (const k of Object.keys(request.input.args)) {
282
- if (k === '_id' || k === 'index' || k === 'collection') {
280
+ if (k === "_id" || k === "index" || k === "collection") {
283
281
  continue;
284
282
  }
285
283
 
286
284
  const val = request.input.args[k];
287
285
 
288
286
  if (queryString.length > 0) {
289
- queryString += '&';
287
+ queryString += "&";
290
288
  }
291
289
 
292
- queryString += `${k}=${typeof val === 'object' ? JSON.stringify(val) : val}`;
290
+ queryString += `${k}=${
291
+ typeof val === "object" ? JSON.stringify(val) : val
292
+ }`;
293
293
  }
294
294
 
295
295
  if (queryString.length > 0) {
@@ -298,45 +298,51 @@ class AccessLoggerWorker {
298
298
  }
299
299
 
300
300
  if (user === null) {
301
- user = '(unknown)';
301
+ user = "(unknown)";
302
302
  }
303
303
 
304
304
  const ip = this.getIP(connection);
305
- const when = moment().format('DD/MMM/YYYY:HH:mm:ss ZZ');
306
- const status = request.status || '-';
305
+ const when = moment().format("DD/MMM/YYYY:HH:mm:ss ZZ");
306
+ const status = request.status || "-";
307
307
  const referer = connection.headers.referer
308
308
  ? `"${connection.headers.referer}"`
309
- : '-';
310
- const agent = connection.headers['user-agent']
311
- ? `"${connection.headers['user-agent']}"`
312
- : '-';
313
-
314
- this.logger.info(`${ip} - ${user} [${when}] "${verb} ${url} ${protocol}" ${status} ${size} ${referer} ${agent}`);
309
+ : "-";
310
+ const agent = connection.headers["user-agent"]
311
+ ? `"${connection.headers["user-agent"]}"`
312
+ : "-";
313
+
314
+ this.logger.info(
315
+ `${ip} - ${user} [${when}] "${verb} ${url} ${protocol}" ${status} ${size} ${referer} ${agent}`
316
+ );
315
317
  }
316
318
 
317
319
  /**
318
320
  * @param {ClientConnection} connection
319
321
  */
320
- getIP (connection) {
322
+ getIP(connection) {
321
323
  const { ips } = connection;
322
324
 
323
325
  if (ips.length === 0) {
324
- return '-';
326
+ return "-";
325
327
  }
326
328
 
327
- const idx = Math.max(0, ips.length - 1 - this.config.logs.accessLogIpOffset);
329
+ const idx = Math.max(
330
+ 0,
331
+ ips.length - 1 - this.config.logs.accessLogIpOffset
332
+ );
328
333
 
329
334
  return ips[idx];
330
335
  }
331
336
  }
332
337
 
333
- if (! isMainThread) {
338
+ if (!isMainThread) {
334
339
  // Needed for instantiating a serialized KuzzleRequest object
335
340
  global.kuzzle = { id: workerData.kuzzleId };
336
341
 
337
342
  const worker = new AccessLoggerWorker(
338
343
  workerData.config,
339
- workerData.anonymousUserId);
344
+ workerData.anonymousUserId
345
+ );
340
346
 
341
347
  worker.init();
342
348
  }
@@ -19,10 +19,10 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- const { isPlainObject } = require('../../util/safeObject');
25
- const uuid = require('uuid');
24
+ const { isPlainObject } = require("../../util/safeObject");
25
+ const uuid = require("uuid");
26
26
 
27
27
  /**
28
28
  * @class ClientConnection
@@ -31,12 +31,12 @@ const uuid = require('uuid');
31
31
  * @param {object} [headers] - Optional extra key-value object. I.e., for http, will receive the request headers
32
32
  */
33
33
  class ClientConnection {
34
- constructor (protocol, ips, headers = null) {
34
+ constructor(protocol, ips, headers = null) {
35
35
  this.id = uuid.v4();
36
36
  this.protocol = protocol;
37
37
  this.headers = {};
38
38
 
39
- if (! Array.isArray(ips)) {
39
+ if (!Array.isArray(ips)) {
40
40
  throw new TypeError(`Expected ips to be an Array, got ${typeof ips}`);
41
41
  }
42
42
  this.ips = ips;
@@ -19,7 +19,7 @@
19
19
  * limitations under the License.
20
20
  */
21
21
 
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  const {
25
25
  BadRequestError,
@@ -38,15 +38,15 @@ const {
38
38
  UnauthorizedError,
39
39
  Request,
40
40
  RequestContext,
41
- RequestInput
42
- } = require('../../kerror/errors');
43
- const ClientConnection = require('./clientConnection');
44
- const ProtocolBase = require('./protocols/protocol');
41
+ RequestInput,
42
+ } = require("../../kerror/errors");
43
+ const ClientConnection = require("./clientConnection");
44
+ const ProtocolBase = require("./protocols/protocol");
45
45
 
46
- const debug = require('../../util/debug')('kuzzle:network:protocols');
46
+ const debug = require("../../util/debug")("kuzzle:network:protocols");
47
47
 
48
48
  class Context {
49
- constructor () {
49
+ constructor() {
50
50
  this.ClientConnection = ClientConnection;
51
51
  this.debug = debug;
52
52
  this.errors = {
@@ -71,7 +71,7 @@ class Context {
71
71
  this.RequestInput = RequestInput;
72
72
 
73
73
  this.log = {};
74
- for (const type of ['silly', 'debug', 'verbose', 'info', 'warn', 'error']) {
74
+ for (const type of ["silly", "debug", "verbose", "info", "warn", "error"]) {
75
75
  this.log[type] = (...args) => global.kuzzle.log[type](...args);
76
76
  }
77
77
  }