kuzzle 2.17.7 → 2.18.1

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 (212) hide show
  1. package/bin/start-kuzzle-server +1 -1
  2. package/lib/api/controllers/adminController.js +1 -1
  3. package/lib/api/controllers/authController.js +9 -3
  4. package/lib/api/controllers/baseController.js +1 -1
  5. package/lib/api/controllers/bulkController.js +1 -1
  6. package/lib/api/controllers/clusterController.js +1 -1
  7. package/lib/api/controllers/collectionController.js +1 -1
  8. package/lib/api/controllers/documentController.js +13 -4
  9. package/lib/api/controllers/index.js +1 -1
  10. package/lib/api/controllers/indexController.js +11 -7
  11. package/lib/api/controllers/memoryStorageController.js +1 -1
  12. package/lib/api/controllers/realtimeController.js +1 -1
  13. package/lib/api/controllers/securityController.js +80 -42
  14. package/lib/api/controllers/serverController.js +3 -2
  15. package/lib/api/documentExtractor.js +3 -2
  16. package/lib/api/funnel.js +1 -1
  17. package/lib/api/httpRoutes.js +7 -5
  18. package/lib/api/openapi/OpenApiManager.js +5 -1
  19. package/lib/api/openapi/components/document/get.yaml +1 -1
  20. package/lib/api/openapi/components/document/index.d.ts +2 -0
  21. package/lib/api/openapi/components/document/index.js +6 -1
  22. package/lib/api/openapi/components/document/mCreateOrReplace.yaml +93 -0
  23. package/lib/api/openapi/components/document/update.yaml +1 -1
  24. package/lib/api/openapi/components/index.d.ts +1 -0
  25. package/lib/api/openapi/components/index.js +1 -0
  26. package/lib/api/openapi/components/security/index.d.ts +2 -0
  27. package/lib/api/openapi/components/security/index.js +10 -0
  28. package/lib/api/openapi/components/security/upsertUser.yaml +59 -0
  29. package/lib/api/openapi/openApiGenerator.js +1 -1
  30. package/lib/api/rateLimiter.js +1 -1
  31. package/lib/api/request/kuzzleRequest.d.ts +46 -0
  32. package/lib/api/request/kuzzleRequest.js +147 -19
  33. package/lib/api/request/requestContext.js +1 -1
  34. package/lib/api/request/requestInput.js +1 -1
  35. package/lib/api/request/requestResponse.js +26 -1
  36. package/lib/cluster/command.js +1 -1
  37. package/lib/cluster/idCardHandler.js +1 -1
  38. package/lib/cluster/index.js +1 -1
  39. package/lib/cluster/node.js +8 -8
  40. package/lib/cluster/publisher.js +1 -1
  41. package/lib/cluster/state.js +1 -1
  42. package/lib/cluster/subscriber.js +4 -1
  43. package/lib/config/documentEventAliases.js +1 -1
  44. package/lib/config/index.js +1 -1
  45. package/lib/core/auth/formatProcessing.js +1 -1
  46. package/lib/core/auth/passportResponse.js +1 -1
  47. package/lib/core/auth/passportWrapper.js +1 -1
  48. package/lib/core/auth/tokenManager.js +1 -1
  49. package/lib/core/backend/applicationManager.js +1 -1
  50. package/lib/core/backend/backend.js +1 -1
  51. package/lib/core/backend/backendCluster.js +1 -1
  52. package/lib/core/backend/backendConfig.js +1 -1
  53. package/lib/core/backend/backendController.d.ts +7 -1
  54. package/lib/core/backend/backendController.js +16 -4
  55. package/lib/core/backend/backendErrors.js +1 -1
  56. package/lib/core/backend/backendHook.js +1 -1
  57. package/lib/core/backend/backendImport.js +1 -1
  58. package/lib/core/backend/backendOpenApi.js +1 -1
  59. package/lib/core/backend/backendPipe.js +1 -1
  60. package/lib/core/backend/backendPlugin.js +1 -1
  61. package/lib/core/backend/backendStorage.js +1 -1
  62. package/lib/core/backend/backendVault.js +1 -1
  63. package/lib/core/backend/internalLogger.js +1 -1
  64. package/lib/core/cache/cacheDbEnum.js +1 -1
  65. package/lib/core/cache/cacheEngine.js +1 -1
  66. package/lib/core/network/accessLogger.js +1 -1
  67. package/lib/core/network/clientConnection.js +1 -1
  68. package/lib/core/network/context.js +1 -1
  69. package/lib/core/network/entryPoint.js +6 -6
  70. package/lib/core/network/httpRouter/index.js +1 -1
  71. package/lib/core/network/httpRouter/routeHandler.js +1 -1
  72. package/lib/core/network/httpRouter/routePart.js +1 -1
  73. package/lib/core/network/protocolManifest.js +1 -1
  74. package/lib/core/network/protocols/httpMessage.js +1 -1
  75. package/lib/core/network/protocols/httpwsProtocol.js +13 -16
  76. package/lib/core/network/protocols/internalProtocol.js +1 -1
  77. package/lib/core/network/protocols/mqttProtocol.js +4 -3
  78. package/lib/core/network/protocols/protocol.js +1 -1
  79. package/lib/core/network/router.js +11 -2
  80. package/lib/core/plugin/plugin.js +8 -1
  81. package/lib/core/plugin/pluginContext.js +1 -1
  82. package/lib/core/plugin/pluginManifest.js +1 -1
  83. package/lib/core/plugin/pluginRepository.js +1 -1
  84. package/lib/core/plugin/pluginsManager.js +1 -1
  85. package/lib/core/plugin/privilegedContext.js +1 -1
  86. package/lib/core/realtime/actionEnum.js +1 -1
  87. package/lib/core/realtime/channel.js +1 -1
  88. package/lib/core/realtime/connectionRooms.js +1 -1
  89. package/lib/core/realtime/hotelClerk.js +66 -24
  90. package/lib/core/realtime/index.js +1 -1
  91. package/lib/core/realtime/notification/document.js +1 -1
  92. package/lib/core/realtime/notification/index.js +1 -1
  93. package/lib/core/realtime/notification/server.js +1 -1
  94. package/lib/core/realtime/notification/user.js +1 -1
  95. package/lib/core/realtime/notifier.js +1 -1
  96. package/lib/core/realtime/room.js +1 -1
  97. package/lib/core/realtime/subscription.js +1 -1
  98. package/lib/core/security/index.js +1 -1
  99. package/lib/core/security/profileRepository.js +1 -1
  100. package/lib/core/security/roleRepository.js +1 -1
  101. package/lib/core/security/securityLoader.js +1 -1
  102. package/lib/core/security/tokenRepository.js +1 -1
  103. package/lib/core/security/userRepository.js +1 -1
  104. package/lib/core/shared/KoncordeWrapper.js +1 -1
  105. package/lib/core/shared/abstractManifest.js +1 -1
  106. package/lib/core/shared/repository.js +1 -1
  107. package/lib/core/shared/sdk/embeddedSdk.d.ts +2 -2
  108. package/lib/core/shared/sdk/embeddedSdk.js +4 -3
  109. package/lib/core/shared/sdk/funnelProtocol.d.ts +13 -0
  110. package/lib/core/shared/sdk/funnelProtocol.js +76 -81
  111. package/lib/core/shared/sdk/impersonatedSdk.js +1 -1
  112. package/lib/core/shared/store.js +1 -1
  113. package/lib/core/statistics/index.js +1 -1
  114. package/lib/core/statistics/statistics.js +1 -1
  115. package/lib/core/storage/clientAdapter.js +1 -1
  116. package/lib/core/storage/indexCache.js +1 -1
  117. package/lib/core/storage/storageEngine.js +1 -1
  118. package/lib/core/storage/storeScopeEnum.js +1 -1
  119. package/lib/core/validation/baseType.js +1 -1
  120. package/lib/core/validation/index.js +1 -1
  121. package/lib/core/validation/types/anything.js +1 -1
  122. package/lib/core/validation/types/boolean.js +1 -1
  123. package/lib/core/validation/types/date.js +1 -1
  124. package/lib/core/validation/types/email.js +1 -1
  125. package/lib/core/validation/types/enum.js +1 -1
  126. package/lib/core/validation/types/geoPoint.js +1 -1
  127. package/lib/core/validation/types/geoShape.js +1 -1
  128. package/lib/core/validation/types/integer.js +1 -1
  129. package/lib/core/validation/types/ipAddress.js +1 -1
  130. package/lib/core/validation/types/numeric.js +1 -1
  131. package/lib/core/validation/types/object.js +1 -1
  132. package/lib/core/validation/types/string.js +1 -1
  133. package/lib/core/validation/types/url.js +1 -1
  134. package/lib/core/validation/validation.js +1 -1
  135. package/lib/kerror/codes/1-services.json +1 -1
  136. package/lib/kerror/codes/index.js +1 -1
  137. package/lib/kerror/errors/badRequestError.js +1 -1
  138. package/lib/kerror/errors/externalServiceError.js +1 -1
  139. package/lib/kerror/errors/forbiddenError.js +1 -1
  140. package/lib/kerror/errors/gatewayTimeoutError.js +1 -1
  141. package/lib/kerror/errors/index.js +1 -1
  142. package/lib/kerror/errors/internalError.js +1 -1
  143. package/lib/kerror/errors/kuzzleError.d.ts +1 -1
  144. package/lib/kerror/errors/kuzzleError.js +1 -1
  145. package/lib/kerror/errors/multipleErrorsError.js +1 -1
  146. package/lib/kerror/errors/notFoundError.js +1 -1
  147. package/lib/kerror/errors/partialError.js +1 -1
  148. package/lib/kerror/errors/pluginImplementationError.js +1 -1
  149. package/lib/kerror/errors/preconditionError.js +1 -1
  150. package/lib/kerror/errors/serviceUnavailableError.js +1 -1
  151. package/lib/kerror/errors/sizeLimitError.js +1 -1
  152. package/lib/kerror/errors/tooManyRequestsError.js +1 -1
  153. package/lib/kerror/errors/unauthorizedError.js +1 -1
  154. package/lib/kerror/index.js +2 -4
  155. package/lib/kuzzle/dumpGenerator.js +1 -1
  156. package/lib/kuzzle/event/kuzzleEventEmitter.js +39 -1
  157. package/lib/kuzzle/event/pipeRunner.js +1 -1
  158. package/lib/kuzzle/event/waterfall.js +1 -1
  159. package/lib/kuzzle/index.js +1 -1
  160. package/lib/kuzzle/internalIndexHandler.js +1 -1
  161. package/lib/kuzzle/kuzzle.js +1 -1
  162. package/lib/kuzzle/kuzzleStateEnum.js +1 -1
  163. package/lib/kuzzle/log.js +1 -1
  164. package/lib/kuzzle/vault.js +1 -1
  165. package/lib/model/security/profile.js +1 -1
  166. package/lib/model/security/rights.js +1 -1
  167. package/lib/model/security/role.js +1 -1
  168. package/lib/model/security/token.js +1 -1
  169. package/lib/model/security/user.js +6 -7
  170. package/lib/model/storage/apiKey.js +1 -1
  171. package/lib/model/storage/baseModel.js +1 -1
  172. package/lib/service/cache/redis.js +1 -1
  173. package/lib/service/service.js +1 -1
  174. package/lib/service/storage/elasticsearch.js +108 -39
  175. package/lib/service/storage/esWrapper.js +1 -1
  176. package/lib/service/storage/queryTranslator.js +1 -1
  177. package/lib/types/Controller.js +1 -1
  178. package/lib/types/ControllerDefinition.js +1 -1
  179. package/lib/types/Deprecation.js +1 -1
  180. package/lib/types/EventHandler.js +1 -1
  181. package/lib/types/KuzzleDocument.d.ts +3 -0
  182. package/lib/types/Plugin.js +1 -1
  183. package/lib/types/PluginManifest.js +1 -1
  184. package/lib/types/RequestPayload.js +1 -1
  185. package/lib/types/ResponsePayload.js +1 -1
  186. package/lib/types/StrategyDefinition.js +1 -1
  187. package/lib/types/Token.js +1 -1
  188. package/lib/types/User.js +1 -1
  189. package/lib/types/index.d.ts +0 -1
  190. package/lib/types/index.js +1 -2
  191. package/lib/util/array.js +1 -1
  192. package/lib/util/assertType.js +1 -1
  193. package/lib/util/asyncStore.js +1 -1
  194. package/lib/util/debug.js +1 -1
  195. package/lib/util/deprecate.js +1 -1
  196. package/lib/util/didYouMean.js +1 -1
  197. package/lib/util/dump-collection.d.ts +35 -0
  198. package/lib/util/dump-collection.js +11 -8
  199. package/lib/util/extractFields.js +1 -1
  200. package/lib/util/inflector.js +1 -1
  201. package/lib/util/koncordeCompat.js +1 -1
  202. package/lib/util/memoize.js +1 -1
  203. package/lib/util/mutex.js +1 -1
  204. package/lib/util/name-generator.js +1 -1
  205. package/lib/util/promback.js +1 -1
  206. package/lib/util/requestAssertions.js +1 -1
  207. package/lib/util/safeObject.js +1 -1
  208. package/lib/util/stackTrace.js +56 -17
  209. package/lib/util/wildcard.js +1 -1
  210. package/package-lock.json +102 -83
  211. package/package.json +18 -17
  212. package/lib/core/network/removeErrorStack.js +0 -56
@@ -3,7 +3,7 @@
3
3
  * Kuzzle, a backend software, self-hostable and ready to use
4
4
  * to power modern apps
5
5
  *
6
- * Copyright 2015-2020 Kuzzle
6
+ * Copyright 2015-2022 Kuzzle
7
7
  * mailto: support AT kuzzle.io
8
8
  * website: http://kuzzle.io
9
9
  *
@@ -3,7 +3,7 @@
3
3
  * Kuzzle, a backend software, self-hostable and ready to use
4
4
  * to power modern apps
5
5
  *
6
- * Copyright 2015-2020 Kuzzle
6
+ * Copyright 2015-2022 Kuzzle
7
7
  * mailto: support AT kuzzle.io
8
8
  * website: http://kuzzle.io
9
9
  *
@@ -3,7 +3,7 @@
3
3
  * Kuzzle, a backend software, self-hostable and ready to use
4
4
  * to power modern apps
5
5
  *
6
- * Copyright 2015-2020 Kuzzle
6
+ * Copyright 2015-2022 Kuzzle
7
7
  * mailto: support AT kuzzle.io
8
8
  * website: http://kuzzle.io
9
9
  *
package/lib/types/User.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Kuzzle, a backend software, self-hostable and ready to use
4
4
  * to power modern apps
5
5
  *
6
- * Copyright 2015-2020 Kuzzle
6
+ * Copyright 2015-2022 Kuzzle
7
7
  * mailto: support AT kuzzle.io
8
8
  * website: http://kuzzle.io
9
9
  *
@@ -2,7 +2,6 @@ export * from './Plugin';
2
2
  export * from './Controller';
3
3
  export * from './ControllerDefinition';
4
4
  export * from './ControllerRights';
5
- export * from './RequestPayload';
6
5
  export * from './ResponsePayload';
7
6
  export * from './Deprecation';
8
7
  export * from './EventHandler';
@@ -3,7 +3,7 @@
3
3
  * Kuzzle, a backend software, self-hostable and ready to use
4
4
  * to power modern apps
5
5
  *
6
- * Copyright 2015-2020 Kuzzle
6
+ * Copyright 2015-2022 Kuzzle
7
7
  * mailto: support AT kuzzle.io
8
8
  * website: http://kuzzle.io
9
9
  *
@@ -38,7 +38,6 @@ __exportStar(require("./Plugin"), exports);
38
38
  __exportStar(require("./Controller"), exports);
39
39
  __exportStar(require("./ControllerDefinition"), exports);
40
40
  __exportStar(require("./ControllerRights"), exports);
41
- __exportStar(require("./RequestPayload"), exports);
42
41
  __exportStar(require("./ResponsePayload"), exports);
43
42
  __exportStar(require("./Deprecation"), exports);
44
43
  __exportStar(require("./EventHandler"), exports);
package/lib/util/array.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Kuzzle, a backend software, self-hostable and ready to use
4
4
  * to power modern apps
5
5
  *
6
- * Copyright 2015-2020 Kuzzle
6
+ * Copyright 2015-2022 Kuzzle
7
7
  * mailto: support AT kuzzle.io
8
8
  * website: http://kuzzle.io
9
9
  *
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
package/lib/util/debug.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
@@ -1,3 +1,38 @@
1
1
  import { JSONObject } from '../../index';
2
2
  import { HttpStream } from '../types';
3
+ /**
4
+ * Flatten an object transform:
5
+ * {
6
+ * title: "kuzzle",
7
+ * info : {
8
+ * tag: "news"
9
+ * }
10
+ * }
11
+ *
12
+ * Into an object like:
13
+ * {
14
+ * title: "kuzzle",
15
+ * info.tag: news
16
+ * }
17
+ *
18
+ * @param {Object} target the object we have to flatten
19
+ * @returns {Object} the flattened object
20
+ */
21
+ export declare function flattenObject(target: JSONObject): JSONObject;
22
+ /**
23
+ * Extract fields from mapping by removing the properties from es mapping
24
+ *
25
+ * @param mapping
26
+ * @returns
27
+ */
28
+ export declare function extractMappingFields(mapping: JSONObject): any;
29
+ /**
30
+ * An iteration-order-safe version of lodash.values
31
+ *
32
+ * @param object The object containing the values
33
+ * @param fields The field names to pick in the right order
34
+ * @returns The values in the same order as the fields
35
+ * @see https://lodash.com/docs/4.17.15#values
36
+ */
37
+ export declare function pickValues(object: any, fields: string[]): any[];
3
38
  export declare function dumpCollectionDocuments(index: string, collection: string, query?: any, format?: string, fields?: string[], options?: JSONObject): HttpStream;
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.dumpCollectionDocuments = void 0;
29
+ exports.dumpCollectionDocuments = exports.pickValues = exports.extractMappingFields = exports.flattenObject = void 0;
30
30
  const ndjson_1 = __importDefault(require("ndjson"));
31
31
  const get_1 = __importDefault(require("lodash/get"));
32
32
  const isObject_1 = __importDefault(require("lodash/isObject"));
@@ -56,6 +56,7 @@ function flattenObject(target) {
56
56
  flattenStep(output, target);
57
57
  return output;
58
58
  }
59
+ exports.flattenObject = flattenObject;
59
60
  function flattenStep(output, object, prev = null) {
60
61
  const keys = Object.keys(object);
61
62
  for (let i = 0; i < keys.length; i++) {
@@ -63,8 +64,8 @@ function flattenStep(output, object, prev = null) {
63
64
  const value = object[key];
64
65
  const newKey = prev ? prev + '.' + key : key;
65
66
  if (Object.prototype.toString.call(value) === '[object Object]') {
66
- output[newKey] = value;
67
67
  flattenStep(output, value, newKey);
68
+ continue;
68
69
  }
69
70
  output[newKey] = value;
70
71
  }
@@ -77,19 +78,20 @@ function flattenStep(output, object, prev = null) {
77
78
  */
78
79
  function extractMappingFields(mapping) {
79
80
  const newMapping = {};
81
+ if (mapping.properties) {
82
+ return extractMappingFields(mapping.properties);
83
+ }
80
84
  for (const key of Object.keys(mapping)) {
81
- if (key === 'properties' && (0, isObject_1.default)(mapping[key])) {
82
- newMapping[key] = extractMappingFields(mapping[key]);
83
- }
84
- else if ((0, isObject_1.default)(mapping[key]) && mapping[key].type) {
85
+ if ((0, isObject_1.default)(mapping[key]) && mapping[key].type) {
85
86
  newMapping[key] = mapping[key].type;
86
87
  }
87
- else {
88
- newMapping[key] = mapping[key];
88
+ else if ((0, isObject_1.default)(mapping[key])) {
89
+ newMapping[key] = extractMappingFields(mapping[key]);
89
90
  }
90
91
  }
91
92
  return newMapping;
92
93
  }
94
+ exports.extractMappingFields = extractMappingFields;
93
95
  /**
94
96
  * An iteration-order-safe version of lodash.values
95
97
  *
@@ -101,6 +103,7 @@ function extractMappingFields(mapping) {
101
103
  function pickValues(object, fields) {
102
104
  return fields.map(f => formatValueForCSV((0, get_1.default)(object, f)));
103
105
  }
106
+ exports.pickValues = pickValues;
104
107
  /**
105
108
  * Formats the value for correct CSV output, avoiding to return
106
109
  * values that would badly serialize in CSV.
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
@@ -3,7 +3,7 @@
3
3
  * Kuzzle, a backend software, self-hostable and ready to use
4
4
  * to power modern apps
5
5
  *
6
- * Copyright 2015-2020 Kuzzle
6
+ * Copyright 2015-2022 Kuzzle
7
7
  * mailto: support AT kuzzle.io
8
8
  * website: http://kuzzle.io
9
9
  *
@@ -3,7 +3,7 @@
3
3
  * Kuzzle, a backend software, self-hostable and ready to use
4
4
  * to power modern apps
5
5
  *
6
- * Copyright 2015-2020 Kuzzle
6
+ * Copyright 2015-2022 Kuzzle
7
7
  * mailto: support AT kuzzle.io
8
8
  * website: http://kuzzle.io
9
9
  *
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
package/lib/util/mutex.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Kuzzle, a backend software, self-hostable and ready to use
4
4
  * to power modern apps
5
5
  *
6
- * Copyright 2015-2020 Kuzzle
6
+ * Copyright 2015-2022 Kuzzle
7
7
  * mailto: support AT kuzzle.io
8
8
  * website: http://kuzzle.io
9
9
  *
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *
@@ -21,33 +21,72 @@
21
21
 
22
22
  'use strict';
23
23
 
24
+ const util = require('util');
25
+
26
+ const MARKER = '>';
27
+ const PADDING = ' ';
28
+
24
29
  /**
25
- * Hilight user code
26
- *
27
- * e.g.
28
- * at BackendController._add (/home/kuzzle/lib/core/application/backend.ts:261:28)
29
- * at BackendController.register (/home/kuzzle/lib/core/application/backend.ts:187:10)
30
- * > at registerFoo (/home/aschen/projets/app/test.ts:12:18)
31
- * > at init (/home/aschen/projets/app/test.ts:8:3)
32
- * at Module._compile (internal/modules/cjs/loader.js:1133:30)
33
- */
30
+ * Hilight user code
31
+ *
32
+ * e.g.
33
+ * at BackendController._add (/home/kuzzle/lib/core/application/backend.ts:261:28)
34
+ * at BackendController.register (/home/kuzzle/lib/core/application/backend.ts:187:10)
35
+ * >>>> at registerFoo (/home/aschen/projets/app/test.ts:12:18)
36
+ * >>>> at init (/home/aschen/projets/app/test.ts:8:3)
37
+ * at Module._compile (internal/modules/cjs/loader.js:1133:30)
38
+ */
34
39
  function hilightUserCode (line) {
35
40
  // ignore first line (error message) or already enhanced
36
- if (! line.includes(' at ') || line.startsWith('>')) {
41
+ if (! line.includes(' at ') || line.startsWith(MARKER)) {
37
42
  return line;
38
43
  }
39
44
 
40
- if ( line.includes('kuzzle/lib/') // ignore kuzzle code
41
- || (line.indexOf('at /') === -1 && line.charAt(line.indexOf('(') + 1) !== '/') // ignore node internal
42
- || line.includes('node_modules') // ignore dependencies
43
- ) {
44
- return ' ' + line;
45
+ const isKuzzleCode = line.includes('kuzzle/lib/');
46
+ const isNodeCode = ! line.includes('at /')
47
+ && ! line.includes('at async /')
48
+ && line.charAt(line.indexOf('(') + 1) !== '/';
49
+ const isModuleCode = line.includes('node_modules');
50
+ if (isKuzzleCode || isNodeCode || isModuleCode) {
51
+ return PADDING + line;
45
52
  }
46
53
 
47
54
  // hilight user code
48
- return '>' + line;
55
+ return MARKER + line;
56
+ }
57
+
58
+ /**
59
+ * utility method: must be invoked by all protocols to remove stack traces
60
+ * from payloads before sending them
61
+ * @param {Error|Object} data - expected: plain error object or serialized
62
+ * request response
63
+ * @returns {*} return the data minus the stack trace
64
+ */
65
+ function removeStacktrace (data) {
66
+ if (util.types.isNativeError(data)) {
67
+ if (global.NODE_ENV !== 'development') {
68
+ data.stack = undefined;
69
+ }
70
+ else {
71
+ data.stack = data.stack.split('\n').map(hilightUserCode).join('\n');
72
+ }
73
+ }
74
+ else if (data && data.content && data.content.error) {
75
+ // @todo v3: stack should be removed only for "production" env
76
+ if (global.NODE_ENV !== 'development') {
77
+ data.content.error.stack = undefined;
78
+ }
79
+ else {
80
+ data.content.error.stack = data.content.error.stack
81
+ ? data.content.error.stack.split('\n').map(hilightUserCode).join('\n')
82
+ : undefined;
83
+ }
84
+ }
85
+
86
+ return data;
49
87
  }
50
88
 
51
89
  module.exports = {
52
90
  hilightUserCode,
91
+ removeStacktrace,
53
92
  };
@@ -2,7 +2,7 @@
2
2
  * Kuzzle, a backend software, self-hostable and ready to use
3
3
  * to power modern apps
4
4
  *
5
- * Copyright 2015-2020 Kuzzle
5
+ * Copyright 2015-2022 Kuzzle
6
6
  * mailto: support AT kuzzle.io
7
7
  * website: http://kuzzle.io
8
8
  *