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
@@ -68,7 +68,7 @@ class ProfileRepository extends repository_1.default {
68
68
  });
69
69
  this.module = securityModule;
70
70
  this.profiles = new Map();
71
- super.collection = 'profiles';
71
+ super.collection = "profiles";
72
72
  super.ObjectConstructor = profile_1.Profile;
73
73
  }
74
74
  init() {
@@ -80,7 +80,7 @@ class ProfileRepository extends repository_1.default {
80
80
  * @returns {Profile}
81
81
  * @throws If already exists or if the policies are invalid
82
82
  */
83
- global.kuzzle.onAsk('core:security:profile:create', (id, policies, opts) => this.create(id, policies, opts));
83
+ global.kuzzle.onAsk("core:security:profile:create", (id, policies, opts) => this.create(id, policies, opts));
84
84
  /**
85
85
  * Creates a new profile, or replaces it if it already exists
86
86
  * @param {String} id
@@ -89,7 +89,7 @@ class ProfileRepository extends repository_1.default {
89
89
  * @returns {Profile}
90
90
  * @throws If the profile policies are invalid
91
91
  */
92
- global.kuzzle.onAsk('core:security:profile:createOrReplace', (id, policies, opts) => this.createOrReplace(id, policies, opts));
92
+ global.kuzzle.onAsk("core:security:profile:createOrReplace", (id, policies, opts) => this.createOrReplace(id, policies, opts));
93
93
  /**
94
94
  * Deletes an existing profile
95
95
  * @param {String} id
@@ -97,35 +97,35 @@ class ProfileRepository extends repository_1.default {
97
97
  * @throws If the profile doesn't exist, if it is protected, or if it's
98
98
  * still in use
99
99
  */
100
- global.kuzzle.onAsk('core:security:profile:delete', (id, opts) => this.deleteById(id, opts));
100
+ global.kuzzle.onAsk("core:security:profile:delete", (id, opts) => this.deleteById(id, opts));
101
101
  /**
102
102
  * Loads and returns an existing profile
103
103
  * @param {String} id - profile identifier
104
104
  * @returns {Profile}
105
105
  * @throws {NotFoundError} If the profile doesn't exist
106
106
  */
107
- global.kuzzle.onAsk('core:security:profile:get', id => this.load(id));
107
+ global.kuzzle.onAsk("core:security:profile:get", (id) => this.load(id));
108
108
  /**
109
109
  * Invalidates the RAM cache from the given profile ID. If none is provided,
110
110
  * the entire cache is emptied.
111
111
  *
112
112
  * @param {String} [id] - profile identifier
113
113
  */
114
- global.kuzzle.onAsk('core:security:profile:invalidate', id => this.invalidate(id));
114
+ global.kuzzle.onAsk("core:security:profile:invalidate", (id) => this.invalidate(id));
115
115
  /**
116
116
  * Gets multiple profiles
117
117
  * @param {Array} ids
118
118
  * @returns {Array.<Profile>}
119
119
  * @throws If one or more profiles don't exist
120
120
  */
121
- global.kuzzle.onAsk('core:security:profile:mGet', ids => this.loadProfiles(ids));
121
+ global.kuzzle.onAsk("core:security:profile:mGet", (ids) => this.loadProfiles(ids));
122
122
  /**
123
123
  * Fetches the next page of search results
124
124
  * @param {String} id - scroll identifier
125
125
  * @param {String} [ttl] - refresh the scroll results TTL
126
126
  * @returns {Object} Search results
127
127
  */
128
- global.kuzzle.onAsk('core:security:profile:scroll', (id, ttl) => this.scroll(id, ttl));
128
+ global.kuzzle.onAsk("core:security:profile:scroll", (id, ttl) => this.scroll(id, ttl));
129
129
  /**
130
130
  * Searches profiles
131
131
  *
@@ -134,12 +134,12 @@ class ProfileRepository extends repository_1.default {
134
134
  *
135
135
  * @returns {Object} Search results
136
136
  */
137
- global.kuzzle.onAsk('core:security:profile:search', (searchBody, opts) => this.search(searchBody, opts));
137
+ global.kuzzle.onAsk("core:security:profile:search", (searchBody, opts) => this.search(searchBody, opts));
138
138
  /**
139
139
  * Removes all existing profiles and invalidates the RAM cache
140
140
  * @param {Object} opts (refresh)
141
141
  */
142
- global.kuzzle.onAsk('core:security:profile:truncate', opts => this.truncate(opts));
142
+ global.kuzzle.onAsk("core:security:profile:truncate", (opts) => this.truncate(opts));
143
143
  /**
144
144
  * Updates an existing profile using a partial content
145
145
  * @param {String} id - profile identifier to update
@@ -147,7 +147,7 @@ class ProfileRepository extends repository_1.default {
147
147
  * @param {Object} opts - refresh, retryOnConflict, userId (used for metadata)
148
148
  * @returns {Profile} Updated profile
149
149
  */
150
- global.kuzzle.onAsk('core:security:profile:update', (id, content, opts) => this.update(id, content, opts));
150
+ global.kuzzle.onAsk("core:security:profile:update", (id, content, opts) => this.update(id, content, opts));
151
151
  }
152
152
  /**
153
153
  * Loads a Profile
@@ -181,14 +181,13 @@ class ProfileRepository extends repository_1.default {
181
181
  */
182
182
  async loadProfiles(profileIds = []) {
183
183
  const profiles = [];
184
- if (profileIds.some(p => typeof p !== 'string')) {
185
- throw kerror.get('api', 'assert', 'invalid_type', 'profileIds', 'string[]');
184
+ if (profileIds.some((p) => typeof p !== "string")) {
185
+ throw kerror.get("api", "assert", "invalid_type", "profileIds", "string[]");
186
186
  }
187
187
  for (const id of profileIds) {
188
188
  let profile = this.profiles.get(id);
189
189
  if (!profile) {
190
- profile = this.loadOneFromDatabase(id)
191
- .then(p => {
190
+ profile = this.loadOneFromDatabase(id).then((p) => {
192
191
  p.optimizedPolicies = this.optimizePolicies(p.policies);
193
192
  this.profiles.set(id, p);
194
193
  return p;
@@ -207,7 +206,7 @@ class ProfileRepository extends repository_1.default {
207
206
  }
208
207
  catch (err) {
209
208
  if (err.status === 404) {
210
- throw kerror.get('security', 'profile', 'not_found', id);
209
+ throw kerror.get("security", "profile", "not_found", id);
211
210
  }
212
211
  throw err;
213
212
  }
@@ -220,7 +219,7 @@ class ProfileRepository extends repository_1.default {
220
219
  * @param {Object} [opts]
221
220
  * @returns {Profile}
222
221
  */
223
- async _createOrReplace(id, content, { method, refresh = 'false', strict, userId = null } = {}) {
222
+ async _createOrReplace(id, content, { method, refresh = "false", strict, userId = null, } = {}) {
224
223
  const profile = await this.fromDTO({
225
224
  // content should be first: ignores _id and _kuzzle_info in it
226
225
  ...content,
@@ -244,7 +243,7 @@ class ProfileRepository extends repository_1.default {
244
243
  */
245
244
  async create(id, content, opts = {}) {
246
245
  return this._createOrReplace(id, content, {
247
- method: 'create',
246
+ method: "create",
248
247
  ...opts,
249
248
  });
250
249
  }
@@ -258,7 +257,7 @@ class ProfileRepository extends repository_1.default {
258
257
  */
259
258
  async createOrReplace(id, content, opts = {}) {
260
259
  return this._createOrReplace(id, content, {
261
- method: 'createOrReplace',
260
+ method: "createOrReplace",
262
261
  ...opts,
263
262
  });
264
263
  }
@@ -284,7 +283,7 @@ class ProfileRepository extends repository_1.default {
284
283
  },
285
284
  });
286
285
  return this.validateAndSaveProfile(updated, {
287
- method: 'update',
286
+ method: "update",
288
287
  refresh,
289
288
  retryOnConflict,
290
289
  strict,
@@ -304,42 +303,42 @@ class ProfileRepository extends repository_1.default {
304
303
  /**
305
304
  * @override
306
305
  */
307
- async delete(profile, { refresh = 'false', onAssignedUsers = 'fail', userId = '-1', } = {}) {
308
- if (['admin', 'default', 'anonymous'].includes(profile._id)) {
309
- throw kerror.get('security', 'profile', 'cannot_delete');
306
+ async delete(profile, { refresh = "false", onAssignedUsers = "fail", userId = "-1" } = {}) {
307
+ if (["admin", "default", "anonymous"].includes(profile._id)) {
308
+ throw kerror.get("security", "profile", "cannot_delete");
310
309
  }
311
310
  const query = {
312
311
  terms: {
313
- 'profileIds': [profile._id]
314
- }
312
+ profileIds: [profile._id],
313
+ },
315
314
  };
316
- if (onAssignedUsers === 'remove') {
315
+ if (onAssignedUsers === "remove") {
317
316
  const batch = [];
318
317
  let treated = 0;
319
- let userPage = await this.module.user.search({ query }, { scroll: '1m', size: 100 });
318
+ let userPage = await this.module.user.search({ query }, { scroll: "1m", size: 100 });
320
319
  while (treated < userPage.total) {
321
320
  batch.length = 0;
322
321
  for (const user of userPage.hits) {
323
- user.profileIds = user.profileIds.filter(e => e !== profile._id);
322
+ user.profileIds = user.profileIds.filter((e) => e !== profile._id);
324
323
  if (user.profileIds.length === 0) {
325
- user.profileIds.push('anonymous');
324
+ user.profileIds.push("anonymous");
326
325
  }
327
326
  batch.push(this.module.user.update(user._id, user.profileIds, user, {
328
327
  refresh,
329
- userId
328
+ userId,
330
329
  }));
331
330
  }
332
331
  await bluebird_1.default.all(batch);
333
332
  treated += userPage.hits.length;
334
333
  if (treated < userPage.total) {
335
- userPage = await this.module.user.scroll(userPage.scrollId, '1m');
334
+ userPage = await this.module.user.scroll(userPage.scrollId, "1m");
336
335
  }
337
336
  }
338
337
  }
339
338
  else {
340
339
  const hits = await this.module.user.search({ query }, { from: 0, size: 1 });
341
340
  if (hits.total > 0) {
342
- throw kerror.get('security', 'profile', 'in_use');
341
+ throw kerror.get("security", "profile", "in_use");
343
342
  }
344
343
  }
345
344
  await this.deleteFromDatabase(profile._id, { refresh });
@@ -354,7 +353,7 @@ class ProfileRepository extends repository_1.default {
354
353
  */
355
354
  serializeToDatabase(profile) {
356
355
  // avoid the profile var mutation
357
- return (0, lodash_1.omit)(profile, ['_id']);
356
+ return (0, lodash_1.omit)(profile, ["_id"]);
358
357
  }
359
358
  /**
360
359
  * Given a Profile object, validates its definition and if OK, persist it to the database.
@@ -369,17 +368,21 @@ class ProfileRepository extends repository_1.default {
369
368
  * applied on existing indexes/collections
370
369
  * @returns {Promise<Profile>}
371
370
  **/
372
- async validateAndSaveProfile(profile, { method, refresh, retryOnConflict, strict } = {}) {
373
- const policiesRoles = profile.policies.map(p => p.roleId);
371
+ async validateAndSaveProfile(profile, { method, refresh, retryOnConflict, strict, } = {}) {
372
+ const policiesRoles = profile.policies.map((p) => p.roleId);
374
373
  // Assert: all roles must exist
375
374
  await this.module.role.loadRoles(policiesRoles);
376
375
  await profile.validateDefinition({ strict });
377
- if (profile._id === 'anonymous'
378
- && policiesRoles.indexOf('anonymous') === -1) {
379
- throw kerror.get('security', 'profile', 'missing_anonymous_role');
376
+ if (profile._id === "anonymous" &&
377
+ policiesRoles.indexOf("anonymous") === -1) {
378
+ throw kerror.get("security", "profile", "missing_anonymous_role");
380
379
  }
381
380
  profile.optimizedPolicies = undefined; // Remove optimized policies
382
- await super.persistToDatabase(profile, { method, refresh, retryOnConflict });
381
+ await super.persistToDatabase(profile, {
382
+ method,
383
+ refresh,
384
+ retryOnConflict,
385
+ });
383
386
  const updatedProfile = await this.loadOneFromDatabase(profile._id);
384
387
  // Recompute optimized policies based on new policies
385
388
  updatedProfile.optimizedPolicies = this.optimizePolicies(updatedProfile.policies);
@@ -394,16 +397,16 @@ class ProfileRepository extends repository_1.default {
394
397
  const profile = await super.fromDTO(dto);
395
398
  // force "default" role/policy if the profile does not have any role in it
396
399
  if (!profile.policies || profile.policies.length === 0) {
397
- profile.policies = [{ roleId: 'default' }];
400
+ profile.policies = [{ roleId: "default" }];
398
401
  }
399
- if (profile.constructor._hash('') === false) {
400
- profile.constructor._hash = obj => global.kuzzle.hash(obj);
402
+ if (profile.constructor._hash("") === false) {
403
+ profile.constructor._hash = (obj) => global.kuzzle.hash(obj);
401
404
  }
402
- const policiesRoles = profile.policies.map(p => p.roleId);
405
+ const policiesRoles = profile.policies.map((p) => p.roleId);
403
406
  const roles = await this.module.role.loadRoles(policiesRoles);
404
407
  // Fail if not all roles are found
405
- if (roles.some(r => r === null)) {
406
- throw kerror.get('security', 'profile', 'cannot_hydrate');
408
+ if (roles.some((r) => r === null)) {
409
+ throw kerror.get("security", "profile", "cannot_hydrate");
407
410
  }
408
411
  return profile;
409
412
  }