kuzzle 2.17.5 → 2.17.8

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 (197) hide show
  1. package/bin/start-kuzzle-server +1 -1
  2. package/lib/api/controllers/adminController.js +5 -4
  3. package/lib/api/controllers/authController.js +1 -1
  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 +7 -2
  9. package/lib/api/controllers/index.js +1 -1
  10. package/lib/api/controllers/indexController.js +1 -1
  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 +1 -1
  14. package/lib/api/controllers/serverController.js +1 -1
  15. package/lib/api/documentExtractor.js +1 -1
  16. package/lib/api/funnel.js +1 -1
  17. package/lib/api/httpRoutes.js +5 -4
  18. package/lib/api/openapi/OpenApiManager.js +2 -1
  19. package/lib/api/openapi/components/document/index.d.ts +2 -0
  20. package/lib/api/openapi/components/document/index.js +6 -1
  21. package/lib/api/openapi/components/document/mCreateOrReplace.yaml +93 -0
  22. package/lib/api/openapi/openApiGenerator.js +1 -1
  23. package/lib/api/rateLimiter.js +1 -1
  24. package/lib/api/request/kuzzleRequest.js +1 -1
  25. package/lib/api/request/requestContext.js +1 -1
  26. package/lib/api/request/requestInput.js +1 -1
  27. package/lib/api/request/requestResponse.js +1 -1
  28. package/lib/cluster/command.js +1 -1
  29. package/lib/cluster/idCardHandler.js +1 -1
  30. package/lib/cluster/index.js +1 -1
  31. package/lib/cluster/node.js +8 -8
  32. package/lib/cluster/publisher.js +1 -1
  33. package/lib/cluster/state.js +1 -1
  34. package/lib/cluster/subscriber.js +4 -1
  35. package/lib/config/documentEventAliases.js +1 -1
  36. package/lib/config/index.js +1 -1
  37. package/lib/core/auth/formatProcessing.js +1 -1
  38. package/lib/core/auth/passportResponse.js +1 -1
  39. package/lib/core/auth/passportWrapper.js +1 -1
  40. package/lib/core/auth/tokenManager.js +1 -1
  41. package/lib/core/backend/applicationManager.js +1 -1
  42. package/lib/core/backend/backend.js +1 -1
  43. package/lib/core/backend/backendCluster.js +1 -1
  44. package/lib/core/backend/backendConfig.js +1 -1
  45. package/lib/core/backend/backendController.js +1 -1
  46. package/lib/core/backend/backendErrors.js +1 -1
  47. package/lib/core/backend/backendHook.js +1 -1
  48. package/lib/core/backend/backendImport.js +1 -1
  49. package/lib/core/backend/backendOpenApi.js +1 -1
  50. package/lib/core/backend/backendPipe.js +1 -1
  51. package/lib/core/backend/backendPlugin.js +1 -1
  52. package/lib/core/backend/backendStorage.js +1 -1
  53. package/lib/core/backend/backendVault.js +1 -1
  54. package/lib/core/backend/internalLogger.js +1 -1
  55. package/lib/core/cache/cacheDbEnum.js +1 -1
  56. package/lib/core/cache/cacheEngine.js +1 -1
  57. package/lib/core/network/accessLogger.js +12 -7
  58. package/lib/core/network/clientConnection.js +1 -1
  59. package/lib/core/network/context.js +1 -1
  60. package/lib/core/network/entryPoint.js +6 -6
  61. package/lib/core/network/httpRouter/index.js +1 -1
  62. package/lib/core/network/httpRouter/routeHandler.js +1 -1
  63. package/lib/core/network/httpRouter/routePart.js +1 -1
  64. package/lib/core/network/protocolManifest.js +1 -1
  65. package/lib/core/network/protocols/httpMessage.js +1 -1
  66. package/lib/core/network/protocols/httpwsProtocol.js +5 -10
  67. package/lib/core/network/protocols/internalProtocol.js +1 -1
  68. package/lib/core/network/protocols/mqttProtocol.js +4 -3
  69. package/lib/core/network/protocols/protocol.js +1 -1
  70. package/lib/core/network/router.js +11 -2
  71. package/lib/core/plugin/plugin.js +1 -1
  72. package/lib/core/plugin/pluginContext.js +1 -1
  73. package/lib/core/plugin/pluginManifest.js +1 -1
  74. package/lib/core/plugin/pluginRepository.js +1 -1
  75. package/lib/core/plugin/pluginsManager.js +1 -1
  76. package/lib/core/plugin/privilegedContext.js +1 -1
  77. package/lib/core/realtime/actionEnum.js +1 -1
  78. package/lib/core/realtime/channel.js +1 -1
  79. package/lib/core/realtime/connectionRooms.js +1 -1
  80. package/lib/core/realtime/hotelClerk.js +66 -24
  81. package/lib/core/realtime/index.js +1 -1
  82. package/lib/core/realtime/notification/document.js +1 -1
  83. package/lib/core/realtime/notification/index.js +1 -1
  84. package/lib/core/realtime/notification/server.js +1 -1
  85. package/lib/core/realtime/notification/user.js +1 -1
  86. package/lib/core/realtime/notifier.js +1 -1
  87. package/lib/core/realtime/room.js +1 -1
  88. package/lib/core/realtime/subscription.js +1 -1
  89. package/lib/core/security/index.js +1 -1
  90. package/lib/core/security/profileRepository.js +1 -1
  91. package/lib/core/security/roleRepository.js +1 -1
  92. package/lib/core/security/securityLoader.js +1 -1
  93. package/lib/core/security/tokenRepository.js +1 -1
  94. package/lib/core/security/userRepository.js +1 -1
  95. package/lib/core/shared/KoncordeWrapper.js +1 -1
  96. package/lib/core/shared/abstractManifest.js +1 -1
  97. package/lib/core/shared/repository.js +1 -1
  98. package/lib/core/shared/sdk/embeddedSdk.js +4 -3
  99. package/lib/core/shared/sdk/funnelProtocol.d.ts +14 -0
  100. package/lib/core/shared/sdk/funnelProtocol.js +76 -81
  101. package/lib/core/shared/sdk/impersonatedSdk.js +1 -1
  102. package/lib/core/shared/store.js +1 -1
  103. package/lib/core/statistics/index.js +1 -1
  104. package/lib/core/statistics/statistics.js +1 -1
  105. package/lib/core/storage/clientAdapter.js +5 -5
  106. package/lib/core/storage/indexCache.js +1 -1
  107. package/lib/core/storage/storageEngine.js +1 -1
  108. package/lib/core/storage/storeScopeEnum.js +1 -1
  109. package/lib/core/validation/baseType.js +1 -1
  110. package/lib/core/validation/index.js +1 -1
  111. package/lib/core/validation/types/anything.js +1 -1
  112. package/lib/core/validation/types/boolean.js +1 -1
  113. package/lib/core/validation/types/date.js +1 -1
  114. package/lib/core/validation/types/email.js +1 -1
  115. package/lib/core/validation/types/enum.js +1 -1
  116. package/lib/core/validation/types/geoPoint.js +1 -1
  117. package/lib/core/validation/types/geoShape.js +1 -1
  118. package/lib/core/validation/types/integer.js +1 -1
  119. package/lib/core/validation/types/ipAddress.js +1 -1
  120. package/lib/core/validation/types/numeric.js +1 -1
  121. package/lib/core/validation/types/object.js +1 -1
  122. package/lib/core/validation/types/string.js +1 -1
  123. package/lib/core/validation/types/url.js +1 -1
  124. package/lib/core/validation/validation.js +1 -1
  125. package/lib/kerror/codes/index.js +1 -1
  126. package/lib/kerror/errors/badRequestError.js +1 -1
  127. package/lib/kerror/errors/externalServiceError.js +1 -1
  128. package/lib/kerror/errors/forbiddenError.js +1 -1
  129. package/lib/kerror/errors/gatewayTimeoutError.js +1 -1
  130. package/lib/kerror/errors/index.js +1 -1
  131. package/lib/kerror/errors/internalError.js +1 -1
  132. package/lib/kerror/errors/kuzzleError.js +1 -1
  133. package/lib/kerror/errors/multipleErrorsError.js +1 -1
  134. package/lib/kerror/errors/notFoundError.js +1 -1
  135. package/lib/kerror/errors/partialError.js +1 -1
  136. package/lib/kerror/errors/pluginImplementationError.js +1 -1
  137. package/lib/kerror/errors/preconditionError.js +1 -1
  138. package/lib/kerror/errors/serviceUnavailableError.js +1 -1
  139. package/lib/kerror/errors/sizeLimitError.js +1 -1
  140. package/lib/kerror/errors/tooManyRequestsError.js +1 -1
  141. package/lib/kerror/errors/unauthorizedError.js +1 -1
  142. package/lib/kerror/index.js +2 -4
  143. package/lib/kuzzle/dumpGenerator.js +1 -1
  144. package/lib/kuzzle/event/kuzzleEventEmitter.js +39 -1
  145. package/lib/kuzzle/event/pipeRunner.js +1 -1
  146. package/lib/kuzzle/event/waterfall.js +1 -1
  147. package/lib/kuzzle/index.js +1 -1
  148. package/lib/kuzzle/internalIndexHandler.js +1 -1
  149. package/lib/kuzzle/kuzzle.js +1 -1
  150. package/lib/kuzzle/kuzzleStateEnum.js +1 -1
  151. package/lib/kuzzle/log.js +1 -1
  152. package/lib/kuzzle/vault.js +1 -1
  153. package/lib/model/security/profile.js +1 -1
  154. package/lib/model/security/rights.js +1 -1
  155. package/lib/model/security/role.js +1 -1
  156. package/lib/model/security/token.js +1 -1
  157. package/lib/model/security/user.js +1 -1
  158. package/lib/model/storage/apiKey.js +1 -1
  159. package/lib/model/storage/baseModel.js +1 -1
  160. package/lib/service/cache/redis.js +1 -1
  161. package/lib/service/service.js +1 -1
  162. package/lib/service/storage/elasticsearch.js +10 -9
  163. package/lib/service/storage/esWrapper.js +1 -1
  164. package/lib/service/storage/queryTranslator.js +1 -1
  165. package/lib/types/Controller.js +1 -1
  166. package/lib/types/ControllerDefinition.js +1 -1
  167. package/lib/types/Deprecation.js +1 -1
  168. package/lib/types/EventHandler.js +1 -1
  169. package/lib/types/KuzzleDocument.d.ts +3 -0
  170. package/lib/types/Plugin.js +1 -1
  171. package/lib/types/PluginManifest.js +1 -1
  172. package/lib/types/RequestPayload.js +1 -1
  173. package/lib/types/ResponsePayload.js +1 -1
  174. package/lib/types/StrategyDefinition.js +1 -1
  175. package/lib/types/Token.js +1 -1
  176. package/lib/types/User.js +1 -1
  177. package/lib/types/index.js +1 -1
  178. package/lib/util/array.js +1 -1
  179. package/lib/util/assertType.js +1 -1
  180. package/lib/util/asyncStore.js +1 -1
  181. package/lib/util/debug.js +1 -1
  182. package/lib/util/deprecate.js +1 -1
  183. package/lib/util/didYouMean.js +1 -1
  184. package/lib/util/extractFields.js +1 -1
  185. package/lib/util/inflector.js +1 -1
  186. package/lib/util/koncordeCompat.js +1 -1
  187. package/lib/util/memoize.js +1 -1
  188. package/lib/util/mutex.js +1 -1
  189. package/lib/util/name-generator.js +1 -1
  190. package/lib/util/promback.js +1 -1
  191. package/lib/util/requestAssertions.js +1 -1
  192. package/lib/util/safeObject.js +1 -1
  193. package/lib/util/stackTrace.js +56 -17
  194. package/lib/util/wildcard.js +1 -1
  195. package/package-lock.json +101 -97
  196. package/package.json +13 -12
  197. 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
  *
@@ -218,20 +218,37 @@ class HotelClerk {
218
218
  throw kerror.get('api', 'assert', 'koncorde_dsl_error', e.message);
219
219
  }
220
220
  this.createRoom(normalized);
221
- const { channel, subscribed } = await this.subscribeToRoom(normalized.id, request);
222
- if (subscribed) {
223
- global.kuzzle.emit('core:realtime:subscribe:after', normalized.id);
224
- // @deprecated -- to be removed in next major version
225
- // we have to recreate the old "diff" object
226
- await global.kuzzle.pipe('core:hotelClerk:addSubscription', {
227
- changed: subscribed,
228
- collection,
229
- connectionId: request.context.connection.id,
230
- filters: normalized.filter,
231
- index,
232
- roomId: normalized.id,
233
- });
234
- }
221
+ /**
222
+ * You might wonder why in the world is there a callback here.
223
+ * The fact is that to prevent the event loop from switching to another function
224
+ * we need to keep descending the execution stack without returning in a function that has been awaited
225
+ * otherwise once we return to the await keyword the event loop will switch to another function.
226
+ *
227
+ * Everything needs to be atomic (multiple operation done without interruption) otherwise we might
228
+ * run into some issues where the room is created but another request has deleted it before we can
229
+ * subscribe to it.
230
+ * All because the subscription was not atomic.
231
+ *
232
+ * So to keep the context of execution we use a lambda that we give to the subscribeToRoom function
233
+ * and we execute it right after the subscription this way we keep descending the execution stack without returning and
234
+ * without switching context.
235
+ */
236
+ const afterSubscribeCallback = async (subscribed) => {
237
+ if (subscribed) {
238
+ global.kuzzle.call('core:realtime:subscribe:after', normalized.id);
239
+ // @deprecated -- to be removed in next major version
240
+ // we have to recreate the old "diff" object
241
+ await global.kuzzle.pipe('core:hotelClerk:addSubscription', {
242
+ changed: subscribed,
243
+ collection,
244
+ connectionId: request.context.connection.id,
245
+ filters: normalized.filter,
246
+ index,
247
+ roomId: normalized.id,
248
+ });
249
+ }
250
+ };
251
+ const { channel } = await this.subscribeToRoom(normalized.id, request, afterSubscribeCallback);
235
252
  const subscription = new subscription_1.Subscription(index, collection, request.input.body, normalized.id, request.context.connection.id, request.context.user);
236
253
  global.kuzzle.emit('core:realtime:user:subscribe:after', subscription);
237
254
  return {
@@ -260,10 +277,27 @@ class HotelClerk {
260
277
  }
261
278
  this.createRoom(normalized);
262
279
  }
263
- const { channel, cluster, subscribed } = await this.subscribeToRoom(roomId, request);
264
- if (cluster && subscribed) {
265
- global.kuzzle.emit('core:realtime:subscribe:after', roomId);
266
- }
280
+ /**
281
+ * You might wonder why in the world is there a callback here.
282
+ * The fact is that to prevent the event loop from switching to another function
283
+ * we need to keep descending the execution stack without returning in a function that has been awaited
284
+ * otherwise once we return to the await keyword the event loop will switch to another function.
285
+ *
286
+ * Everything needs to be atomic (multiple operation done without interruption) otherwise we might
287
+ * run into some issues where the room is created but another request has deleted it before we can
288
+ * subscribe to it.
289
+ * All because the subscription was not atomic.
290
+ *
291
+ * So to keep the context of execution we use a lambda that we give to the subscribeToRoom function
292
+ * and we execute it right after the subscription this way we keep descending the execution stack without returning and
293
+ * without switching context.
294
+ */
295
+ const afterSubscribeCallback = async (subscribed, cluster) => {
296
+ if (cluster && subscribed) {
297
+ global.kuzzle.call('core:realtime:subscribe:after', roomId);
298
+ }
299
+ };
300
+ const { channel } = await this.subscribeToRoom(roomId, request, afterSubscribeCallback);
267
301
  return {
268
302
  channel,
269
303
  roomId,
@@ -347,7 +381,7 @@ class HotelClerk {
347
381
  throw realtimeError.get('too_many_rooms');
348
382
  }
349
383
  this.koncorde.store(normalized);
350
- global.kuzzle.emit('core:realtime:room:create:after', normalized);
384
+ global.kuzzle.call('core:realtime:room:create:after', normalized);
351
385
  // @deprecated -- to be removed in the next major version of kuzzle
352
386
  global.kuzzle.emit('room:new', { collection, index, roomId });
353
387
  /*
@@ -395,8 +429,14 @@ class HotelClerk {
395
429
  global.kuzzle.entryPoint.leaveChannel(channel, connectionId);
396
430
  }
397
431
  room.removeConnection(connectionId);
432
+ // Used to know whether the room has been deleted or not during the unsubscription
433
+ // We need to store this information for later since we cannot checks if the room exists or has more than 0 subscriber
434
+ // later because the room might have been recreated by the time we need to send the notification
435
+ // all because of the `await this.removeRoom(roomId)`.
436
+ let roomDeleted = false;
398
437
  if (room.size === 0) {
399
438
  await this.removeRoom(roomId);
439
+ roomDeleted = true;
400
440
  }
401
441
  // even if the room is deleted for this node, another one may need the
402
442
  // notification
@@ -407,13 +447,13 @@ class HotelClerk {
407
447
  index: room.index,
408
448
  volatile,
409
449
  }, requestContext);
410
- await this.module.notifier.notifyUser(roomId, request, 'out', { count: room.size });
411
450
  // Do not send an unsubscription notification if the room has been destroyed
412
451
  // because the other nodes already had destroyed it in the full state
413
452
  if (notify
414
453
  && this.rooms.has(roomId)
415
- && room.channels.size > 0) {
416
- await global.kuzzle.pipe('core:realtime:unsubscribe:after', roomId);
454
+ && room.channels.size > 0
455
+ && !roomDeleted) {
456
+ global.kuzzle.call('core:realtime:unsubscribe:after', roomId);
417
457
  // @deprecated -- to be removed in next major version
418
458
  await global.kuzzle.pipe('core:hotelClerk:removeRoomForCustomer', {
419
459
  requestContext,
@@ -424,6 +464,7 @@ class HotelClerk {
424
464
  },
425
465
  });
426
466
  }
467
+ await this.module.notifier.notifyUser(roomId, request, 'out', { count: room.size });
427
468
  const kuid = global.kuzzle.tokenManager.getKuidFromConnection(connectionId);
428
469
  const subscription = new subscription_1.Subscription(room.index, room.collection, undefined, roomId, connectionId, { _id: kuid });
429
470
  global.kuzzle.emit('core:realtime:user:unsubscribe:after', {
@@ -474,7 +515,7 @@ class HotelClerk {
474
515
  * on the room if it does not already exists.
475
516
  *
476
517
  */
477
- async subscribeToRoom(roomId, request) {
518
+ async subscribeToRoom(roomId, request, afterSubscribeCallback) {
478
519
  let subscribed = false;
479
520
  let notifyPromise;
480
521
  const { scope, users, propagate } = request.input.args;
@@ -492,6 +533,7 @@ class HotelClerk {
492
533
  }
493
534
  global.kuzzle.entryPoint.joinChannel(channel.name, connectionId);
494
535
  room.createChannel(channel);
536
+ await afterSubscribeCallback(subscribed, channel.cluster);
495
537
  await notifyPromise;
496
538
  return {
497
539
  channel: channel.name,
@@ -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
  *
@@ -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
  *
@@ -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
  *
@@ -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
  *
@@ -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
  *
@@ -48,7 +48,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
48
48
  Object.defineProperty(exports, "__esModule", { value: true });
49
49
  exports.EmbeddedSDK = void 0;
50
50
  const kuzzle_sdk_1 = require("kuzzle-sdk");
51
- const funnelProtocol_1 = __importDefault(require("./funnelProtocol"));
51
+ const funnelProtocol_1 = require("./funnelProtocol");
52
52
  const safeObject_1 = require("../../../util/safeObject");
53
53
  const kerror = __importStar(require("../../../kerror"));
54
54
  const impersonatedSdk_1 = __importDefault(require("./impersonatedSdk"));
@@ -58,7 +58,8 @@ const contextError = kerror.wrap('plugin', 'context');
58
58
  */
59
59
  class EmbeddedSDK extends kuzzle_sdk_1.Kuzzle {
60
60
  constructor() {
61
- super(new funnelProtocol_1.default(), { autoResubscribe: false });
61
+ // FunnelProtocol is not technically a valid SDK protocol
62
+ super(new funnelProtocol_1.FunnelProtocol(), { autoResubscribe: false });
62
63
  }
63
64
  /**
64
65
  * Returns a new SDK impersonated with the provided user.
@@ -0,0 +1,14 @@
1
+ import { KuzzleEventEmitter } from 'kuzzle-sdk';
2
+ import { RequestPayload } from '../../../types';
3
+ export declare class FunnelProtocol extends KuzzleEventEmitter {
4
+ private id;
5
+ private connectionId;
6
+ constructor();
7
+ isReady(): boolean;
8
+ /**
9
+ * Hydrate the user and execute SDK query
10
+ */
11
+ query(request: RequestPayload): Promise<{
12
+ result: any;
13
+ }>;
14
+ }
@@ -1,8 +1,9 @@
1
+ "use strict";
1
2
  /*
2
3
  * Kuzzle, a backend software, self-hostable and ready to use
3
4
  * to power modern apps
4
5
  *
5
- * Copyright 2015-2020 Kuzzle
6
+ * Copyright 2015-2022 Kuzzle
6
7
  * mailto: support AT kuzzle.io
7
8
  * website: http://kuzzle.io
8
9
  *
@@ -18,88 +19,82 @@
18
19
  * See the License for the specific language governing permissions and
19
20
  * limitations under the License.
20
21
  */
21
-
22
- 'use strict';
23
-
24
- const { KuzzleEventEmitter } = require('kuzzle-sdk');
25
-
26
- const { Request } = require('../../../api/request');
27
- const kerror = require('../../../kerror');
28
- const { hilightUserCode } = require('../../../util/stackTrace');
29
-
30
- class FunnelProtocol extends KuzzleEventEmitter {
31
- constructor () {
32
- super();
33
-
34
- this.id = 'funnel';
35
- this.connectionId = null;
36
-
37
- /**
38
- * Realtime notifications are sent by the InternalProtocol
39
- * through the internal event system.
40
- */
41
- global.kuzzle.on('core:network:internal:message', message => {
42
- // Send the notifications to the SDK for the internal Room mechanism
43
- this.emit(message.room, message);
44
- });
45
- }
46
-
47
- isReady () {
48
- return true;
49
- }
50
-
51
- /**
52
- * Hydrate the user and execute SDK query
53
- */
54
- async query (request) {
55
- if (! this.connectionId) {
56
- this.connectionId = await global.kuzzle.ask('core:network:internal:connectionId:get');
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
57
27
  }
58
-
59
- const requestOptions = {
60
- connection: {
61
- id: this.connectionId,
62
- protocol: this.id
63
- },
64
- user: null,
65
- };
66
-
67
- // Validate and use the provided request.kuid
68
- if (request.__kuid__) {
69
- if (typeof request.__kuid__ !== 'string') {
70
- throw kerror.get('plugin', 'context', 'invalid_user');
71
- }
72
- // Get the user and store it in this context to prevent any possible race conditions
73
- requestOptions.user = await global.kuzzle.ask('core:security:user:get', request.__kuid__);
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.FunnelProtocol = void 0;
47
+ const kuzzle_sdk_1 = require("kuzzle-sdk");
48
+ const request_1 = require("../../../api/request");
49
+ const kerror = __importStar(require("../../../kerror"));
50
+ class FunnelProtocol extends kuzzle_sdk_1.KuzzleEventEmitter {
51
+ constructor() {
52
+ super();
53
+ this.id = 'funnel';
54
+ this.connectionId = null;
55
+ /**
56
+ * Realtime notifications are sent by the InternalProtocol
57
+ * through the internal event system.
58
+ */
59
+ global.kuzzle.on('core:network:internal:message', message => {
60
+ // Send the notifications to the SDK for the internal Room mechanism
61
+ this.emit(message.room, message);
62
+ });
74
63
  }
75
-
76
- const kuzzleRequest = new Request(request, requestOptions);
77
-
78
- try {
79
- if (requestOptions.user && request.__checkRights__
80
- && ! await requestOptions.user.isActionAllowed(kuzzleRequest)
81
- ) {
82
- throw kerror.get(
83
- 'security',
84
- 'rights',
85
- 'forbidden',
86
- kuzzleRequest.input.controller,
87
- kuzzleRequest.input.action,
88
- requestOptions.user._id);
89
- }
90
-
91
- const result = await global.kuzzle.funnel.executePluginRequest(kuzzleRequest);
92
-
93
- return { result };
64
+ isReady() {
65
+ return true;
94
66
  }
95
- catch (error) {
96
- if (error.stack) {
97
- error.stack = error.stack.split('\n').map(hilightUserCode).join('\n');
98
- }
99
-
100
- throw error;
67
+ /**
68
+ * Hydrate the user and execute SDK query
69
+ */
70
+ async query(request) {
71
+ if (!this.connectionId) {
72
+ this.connectionId = await global.kuzzle.ask('core:network:internal:connectionId:get');
73
+ }
74
+ const requestOptions = {
75
+ connection: {
76
+ id: this.connectionId,
77
+ protocol: this.id
78
+ },
79
+ user: null,
80
+ };
81
+ // Validate and use the provided request.kuid
82
+ if (request.__kuid__) {
83
+ if (typeof request.__kuid__ !== 'string') {
84
+ throw kerror.get('plugin', 'context', 'invalid_user');
85
+ }
86
+ // Get the user and store it in this context to prevent any possible race conditions
87
+ requestOptions.user = await global.kuzzle.ask('core:security:user:get', request.__kuid__);
88
+ }
89
+ const kuzzleRequest = new request_1.Request(request, requestOptions);
90
+ if (requestOptions.user
91
+ && request.__checkRights__
92
+ && !await requestOptions.user.isActionAllowed(kuzzleRequest)) {
93
+ throw kerror.get('security', 'rights', 'forbidden', kuzzleRequest.input.controller, kuzzleRequest.input.action, requestOptions.user._id);
94
+ }
95
+ const result = await global.kuzzle.funnel.executePluginRequest(kuzzleRequest);
96
+ return { result };
101
97
  }
102
- }
103
98
  }
104
-
105
- module.exports = FunnelProtocol;
99
+ exports.FunnelProtocol = FunnelProtocol;
100
+ //# sourceMappingURL=funnelProtocol.js.map
@@ -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
  *
@@ -499,7 +499,7 @@ class ClientAdapter {
499
499
  */
500
500
  global.kuzzle.onAsk(
501
501
  `core:storage:${this.scope}:document:import`,
502
- fixtures => this.loadFixtures(fixtures));
502
+ (fixtures, options) => this.loadFixtures(fixtures, options));
503
503
 
504
504
  /**
505
505
  * Create multiple documents
@@ -690,7 +690,7 @@ class ClientAdapter {
690
690
  this.cache.assertCollectionExists(target.index, collection);
691
691
  }
692
692
  }
693
-
693
+
694
694
  return this.client.search({ searchBody, targets }, opts);
695
695
  });
696
696
 
@@ -861,7 +861,7 @@ class ClientAdapter {
861
861
  * @param {String} fixturesId
862
862
  * @returns {Promise}
863
863
  */
864
- async loadFixtures (fixtures = {}) {
864
+ async loadFixtures (fixtures = {}, { refresh = 'wait_for' } = { }) {
865
865
  if (! isPlainObject(fixtures)) {
866
866
  throw kerror.get('api', 'assert', 'invalid_argument', fixtures, 'object');
867
867
  }
@@ -878,7 +878,7 @@ class ClientAdapter {
878
878
  index,
879
879
  collection,
880
880
  payload,
881
- { refresh: 'wait_for' });
881
+ { refresh });
882
882
 
883
883
  if (errors.length > 0) {
884
884
  throw servicesError.get('import_failed', errors);
@@ -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
  *