kuzzle 2.56.0 → 2.57.0-beta.2
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.
- package/dist/bin/copy-binaries.js +71 -4
- package/dist/bin/start-kuzzle-server +191 -97
- package/dist/index.d.ts +31 -1
- package/dist/index.js +45 -2
- package/dist/lib/api/controllers/adminController.d.ts +4 -3
- package/dist/lib/api/controllers/adminController.js +1 -2
- package/dist/lib/api/controllers/authController.d.ts +37 -16
- package/dist/lib/api/controllers/authController.js +88 -39
- package/dist/lib/api/controllers/baseController.d.ts +10 -5
- package/dist/lib/api/controllers/baseController.js +36 -15
- package/dist/lib/api/controllers/bulkController.d.ts +11 -7
- package/dist/lib/api/controllers/bulkController.js +28 -5
- package/dist/lib/api/controllers/clusterController.d.ts +2 -2
- package/dist/lib/api/controllers/clusterController.js +3 -3
- package/dist/lib/api/controllers/collectionController.d.ts +57 -21
- package/dist/lib/api/controllers/collectionController.js +40 -11
- package/dist/lib/api/controllers/debugController.d.ts +1 -1
- package/dist/lib/api/controllers/documentController.d.ts +137 -28
- package/dist/lib/api/controllers/documentController.js +156 -125
- package/dist/lib/api/controllers/index.d.ts +27 -12
- package/dist/lib/api/controllers/index.js +28 -13
- package/dist/lib/api/controllers/indexController.d.ts +17 -10
- package/dist/lib/api/controllers/indexController.js +13 -11
- package/dist/lib/api/controllers/memoryStorageController.d.ts +2 -5
- package/dist/lib/api/controllers/memoryStorageController.js +199 -127
- package/dist/lib/api/controllers/realtimeController.d.ts +19 -9
- package/dist/lib/api/controllers/realtimeController.js +8 -4
- package/dist/lib/api/controllers/securityController.d.ts +42 -29
- package/dist/lib/api/controllers/securityController.js +35 -19
- package/dist/lib/api/controllers/serverController.d.ts +114 -19
- package/dist/lib/api/controllers/serverController.js +69 -29
- package/dist/lib/api/documentExtractor.d.ts +9 -7
- package/dist/lib/api/documentExtractor.js +105 -41
- package/dist/lib/api/funnel.d.ts +131 -29
- package/dist/lib/api/funnel.js +436 -225
- package/dist/lib/api/httpRoutes.d.ts +16 -11
- package/dist/lib/api/httpRoutes.js +272 -2
- package/dist/lib/api/openapi/OpenApiManager.d.ts +1 -1
- package/dist/lib/api/openapi/openApiGenerator.d.ts +1 -1
- package/dist/lib/api/rateLimiter.d.ts +15 -5
- package/dist/lib/api/rateLimiter.js +42 -14
- package/dist/lib/api/request/kuzzleRequest.d.ts +83 -12
- package/dist/lib/api/request/kuzzleRequest.js +88 -23
- package/dist/lib/api/request/requestContext.d.ts +20 -5
- package/dist/lib/api/request/requestContext.js +14 -4
- package/dist/lib/api/request/requestInput.d.ts +37 -6
- package/dist/lib/api/request/requestInput.js +22 -9
- package/dist/lib/api/request/requestResponse.d.ts +45 -9
- package/dist/lib/api/request/requestResponse.js +34 -3
- package/dist/lib/cluster/command.d.ts +131 -37
- package/dist/lib/cluster/command.js +243 -71
- package/dist/lib/cluster/idCardHandler.d.ts +18 -5
- package/dist/lib/cluster/idCardHandler.js +52 -19
- package/dist/lib/cluster/index.d.ts +8 -2
- package/dist/lib/cluster/index.js +6 -2
- package/dist/lib/cluster/node.d.ts +127 -49
- package/dist/lib/cluster/node.js +412 -179
- package/dist/lib/cluster/protobuf/command.proto +18 -0
- package/dist/lib/cluster/protobuf/commandMessages.d.ts +104 -0
- package/dist/lib/cluster/protobuf/commandMessages.js +30 -0
- package/dist/lib/cluster/protobuf/syncMessages.d.ts +184 -0
- package/dist/lib/cluster/protobuf/syncMessages.js +23 -0
- package/dist/lib/cluster/publisher.d.ts +118 -78
- package/dist/lib/cluster/publisher.js +174 -72
- package/dist/lib/cluster/state.d.ts +15 -9
- package/dist/lib/cluster/state.js +12 -8
- package/dist/lib/cluster/subscriber.d.ts +185 -131
- package/dist/lib/cluster/subscriber.js +357 -95
- package/dist/lib/cluster/workers/IDCardRenewer.d.ts +39 -8
- package/dist/lib/cluster/workers/IDCardRenewer.js +88 -23
- package/dist/lib/config/default.config.d.ts +2 -2
- package/dist/lib/config/default.config.js +10 -3
- package/dist/lib/config/documentEventAliases.d.ts +1 -1
- package/dist/lib/config/index.d.ts +2 -5
- package/dist/lib/config/index.js +30 -17
- package/dist/lib/core/auth/formatProcessing.d.ts +3 -3
- package/dist/lib/core/auth/passportResponse.d.ts +1 -1
- package/dist/lib/core/auth/passportWrapper.d.ts +1 -1
- package/dist/lib/core/auth/passportWrapper.js +14 -13
- package/dist/lib/core/auth/tokenManager.d.ts +24 -3
- package/dist/lib/core/auth/tokenManager.js +47 -19
- package/dist/lib/core/backend/applicationManager.d.ts +2 -2
- package/dist/lib/core/backend/backend.d.ts +16 -5
- package/dist/lib/core/backend/backend.js +14 -6
- package/dist/lib/core/backend/backendCluster.d.ts +1 -1
- package/dist/lib/core/backend/backendConfig.d.ts +17 -5
- package/dist/lib/core/backend/backendConfig.js +1 -0
- package/dist/lib/core/backend/backendController.d.ts +1 -1
- package/dist/lib/core/backend/backendController.js +8 -1
- package/dist/lib/core/backend/backendErrors.d.ts +15 -8
- package/dist/lib/core/backend/backendErrors.js +5 -0
- package/dist/lib/core/backend/backendHook.d.ts +1 -1
- package/dist/lib/core/backend/backendImport.d.ts +1 -1
- package/dist/lib/core/backend/backendOpenApi.d.ts +3 -2
- package/dist/lib/core/backend/backendPipe.d.ts +1 -1
- package/dist/lib/core/backend/backendPipe.js +9 -1
- package/dist/lib/core/backend/backendPlugin.d.ts +2 -2
- package/dist/lib/core/backend/backendSubscription.d.ts +2 -2
- package/dist/lib/core/backend/backendVault.d.ts +1 -1
- package/dist/lib/core/backend/backendVault.js +8 -1
- package/dist/lib/core/cache/cacheEngine.d.ts +7 -4
- package/dist/lib/core/cache/cacheEngine.js +25 -8
- package/dist/lib/core/debug/kuzzleDebugger.d.ts +2 -1
- package/dist/lib/core/debug/kuzzleDebugger.js +31 -17
- package/dist/lib/core/network/accessLogger.d.ts +33 -18
- package/dist/lib/core/network/accessLogger.js +135 -73
- package/dist/lib/core/network/clientConnection.d.ts +13 -11
- package/dist/lib/core/network/clientConnection.js +33 -9
- package/dist/lib/core/network/context.d.ts +17 -22
- package/dist/lib/core/network/context.js +43 -26
- package/dist/lib/core/network/entryPoint.d.ts +38 -16
- package/dist/lib/core/network/entryPoint.js +119 -48
- package/dist/lib/core/network/httpRouter/index.d.ts +20 -50
- package/dist/lib/core/network/httpRouter/index.js +61 -75
- package/dist/lib/core/network/httpRouter/routeHandler.d.ts +17 -32
- package/dist/lib/core/network/httpRouter/routeHandler.js +26 -36
- package/dist/lib/core/network/httpRouter/routePart.d.ts +9 -18
- package/dist/lib/core/network/httpRouter/routePart.js +61 -43
- package/dist/lib/core/network/httpRouter/routeTypes.d.ts +3 -0
- package/dist/lib/core/network/httpRouter/routeTypes.js +23 -0
- package/dist/lib/core/network/networkEntryPoint.d.ts +20 -0
- package/dist/lib/core/network/networkEntryPoint.js +23 -0
- package/dist/lib/core/network/protocolManifest.d.ts +5 -4
- package/dist/lib/core/network/protocolManifest.js +6 -3
- package/dist/lib/core/network/protocols/httpMessage.d.ts +25 -18
- package/dist/lib/core/network/protocols/httpMessage.js +14 -11
- package/dist/lib/core/network/protocols/httpwsProtocol.d.ts +84 -93
- package/dist/lib/core/network/protocols/httpwsProtocol.js +284 -129
- package/dist/lib/core/network/protocols/internalProtocol.d.ts +26 -15
- package/dist/lib/core/network/protocols/internalProtocol.js +17 -16
- package/dist/lib/core/network/protocols/mqttProtocol.d.ts +56 -32
- package/dist/lib/core/network/protocols/mqttProtocol.js +91 -44
- package/dist/lib/core/network/protocols/protocol.d.ts +85 -21
- package/dist/lib/core/network/protocols/protocol.js +83 -27
- package/dist/lib/core/network/router.d.ts +13 -22
- package/dist/lib/core/network/router.js +59 -46
- package/dist/lib/core/plugin/plugin.d.ts +57 -51
- package/dist/lib/core/plugin/plugin.js +218 -103
- package/dist/lib/core/plugin/pluginContext.d.ts +54 -11
- package/dist/lib/core/plugin/pluginContext.js +99 -58
- package/dist/lib/core/plugin/pluginManifest.d.ts +6 -2
- package/dist/lib/core/plugin/pluginManifest.js +18 -11
- package/dist/lib/core/plugin/pluginRepository.d.ts +35 -44
- package/dist/lib/core/plugin/pluginRepository.js +35 -50
- package/dist/lib/core/plugin/pluginsManager.d.ts +128 -46
- package/dist/lib/core/plugin/pluginsManager.js +468 -231
- package/dist/lib/core/plugin/privilegedContext.d.ts +4 -9
- package/dist/lib/core/plugin/privilegedContext.js +5 -10
- package/dist/lib/core/realtime/actionEnum.d.ts +12 -21
- package/dist/lib/core/realtime/actionEnum.js +6 -7
- package/dist/lib/core/realtime/channel.d.ts +11 -5
- package/dist/lib/core/realtime/channel.js +17 -2
- package/dist/lib/core/realtime/connectionRooms.d.ts +2 -2
- package/dist/lib/core/realtime/hotelClerk.d.ts +12 -6
- package/dist/lib/core/realtime/hotelClerk.js +29 -11
- package/dist/lib/core/realtime/index.d.ts +8 -3
- package/dist/lib/core/realtime/index.js +12 -5
- package/dist/lib/core/realtime/notification/document.d.ts +54 -25
- package/dist/lib/core/realtime/notification/document.js +10 -13
- package/dist/lib/core/realtime/notification/index.d.ts +9 -3
- package/dist/lib/core/realtime/notification/index.js +10 -4
- package/dist/lib/core/realtime/notification/server.d.ts +7 -10
- package/dist/lib/core/realtime/notification/server.js +4 -7
- package/dist/lib/core/realtime/notification/user.d.ts +45 -21
- package/dist/lib/core/realtime/notification/user.js +8 -9
- package/dist/lib/core/realtime/notifier.d.ts +52 -40
- package/dist/lib/core/realtime/notifier.js +60 -25
- package/dist/lib/core/realtime/room.d.ts +1 -1
- package/dist/lib/core/realtime/subscription.d.ts +11 -6
- package/dist/lib/core/realtime/subscription.js +5 -1
- package/dist/lib/core/security/index.d.ts +14 -6
- package/dist/lib/core/security/index.js +27 -13
- package/dist/lib/core/security/profileRepository.d.ts +24 -19
- package/dist/lib/core/security/profileRepository.js +23 -10
- package/dist/lib/core/security/roleRepository.d.ts +60 -23
- package/dist/lib/core/security/roleRepository.js +122 -53
- package/dist/lib/core/security/securityLoader.d.ts +33 -18
- package/dist/lib/core/security/securityLoader.js +43 -16
- package/dist/lib/core/security/tokenRepository.d.ts +21 -7
- package/dist/lib/core/security/tokenRepository.js +50 -23
- package/dist/lib/core/security/userRepository.d.ts +44 -21
- package/dist/lib/core/security/userRepository.js +59 -19
- package/dist/lib/core/shared/KoncordeWrapper.d.ts +1 -1
- package/dist/lib/core/shared/ObjectRepository.d.ts +80 -18
- package/dist/lib/core/shared/ObjectRepository.js +57 -29
- package/dist/lib/core/shared/abstractManifest.d.ts +21 -8
- package/dist/lib/core/shared/abstractManifest.js +57 -17
- package/dist/lib/core/shared/sdk/embeddedSdk.d.ts +3 -1
- package/dist/lib/core/shared/sdk/embeddedSdk.js +8 -7
- package/dist/lib/core/shared/sdk/funnelProtocol.d.ts +2 -1
- package/dist/lib/core/shared/sdk/funnelProtocol.js +12 -3
- package/dist/lib/core/shared/sdk/impersonatedSdk.d.ts +11 -5
- package/dist/lib/core/shared/sdk/impersonatedSdk.js +22 -9
- package/dist/lib/core/shared/store.d.ts +45 -29
- package/dist/lib/core/shared/store.js +48 -27
- package/dist/lib/core/statistics/statistics.d.ts +1 -1
- package/dist/lib/core/storage/clientAdapter.d.ts +39 -21
- package/dist/lib/core/storage/clientAdapter.js +88 -48
- package/dist/lib/core/storage/indexCache.d.ts +8 -0
- package/dist/lib/core/storage/indexCache.js +16 -7
- package/dist/lib/core/storage/storageEngine.d.ts +7 -6
- package/dist/lib/core/storage/storageEngine.js +11 -8
- package/dist/lib/core/validation/baseType.d.ts +22 -22
- package/dist/lib/core/validation/baseType.js +11 -26
- package/dist/lib/core/validation/specification.d.ts +148 -0
- package/dist/lib/core/validation/specification.js +34 -0
- package/dist/lib/core/validation/typeOptions.d.ts +62 -0
- package/dist/lib/core/validation/typeOptions.js +23 -0
- package/dist/lib/core/validation/types/anything.d.ts +3 -6
- package/dist/lib/core/validation/types/anything.js +7 -7
- package/dist/lib/core/validation/types/boolean.d.ts +5 -12
- package/dist/lib/core/validation/types/boolean.js +7 -12
- package/dist/lib/core/validation/types/date.d.ts +19 -11
- package/dist/lib/core/validation/types/date.js +212 -161
- package/dist/lib/core/validation/types/email.d.ts +7 -11
- package/dist/lib/core/validation/types/email.js +13 -17
- package/dist/lib/core/validation/types/enum.d.ts +7 -11
- package/dist/lib/core/validation/types/enum.js +39 -20
- package/dist/lib/core/validation/types/geoPoint.d.ts +5 -13
- package/dist/lib/core/validation/types/geoPoint.js +10 -15
- package/dist/lib/core/validation/types/geoShape.d.ts +22 -21
- package/dist/lib/core/validation/types/geoShape.js +113 -129
- package/dist/lib/core/validation/types/geoShapeUtils.d.ts +15 -0
- package/dist/lib/core/validation/types/geoShapeUtils.js +75 -0
- package/dist/lib/core/validation/types/integer.d.ts +7 -5
- package/dist/lib/core/validation/types/integer.js +7 -13
- package/dist/lib/core/validation/types/ipAddress.d.ts +7 -11
- package/dist/lib/core/validation/types/ipAddress.js +13 -17
- package/dist/lib/core/validation/types/numeric.d.ts +7 -11
- package/dist/lib/core/validation/types/numeric.js +22 -29
- package/dist/lib/core/validation/types/object.d.ts +8 -15
- package/dist/lib/core/validation/types/object.js +12 -21
- package/dist/lib/core/validation/types/string.d.ts +7 -11
- package/dist/lib/core/validation/types/string.js +22 -29
- package/dist/lib/core/validation/types/url.d.ts +7 -11
- package/dist/lib/core/validation/types/url.js +14 -18
- package/dist/lib/core/validation/validation.d.ts +119 -80
- package/dist/lib/core/validation/validation.js +470 -412
- package/dist/lib/core/validation/validationUtils.d.ts +31 -0
- package/dist/lib/core/validation/validationUtils.js +190 -0
- package/dist/lib/kerror/codes/4-plugin.json +0 -12
- package/dist/lib/kerror/codes/index.d.ts +12 -2
- package/dist/lib/kerror/codes/index.js +5 -4
- package/dist/lib/kerror/errors/badRequestError.d.ts +1 -1
- package/dist/lib/kerror/errors/badRequestError.js +1 -1
- package/dist/lib/kerror/errors/externalServiceError.d.ts +1 -1
- package/dist/lib/kerror/errors/externalServiceError.js +1 -1
- package/dist/lib/kerror/errors/forbiddenError.d.ts +1 -1
- package/dist/lib/kerror/errors/forbiddenError.js +1 -1
- package/dist/lib/kerror/errors/gatewayTimeoutError.d.ts +1 -1
- package/dist/lib/kerror/errors/gatewayTimeoutError.js +1 -1
- package/dist/lib/kerror/errors/internalError.d.ts +1 -1
- package/dist/lib/kerror/errors/internalError.js +1 -1
- package/dist/lib/kerror/errors/kuzzleError.d.ts +32 -3
- package/dist/lib/kerror/errors/kuzzleError.js +21 -7
- package/dist/lib/kerror/errors/multipleErrorsError.d.ts +2 -2
- package/dist/lib/kerror/errors/multipleErrorsError.js +2 -2
- package/dist/lib/kerror/errors/notFoundError.d.ts +1 -1
- package/dist/lib/kerror/errors/notFoundError.js +1 -1
- package/dist/lib/kerror/errors/partialError.d.ts +8 -2
- package/dist/lib/kerror/errors/partialError.js +22 -9
- package/dist/lib/kerror/errors/pluginImplementationError.d.ts +9 -1
- package/dist/lib/kerror/errors/pluginImplementationError.js +9 -3
- package/dist/lib/kerror/errors/preconditionError.d.ts +1 -1
- package/dist/lib/kerror/errors/preconditionError.js +1 -1
- package/dist/lib/kerror/errors/serviceUnavailableError.d.ts +1 -1
- package/dist/lib/kerror/errors/serviceUnavailableError.js +1 -1
- package/dist/lib/kerror/errors/sizeLimitError.d.ts +1 -1
- package/dist/lib/kerror/errors/sizeLimitError.js +1 -1
- package/dist/lib/kerror/errors/tooManyRequestsError.d.ts +1 -1
- package/dist/lib/kerror/errors/tooManyRequestsError.js +1 -1
- package/dist/lib/kerror/errors/unauthorizedError.d.ts +1 -1
- package/dist/lib/kerror/errors/unauthorizedError.js +1 -1
- package/dist/lib/kerror/index.d.ts +19 -13
- package/dist/lib/kerror/index.js +60 -19
- package/dist/lib/kuzzle/Logger.d.ts +2 -2
- package/dist/lib/kuzzle/dumpGenerator.d.ts +12 -8
- package/dist/lib/kuzzle/dumpGenerator.js +130 -62
- package/dist/lib/kuzzle/event/KuzzleEventEmitter.d.ts +18 -9
- package/dist/lib/kuzzle/event/KuzzleEventEmitter.js +45 -18
- package/dist/lib/kuzzle/event/pipeRunner.d.ts +37 -16
- package/dist/lib/kuzzle/event/pipeRunner.js +73 -26
- package/dist/lib/kuzzle/event/waterfall.d.ts +11 -1
- package/dist/lib/kuzzle/event/waterfall.js +38 -13
- package/dist/lib/kuzzle/internalIndexHandler.d.ts +11 -174
- package/dist/lib/kuzzle/internalIndexHandler.js +58 -29
- package/dist/lib/kuzzle/kuzzle.d.ts +25 -10
- package/dist/lib/kuzzle/kuzzle.js +74 -17
- package/dist/lib/kuzzle/kuzzleStateEnum.d.ts +16 -12
- package/dist/lib/kuzzle/kuzzleStateEnum.js +5 -7
- package/dist/lib/kuzzle/vault.d.ts +5 -1
- package/dist/lib/kuzzle/vault.js +29 -17
- package/dist/lib/model/security/profile.d.ts +34 -5
- package/dist/lib/model/security/profile.js +6 -5
- package/dist/lib/model/security/rights.d.ts +12 -4
- package/dist/lib/model/security/rights.js +7 -6
- package/dist/lib/model/security/role.d.ts +8 -4
- package/dist/lib/model/security/role.js +12 -6
- package/dist/lib/model/security/token.d.ts +8 -0
- package/dist/lib/model/security/user.d.ts +8 -2
- package/dist/lib/model/security/user.js +7 -4
- package/dist/lib/model/storage/apiKey.d.ts +55 -26
- package/dist/lib/model/storage/apiKey.js +97 -24
- package/dist/lib/model/storage/baseModel.d.ts +77 -66
- package/dist/lib/model/storage/baseModel.js +21 -34
- package/dist/lib/service/cache/redis.d.ts +53 -36
- package/dist/lib/service/cache/redis.js +148 -71
- package/dist/lib/service/service.d.ts +14 -19
- package/dist/lib/service/service.js +41 -22
- package/dist/lib/service/storage/7/elasticsearch.d.ts +136 -93
- package/dist/lib/service/storage/7/elasticsearch.js +218 -165
- package/dist/lib/service/storage/7/esWrapper.d.ts +30 -13
- package/dist/lib/service/storage/7/esWrapper.js +58 -37
- package/dist/lib/service/storage/8/elasticsearch.d.ts +153 -119
- package/dist/lib/service/storage/8/elasticsearch.js +286 -213
- package/dist/lib/service/storage/8/esWrapper.d.ts +30 -13
- package/dist/lib/service/storage/8/esWrapper.js +59 -38
- package/dist/lib/service/storage/commons/queryTranslator.d.ts +3 -3
- package/dist/lib/service/storage/commons/queryTranslator.js +71 -35
- package/dist/lib/types/ApiRoute.d.ts +12 -0
- package/dist/lib/types/ApiRoute.js +23 -0
- package/dist/lib/types/ClientConnection.d.ts +1 -1
- package/dist/lib/types/EventHandler.d.ts +10 -0
- package/dist/lib/types/Global.d.ts +8 -3
- package/dist/lib/types/HttpMessage.d.ts +2 -2
- package/dist/lib/types/HttpStream.d.ts +1 -1
- package/dist/lib/types/HttpStream.js +3 -1
- package/dist/lib/types/JSONObject.d.ts +9 -0
- package/dist/lib/types/JSONObject.js +23 -0
- package/dist/lib/types/Kuzzle.d.ts +5 -3
- package/dist/lib/types/KuzzleDocument.d.ts +1 -1
- package/dist/lib/types/KuzzleWebSocket.d.ts +24 -0
- package/dist/lib/types/KuzzleWebSocket.js +23 -0
- package/dist/lib/types/OpenApiDefinition.d.ts +1 -1
- package/dist/lib/types/Plugin.d.ts +33 -8
- package/dist/lib/types/PluginInstance.d.ts +67 -0
- package/dist/lib/types/PluginInstance.js +23 -0
- package/dist/lib/types/Policy.d.ts +1 -1
- package/dist/lib/types/Target.d.ts +8 -0
- package/dist/lib/types/Token.d.ts +14 -2
- package/dist/lib/types/config/HttpConfiguration.d.ts +5 -0
- package/dist/lib/types/config/KuzzleConfiguration.d.ts +102 -1
- package/dist/lib/types/config/PluginsConfiguration.d.ts +3 -2
- package/dist/lib/types/config/SecurityConfiguration.d.ts +6 -2
- package/dist/lib/types/config/ServerConfiguration.d.ts +2 -2
- package/dist/lib/types/config/ServicesConfiguration.d.ts +1 -1
- package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.d.ts +131 -0
- package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.js +3 -0
- package/dist/lib/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +2 -106
- package/dist/lib/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +2 -26
- package/dist/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +3 -0
- package/dist/lib/types/controllers/Controller.d.ts +12 -3
- package/dist/lib/types/controllers/ControllerDefinition.d.ts +2 -2
- package/dist/lib/types/controllers/{adminControlller.type.js → adminController.type.js} +1 -1
- package/dist/lib/types/controllers/authController.type.d.ts +2 -2
- package/dist/lib/types/core/auth/formatProcessing.type.d.ts +7 -1
- package/dist/lib/types/errors/ErrorDomains.d.ts +1 -1
- package/dist/lib/types/events/EventGenericDocument.d.ts +10 -9
- package/dist/lib/types/events/EventProtocol.d.ts +4 -4
- package/dist/lib/types/index.d.ts +7 -0
- package/dist/lib/types/index.js +7 -0
- package/dist/lib/types/shared/StoreCollectionsDefinition.d.ts +1 -1
- package/dist/lib/types/storage/7/Elasticsearch.d.ts +62 -13
- package/dist/lib/types/storage/8/Elasticsearch.d.ts +62 -13
- package/dist/lib/util/Inflector.d.ts +4 -1
- package/dist/lib/util/Inflector.js +0 -3
- package/dist/lib/util/assertType.d.ts +24 -27
- package/dist/lib/util/assertType.js +28 -39
- package/dist/lib/util/async.js +19 -6
- package/dist/lib/util/asyncStore.js +1 -1
- package/dist/lib/util/bufferedPassThrough.d.ts +9 -0
- package/dist/lib/util/bufferedPassThrough.js +27 -13
- package/dist/lib/util/bytes.d.ts +1 -1
- package/dist/lib/util/bytes.js +6 -2
- package/dist/lib/util/debug.d.ts +3 -1
- package/dist/lib/util/debug.js +42 -10
- package/dist/lib/util/deprecate.d.ts +9 -1
- package/dist/lib/util/deprecate.js +10 -6
- package/dist/lib/util/didYouMean.d.ts +2 -1
- package/dist/lib/util/didYouMean.js +8 -4
- package/dist/lib/util/distributedLock.d.ts +56 -0
- package/dist/lib/util/distributedLock.js +166 -0
- package/dist/lib/util/dump-collection.d.ts +1 -1
- package/dist/lib/util/dump-collection.js +4 -5
- package/dist/lib/util/extractFields.d.ts +15 -11
- package/dist/lib/util/extractFields.js +8 -9
- package/dist/lib/util/koncordeCompat.d.ts +2 -2
- package/dist/lib/util/koncordeCompat.js +33 -0
- package/dist/lib/util/memoize.d.ts +7 -6
- package/dist/lib/util/memoize.js +3 -3
- package/dist/lib/util/mutex.d.ts +22 -2
- package/dist/lib/util/mutex.js +39 -1
- package/dist/lib/util/name-generator.js +14 -2
- package/dist/lib/util/promback.d.ts +20 -11
- package/dist/lib/util/promback.js +14 -7
- package/dist/lib/util/requestAssertions.d.ts +30 -10
- package/dist/lib/util/requestAssertions.js +125 -121
- package/dist/lib/util/safeObject.d.ts +3 -3
- package/dist/lib/util/safeObject.js +7 -3
- package/dist/lib/util/stackTrace.d.ts +13 -5
- package/dist/lib/util/stackTrace.js +17 -12
- package/dist/lib/util/thrown.d.ts +13 -0
- package/dist/lib/util/thrown.js +46 -0
- package/dist/package.json +26 -19
- package/package.json +26 -19
- package/dist/lib/util/wildcard.d.ts +0 -1
- package/dist/lib/util/wildcard.js +0 -46
- /package/dist/lib/types/controllers/{adminControlller.type.d.ts → adminController.type.d.ts} +0 -0
|
@@ -1,29 +1,53 @@
|
|
|
1
|
-
|
|
1
|
+
import type { JSONObject } from "../../../types/JSONObject";
|
|
2
|
+
import type { KuzzleRequest } from "../../../api/request";
|
|
3
|
+
import type { RealtimeUsers } from "../../../types";
|
|
4
|
+
import "../../../types/Global";
|
|
5
|
+
/**
|
|
6
|
+
* Constructor payload. Filled either by `fromRequest` below or by
|
|
7
|
+
* `cluster/subscriber` from a decoded protobuf message.
|
|
8
|
+
*/
|
|
9
|
+
interface UserNotificationOptions {
|
|
10
|
+
status: number;
|
|
11
|
+
user: RealtimeUsers;
|
|
12
|
+
result: JSONObject;
|
|
13
|
+
node: string;
|
|
14
|
+
timestamp: number;
|
|
15
|
+
/**
|
|
16
|
+
* Nullable, like the other four below: they come straight off the request,
|
|
17
|
+
* where each is nullable, and a notification built from a request without one
|
|
18
|
+
* has always been emitted — and received — with `null` in that field.
|
|
19
|
+
*/
|
|
20
|
+
volatile: JSONObject | null;
|
|
21
|
+
index: string;
|
|
22
|
+
collection: string;
|
|
23
|
+
controller: string | null;
|
|
24
|
+
action: string | null;
|
|
25
|
+
protocol: string | null;
|
|
26
|
+
}
|
|
2
27
|
/**
|
|
3
28
|
* User notification document
|
|
4
|
-
*
|
|
5
|
-
* @class UserNotification
|
|
6
29
|
*/
|
|
7
30
|
declare class UserNotification {
|
|
31
|
+
type: string;
|
|
32
|
+
status: number;
|
|
33
|
+
user: RealtimeUsers;
|
|
34
|
+
result: JSONObject;
|
|
35
|
+
node: string;
|
|
36
|
+
timestamp: number;
|
|
37
|
+
volatile: JSONObject | null;
|
|
38
|
+
index: string;
|
|
39
|
+
collection: string;
|
|
40
|
+
controller: string | null;
|
|
41
|
+
action: string | null;
|
|
42
|
+
protocol: string | null;
|
|
43
|
+
constructor(opts: UserNotificationOptions);
|
|
8
44
|
/**
|
|
9
45
|
* Instantiates a UserNotification object from a KuzzleRequest
|
|
10
|
-
*
|
|
11
|
-
* @param
|
|
12
|
-
* @param
|
|
13
|
-
*
|
|
46
|
+
*
|
|
47
|
+
* @param request - the request object from which the notification is issued
|
|
48
|
+
* @param user - Whether the user is entering or leaving the room
|
|
49
|
+
* @param result - Notification content
|
|
14
50
|
*/
|
|
15
|
-
static fromRequest(request:
|
|
16
|
-
constructor(opts: any);
|
|
17
|
-
type: string;
|
|
18
|
-
status: any;
|
|
19
|
-
user: any;
|
|
20
|
-
result: any;
|
|
21
|
-
node: any;
|
|
22
|
-
timestamp: any;
|
|
23
|
-
volatile: any;
|
|
24
|
-
index: any;
|
|
25
|
-
collection: any;
|
|
26
|
-
controller: any;
|
|
27
|
-
action: any;
|
|
28
|
-
protocol: any;
|
|
51
|
+
static fromRequest(request: KuzzleRequest, user: RealtimeUsers, result: JSONObject): UserNotification;
|
|
29
52
|
}
|
|
53
|
+
export = UserNotification;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*
|
|
2
3
|
* Kuzzle, a backend software, self-hostable and ready to use
|
|
3
4
|
* to power modern apps
|
|
@@ -18,11 +19,9 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
"
|
|
22
|
+
require("../../../types/Global");
|
|
22
23
|
/**
|
|
23
24
|
* User notification document
|
|
24
|
-
*
|
|
25
|
-
* @class UserNotification
|
|
26
25
|
*/
|
|
27
26
|
class UserNotification {
|
|
28
27
|
constructor(opts) {
|
|
@@ -41,17 +40,17 @@ class UserNotification {
|
|
|
41
40
|
}
|
|
42
41
|
/**
|
|
43
42
|
* Instantiates a UserNotification object from a KuzzleRequest
|
|
44
|
-
*
|
|
45
|
-
* @param
|
|
46
|
-
* @param
|
|
47
|
-
*
|
|
43
|
+
*
|
|
44
|
+
* @param request - the request object from which the notification is issued
|
|
45
|
+
* @param user - Whether the user is entering or leaving the room
|
|
46
|
+
* @param result - Notification content
|
|
48
47
|
*/
|
|
49
48
|
static fromRequest(request, user, result) {
|
|
50
49
|
return new UserNotification({
|
|
51
50
|
action: request.input.action,
|
|
52
|
-
collection: request.input.
|
|
51
|
+
collection: request.input.args.collection,
|
|
53
52
|
controller: request.input.controller,
|
|
54
|
-
index: request.input.
|
|
53
|
+
index: request.input.args.index,
|
|
55
54
|
node: global.kuzzle.id,
|
|
56
55
|
protocol: request.context.connection.protocol,
|
|
57
56
|
result,
|
|
@@ -1,4 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
import type { JSONObject } from "../../types/JSONObject";
|
|
2
|
+
import Bluebird from "bluebird";
|
|
3
|
+
import type { KuzzleRequest } from "../../api/request";
|
|
4
|
+
import type { RealtimeScope, RealtimeUsers } from "../../types";
|
|
5
|
+
import actionEnum from "./actionEnum";
|
|
6
|
+
/**
|
|
7
|
+
* One of `actionEnum`'s members. Derived from the frozen object so the two
|
|
8
|
+
* cannot drift.
|
|
9
|
+
*/
|
|
10
|
+
type NotifyAction = (typeof actionEnum)[keyof typeof actionEnum];
|
|
11
|
+
import type { Logger } from "../../kuzzle/Logger";
|
|
12
|
+
import "../../types/Global";
|
|
13
|
+
import type { HotelClerk } from "./hotelClerk";
|
|
14
|
+
interface RealtimeModule {
|
|
15
|
+
hotelClerk: HotelClerk;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The slice of a written document this controller needs: its id, the source to
|
|
19
|
+
* match against subscription filters, and — for the WRITE/UPSERT actions, which
|
|
20
|
+
* cover both cases — whether the write created the document or updated it.
|
|
21
|
+
*/
|
|
22
|
+
interface DocumentChanges {
|
|
23
|
+
_id: string;
|
|
24
|
+
_source?: JSONObject;
|
|
25
|
+
created?: boolean;
|
|
26
|
+
action?: string;
|
|
27
|
+
}
|
|
28
|
+
declare const DocumentNotification: typeof import("./notification/document"), UserNotification: typeof import("./notification/user");
|
|
29
|
+
type DocumentNotificationType = InstanceType<typeof DocumentNotification>;
|
|
30
|
+
type UserNotificationType = InstanceType<typeof UserNotification>;
|
|
2
31
|
/**
|
|
3
32
|
* @typedef {Object} DocumentChanges
|
|
4
33
|
* @property {string} _id of the document
|
|
@@ -11,10 +40,10 @@ export = NotifierController;
|
|
|
11
40
|
* @class NotifierController
|
|
12
41
|
*/
|
|
13
42
|
declare class NotifierController {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
43
|
+
private readonly module;
|
|
44
|
+
private readonly ttl;
|
|
45
|
+
logger: Logger;
|
|
46
|
+
constructor(realtimeModule: RealtimeModule);
|
|
18
47
|
init(): Promise<void>;
|
|
19
48
|
/**
|
|
20
49
|
* Broadcasts a notification about a document change or a
|
|
@@ -27,7 +56,7 @@ declare class NotifierController {
|
|
|
27
56
|
*
|
|
28
57
|
* @returns {Promise}
|
|
29
58
|
*/
|
|
30
|
-
notifyDocument(rooms:
|
|
59
|
+
notifyDocument(rooms: string[], request: KuzzleRequest, scope: RealtimeScope, action: string, content: JSONObject): Promise<void>;
|
|
31
60
|
/**
|
|
32
61
|
* Broadcast a notification about a user entering or leaving
|
|
33
62
|
* the provided room
|
|
@@ -39,21 +68,21 @@ declare class NotifierController {
|
|
|
39
68
|
*
|
|
40
69
|
* @returns {Promise}
|
|
41
70
|
*/
|
|
42
|
-
notifyUser(room: string, request:
|
|
71
|
+
notifyUser(room: string, request: KuzzleRequest, scope: RealtimeUsers, content: JSONObject): Promise<void>;
|
|
43
72
|
/**
|
|
44
73
|
* Send a "token expired" notification to the target user
|
|
45
74
|
*
|
|
46
75
|
* @param {string} connectionId - User's connection identifier
|
|
47
76
|
* @returns {Promise}
|
|
48
77
|
*/
|
|
49
|
-
notifyTokenExpired(connectionId: string): Promise<
|
|
78
|
+
notifyTokenExpired(connectionId: string): Promise<void>;
|
|
50
79
|
/**
|
|
51
80
|
* Publish the content of the provided request to listening subscribers
|
|
52
81
|
*
|
|
53
82
|
* @param {Request} request
|
|
54
83
|
* @returns {Promise.<Object>}
|
|
55
84
|
*/
|
|
56
|
-
publish(request:
|
|
85
|
+
publish(request: KuzzleRequest): Promise<void> | Bluebird<null>;
|
|
57
86
|
/**
|
|
58
87
|
* Notify about a created document
|
|
59
88
|
*
|
|
@@ -61,7 +90,7 @@ declare class NotifierController {
|
|
|
61
90
|
* @param {DocumentChanges} document created
|
|
62
91
|
* @returns {Promise.<Array.<string>>} list of matched rooms
|
|
63
92
|
*/
|
|
64
|
-
notifyDocumentCreate(request:
|
|
93
|
+
notifyDocumentCreate(request: KuzzleRequest, document: DocumentChanges): Promise<string[]>;
|
|
65
94
|
/**
|
|
66
95
|
* Notify about a replaced document
|
|
67
96
|
*
|
|
@@ -70,7 +99,7 @@ declare class NotifierController {
|
|
|
70
99
|
* @param {string} cache notification content for that document
|
|
71
100
|
* @returns {Promise.<Array.<string>} list of matched rooms
|
|
72
101
|
*/
|
|
73
|
-
notifyDocumentReplace(request:
|
|
102
|
+
notifyDocumentReplace(request: KuzzleRequest, document: DocumentChanges, cache?: string | null): Promise<string[]>;
|
|
74
103
|
/**
|
|
75
104
|
* Computes document notifications and sends them to subscribed users.
|
|
76
105
|
* @param {Request} request
|
|
@@ -78,7 +107,7 @@ declare class NotifierController {
|
|
|
78
107
|
* @param {Array.<DocumentChanges>} documents
|
|
79
108
|
* @return {Promise}
|
|
80
109
|
*/
|
|
81
|
-
notifyDocuments(request:
|
|
110
|
+
notifyDocuments(request: KuzzleRequest, action: NotifyAction, documents: DocumentChanges[]): Promise<void>;
|
|
82
111
|
/**
|
|
83
112
|
* Notify rooms on a document update
|
|
84
113
|
* @param {Request} request
|
|
@@ -86,7 +115,7 @@ declare class NotifierController {
|
|
|
86
115
|
* @param {string} cache notification content for that document
|
|
87
116
|
* @returns {Promise.<Array.<string>} list of matched rooms
|
|
88
117
|
*/
|
|
89
|
-
notifyDocumentUpdate(request:
|
|
118
|
+
notifyDocumentUpdate(request: KuzzleRequest, document: DocumentChanges, cache?: string | null): Promise<string[]>;
|
|
90
119
|
/**
|
|
91
120
|
* Notify about a document deletion
|
|
92
121
|
*
|
|
@@ -94,7 +123,7 @@ declare class NotifierController {
|
|
|
94
123
|
* @param {DocumentChanges} document
|
|
95
124
|
* @returns {Promise.<Array>} returns an empty array ("no room match anymore")
|
|
96
125
|
*/
|
|
97
|
-
notifyDocumentDelete(request:
|
|
126
|
+
notifyDocumentDelete(request: KuzzleRequest, document: DocumentChanges): Promise<string[]>;
|
|
98
127
|
/**
|
|
99
128
|
* Trigger a notify global event and, if accepted by plugins,
|
|
100
129
|
* dispatch the payload to subscribers
|
|
@@ -107,7 +136,7 @@ declare class NotifierController {
|
|
|
107
136
|
*
|
|
108
137
|
* @returns {Promise}
|
|
109
138
|
*/
|
|
110
|
-
_dispatch(event:
|
|
139
|
+
_dispatch(event: string, channels: string[], notification: unknown, connectionId?: string): Promise<void>;
|
|
111
140
|
/**
|
|
112
141
|
* Broadcasts a notification about a document change or a
|
|
113
142
|
* real-time message.
|
|
@@ -125,7 +154,9 @@ declare class NotifierController {
|
|
|
125
154
|
*
|
|
126
155
|
* @returns {Promise}
|
|
127
156
|
*/
|
|
128
|
-
_notifyDocument(rooms:
|
|
157
|
+
_notifyDocument(rooms: string[], notification: DocumentNotificationType, { fromCluster }?: {
|
|
158
|
+
fromCluster?: boolean;
|
|
159
|
+
}): Promise<void>;
|
|
129
160
|
/**
|
|
130
161
|
* Broadcast a notification about a user entering or leaving
|
|
131
162
|
* the provided room
|
|
@@ -136,7 +167,9 @@ declare class NotifierController {
|
|
|
136
167
|
*
|
|
137
168
|
* @returns {Promise}
|
|
138
169
|
*/
|
|
139
|
-
_notifyUser(room: string, notification:
|
|
170
|
+
_notifyUser(room: string, notification: UserNotificationType, { fromCluster }?: {
|
|
171
|
+
fromCluster?: boolean;
|
|
172
|
+
}): Promise<void>;
|
|
140
173
|
/**
|
|
141
174
|
* DRYification for calls to Koncorde's test method from a Request object
|
|
142
175
|
* @param {Request} request
|
|
@@ -145,27 +178,6 @@ declare class NotifierController {
|
|
|
145
178
|
*
|
|
146
179
|
* @returns {Array.<string>}
|
|
147
180
|
*/
|
|
148
|
-
_test(request:
|
|
181
|
+
_test(request: KuzzleRequest, source?: JSONObject | null, id?: string | null): string[];
|
|
149
182
|
}
|
|
150
|
-
|
|
151
|
-
export { DocumentChanges };
|
|
152
|
-
}
|
|
153
|
-
type DocumentChanges = {
|
|
154
|
-
/**
|
|
155
|
-
* of the document
|
|
156
|
-
*/
|
|
157
|
-
_id: string;
|
|
158
|
-
/**
|
|
159
|
-
* of the document
|
|
160
|
-
*/
|
|
161
|
-
_source?: any;
|
|
162
|
-
/**
|
|
163
|
-
* applied to the document (for updates)
|
|
164
|
-
*/
|
|
165
|
-
_updatedFields?: any;
|
|
166
|
-
/**
|
|
167
|
-
* -- tells if this is a CREATE or REPLACE
|
|
168
|
-
* (for actionEnum.WRITE)
|
|
169
|
-
*/
|
|
170
|
-
created?: boolean;
|
|
171
|
-
};
|
|
183
|
+
export = NotifierController;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*
|
|
2
3
|
* Kuzzle, a backend software, self-hostable and ready to use
|
|
3
4
|
* to power modern apps
|
|
@@ -18,13 +19,43 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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]; } };
|
|
27
|
+
}
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
+
};
|
|
48
|
+
const lodash_1 = require("lodash");
|
|
49
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
50
|
+
const kerror = __importStar(require("../../kerror"));
|
|
51
|
+
const actionEnum_1 = __importDefault(require("./actionEnum"));
|
|
52
|
+
const koncordeCompat_1 = require("../../util/koncordeCompat");
|
|
53
|
+
require("../../types/Global");
|
|
54
|
+
// The barrel ships `export = { ... }`: a named import cannot target that
|
|
55
|
+
// (TS2497), but a default one can under `esModuleInterop` — and it also loads
|
|
56
|
+
// under vitest, which `import x = require(...)` does not (step 07, PR G2).
|
|
57
|
+
const notification_1 = __importDefault(require("./notification"));
|
|
58
|
+
const { DocumentNotification, ServerNotification, UserNotification } = notification_1.default;
|
|
28
59
|
/**
|
|
29
60
|
* Notification are meant to be dispatched on "channels" created when subscribing.
|
|
30
61
|
* But some notification like TokenExpired don't have a specific channel to be received on,
|
|
@@ -159,7 +190,7 @@ class NotifierController {
|
|
|
159
190
|
publish(request) {
|
|
160
191
|
const rooms = this._test(request);
|
|
161
192
|
if (rooms.length === 0) {
|
|
162
|
-
return
|
|
193
|
+
return bluebird_1.default.resolve(null);
|
|
163
194
|
}
|
|
164
195
|
return this.notifyDocument(rooms, request, "in", "publish", {
|
|
165
196
|
_id: request.input.args._id,
|
|
@@ -194,7 +225,7 @@ class NotifierController {
|
|
|
194
225
|
await this.notifyDocument(rooms, request, "in", "replace", document);
|
|
195
226
|
}
|
|
196
227
|
if (cache !== null) {
|
|
197
|
-
const stopListening = difference(JSON.parse(cache), rooms);
|
|
228
|
+
const stopListening = (0, lodash_1.difference)(JSON.parse(cache), rooms);
|
|
198
229
|
await this.notifyDocument(stopListening, request, "out", "replace", document);
|
|
199
230
|
}
|
|
200
231
|
return rooms;
|
|
@@ -208,9 +239,9 @@ class NotifierController {
|
|
|
208
239
|
*/
|
|
209
240
|
async notifyDocuments(request, action, documents) {
|
|
210
241
|
const prefix = getCachePrefix(request);
|
|
211
|
-
let cached = action ===
|
|
242
|
+
let cached = action === actionEnum_1.default.REPLACE || action === actionEnum_1.default.UPDATE;
|
|
212
243
|
const cacheIds = documents.map((doc) => {
|
|
213
|
-
if ((action ===
|
|
244
|
+
if ((action === actionEnum_1.default.WRITE || action === actionEnum_1.default.UPSERT) &&
|
|
214
245
|
!cached) {
|
|
215
246
|
cached = doc.created !== true; // force a bool value if undefined
|
|
216
247
|
}
|
|
@@ -219,21 +250,21 @@ class NotifierController {
|
|
|
219
250
|
const cache = cached
|
|
220
251
|
? await global.kuzzle.ask("core:cache:internal:mget", cacheIds)
|
|
221
252
|
: [];
|
|
222
|
-
const result = await
|
|
253
|
+
const result = await bluebird_1.default.map(documents, (doc, index) => {
|
|
223
254
|
switch (action) {
|
|
224
|
-
case
|
|
255
|
+
case actionEnum_1.default.CREATE:
|
|
225
256
|
return this.notifyDocumentCreate(request, doc);
|
|
226
|
-
case
|
|
257
|
+
case actionEnum_1.default.DELETE:
|
|
227
258
|
return this.notifyDocumentDelete(request, doc);
|
|
228
|
-
case
|
|
259
|
+
case actionEnum_1.default.REPLACE:
|
|
229
260
|
return this.notifyDocumentReplace(request, doc, cache[index]);
|
|
230
|
-
case
|
|
261
|
+
case actionEnum_1.default.UPDATE:
|
|
231
262
|
return this.notifyDocumentUpdate(request, doc, cache[index]);
|
|
232
|
-
case
|
|
263
|
+
case actionEnum_1.default.UPSERT:
|
|
233
264
|
return doc.created
|
|
234
265
|
? this.notifyDocumentCreate(request, doc)
|
|
235
266
|
: this.notifyDocumentUpdate(request, doc, cache[index]);
|
|
236
|
-
case
|
|
267
|
+
case actionEnum_1.default.WRITE:
|
|
237
268
|
return doc.created
|
|
238
269
|
? this.notifyDocumentCreate(request, doc)
|
|
239
270
|
: this.notifyDocumentReplace(request, doc, cache[index]);
|
|
@@ -242,11 +273,15 @@ class NotifierController {
|
|
|
242
273
|
}
|
|
243
274
|
});
|
|
244
275
|
const toDelete = [];
|
|
245
|
-
|
|
276
|
+
// Walk the ids, not the results: `cacheIds`, `documents` and `result` are
|
|
277
|
+
// the same length by construction, and this is the array whose element the
|
|
278
|
+
// body needs non-optionally.
|
|
279
|
+
await bluebird_1.default.map(cacheIds, (cacheId, index) => {
|
|
280
|
+
const rooms = result[index] ?? [];
|
|
246
281
|
if (rooms.length > 0) {
|
|
247
|
-
return global.kuzzle.ask("core:cache:internal:store",
|
|
282
|
+
return global.kuzzle.ask("core:cache:internal:store", cacheId, JSON.stringify(rooms), { ttl: this.ttl });
|
|
248
283
|
}
|
|
249
|
-
toDelete.push(
|
|
284
|
+
toDelete.push(cacheId);
|
|
250
285
|
return null;
|
|
251
286
|
});
|
|
252
287
|
if (toDelete.length > 0) {
|
|
@@ -266,7 +301,7 @@ class NotifierController {
|
|
|
266
301
|
await this.notifyDocument(rooms, request, "in", "update", document);
|
|
267
302
|
}
|
|
268
303
|
if (cache !== null) {
|
|
269
|
-
const stopListening = difference(JSON.parse(cache), rooms);
|
|
304
|
+
const stopListening = (0, lodash_1.difference)(JSON.parse(cache), rooms);
|
|
270
305
|
await this.notifyDocument(stopListening, request, "out", "update", document);
|
|
271
306
|
}
|
|
272
307
|
return rooms;
|
|
@@ -353,7 +388,7 @@ class NotifierController {
|
|
|
353
388
|
}
|
|
354
389
|
}
|
|
355
390
|
if (channels.length === 0) {
|
|
356
|
-
return
|
|
391
|
+
return bluebird_1.default.resolve();
|
|
357
392
|
}
|
|
358
393
|
return this._dispatch("notify:document", channels, notification);
|
|
359
394
|
}
|
|
@@ -380,7 +415,7 @@ class NotifierController {
|
|
|
380
415
|
}
|
|
381
416
|
}
|
|
382
417
|
if (channels.length === 0) {
|
|
383
|
-
return
|
|
418
|
+
return bluebird_1.default.resolve();
|
|
384
419
|
}
|
|
385
420
|
return this._dispatch("notify:user", channels, notification);
|
|
386
421
|
}
|
|
@@ -393,7 +428,7 @@ class NotifierController {
|
|
|
393
428
|
* @returns {Array.<string>}
|
|
394
429
|
*/
|
|
395
430
|
_test(request, source = null, id = null) {
|
|
396
|
-
return koncordeTest(global.kuzzle.koncorde, request.input.args.index, request.input.args.collection, source || request.input.body || {}, id || request.input.args._id);
|
|
431
|
+
return (0, koncordeCompat_1.koncordeTest)(global.kuzzle.koncorde, request.input.args.index, request.input.args.collection, source || request.input.body || {}, id || request.input.args._id);
|
|
397
432
|
}
|
|
398
433
|
}
|
|
399
434
|
function getCachePrefix(request) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { JSONObject } from "
|
|
1
|
+
import type { JSONObject } from "../../types/JSONObject";
|
|
2
2
|
/**
|
|
3
3
|
* Represents a realtime subscription of a connection to a room.
|
|
4
4
|
*
|
|
@@ -17,9 +17,14 @@ export declare class Subscription {
|
|
|
17
17
|
roomId: string;
|
|
18
18
|
index: string;
|
|
19
19
|
collection: string;
|
|
20
|
-
filters: JSONObject;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
filters: JSONObject | undefined;
|
|
21
|
+
/** Null for an anonymous subscription — `user._id` is what fills it. */
|
|
22
|
+
kuid: string | null;
|
|
23
|
+
constructor(index: string, collection: string,
|
|
24
|
+
/** Absent for an unsubscribe, which reports the room it left, not a filter. */
|
|
25
|
+
filters: JSONObject | undefined, roomId: string, connectionId: string,
|
|
26
|
+
/** Absent or null when the connection carried no user — `kuid` is then null. */
|
|
27
|
+
user?: {
|
|
28
|
+
_id: string | null;
|
|
29
|
+
} | null);
|
|
25
30
|
}
|
|
@@ -35,7 +35,11 @@ exports.Subscription = void 0;
|
|
|
35
35
|
* @property kuid
|
|
36
36
|
*/
|
|
37
37
|
class Subscription {
|
|
38
|
-
constructor(index, collection,
|
|
38
|
+
constructor(index, collection,
|
|
39
|
+
/** Absent for an unsubscribe, which reports the room it left, not a filter. */
|
|
40
|
+
filters, roomId, connectionId,
|
|
41
|
+
/** Absent or null when the connection carried no user — `kuid` is then null. */
|
|
42
|
+
user) {
|
|
39
43
|
this.connectionId = connectionId;
|
|
40
44
|
this.roomId = roomId;
|
|
41
45
|
this.index = index;
|
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
import RoleRepository from "./roleRepository";
|
|
2
|
+
import { ProfileRepository } from "./profileRepository";
|
|
3
|
+
import { TokenRepository } from "./tokenRepository";
|
|
4
|
+
import UserRepository from "./userRepository";
|
|
5
|
+
import SecurityLoader from "./securityLoader";
|
|
6
|
+
/**
|
|
7
|
+
* Wires the security repositories together and initialises them in order.
|
|
8
|
+
*
|
|
9
|
+
* The repositories that reach a sibling (`role` -> `profile`, `user` ->
|
|
10
|
+
* `profile`/`token`) receive this module; the token repository and the loader
|
|
11
|
+
* do not, and their constructors take no argument.
|
|
12
|
+
*/
|
|
2
13
|
declare class SecurityModule {
|
|
3
14
|
role: RoleRepository;
|
|
4
15
|
profile: ProfileRepository;
|
|
5
16
|
token: TokenRepository;
|
|
6
17
|
user: UserRepository;
|
|
7
18
|
loader: SecurityLoader;
|
|
19
|
+
constructor();
|
|
8
20
|
init(): Promise<void>;
|
|
9
21
|
}
|
|
10
|
-
|
|
11
|
-
import { ProfileRepository } from "./profileRepository";
|
|
12
|
-
import { TokenRepository } from "./tokenRepository";
|
|
13
|
-
import UserRepository = require("./userRepository");
|
|
14
|
-
import SecurityLoader = require("./securityLoader");
|
|
22
|
+
export = SecurityModule;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*
|
|
2
3
|
* Kuzzle, a backend software, self-hostable and ready to use
|
|
3
4
|
* to power modern apps
|
|
@@ -18,25 +19,38 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
22
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
|
+
};
|
|
25
|
+
const roleRepository_1 = __importDefault(require("./roleRepository"));
|
|
26
|
+
const profileRepository_1 = require("./profileRepository");
|
|
27
|
+
const tokenRepository_1 = require("./tokenRepository");
|
|
28
|
+
const userRepository_1 = __importDefault(require("./userRepository"));
|
|
29
|
+
const securityLoader_1 = __importDefault(require("./securityLoader"));
|
|
30
|
+
/**
|
|
31
|
+
* Wires the security repositories together and initialises them in order.
|
|
32
|
+
*
|
|
33
|
+
* The repositories that reach a sibling (`role` -> `profile`, `user` ->
|
|
34
|
+
* `profile`/`token`) receive this module; the token repository and the loader
|
|
35
|
+
* do not, and their constructors take no argument.
|
|
36
|
+
*/
|
|
27
37
|
class SecurityModule {
|
|
28
38
|
constructor() {
|
|
29
|
-
this.role = new
|
|
30
|
-
this.profile = new ProfileRepository(this);
|
|
31
|
-
this.token = new TokenRepository();
|
|
32
|
-
this.user = new
|
|
33
|
-
this.loader = new
|
|
39
|
+
this.role = new roleRepository_1.default(this);
|
|
40
|
+
this.profile = new profileRepository_1.ProfileRepository(this);
|
|
41
|
+
this.token = new tokenRepository_1.TokenRepository();
|
|
42
|
+
this.user = new userRepository_1.default(this);
|
|
43
|
+
this.loader = new securityLoader_1.default();
|
|
34
44
|
}
|
|
35
45
|
async init() {
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
// `role.init()` and `profile.init()` are synchronous: they only register
|
|
47
|
+
// `onAsk` handlers.
|
|
48
|
+
this.role.init();
|
|
49
|
+
this.profile.init();
|
|
38
50
|
await this.token.init();
|
|
39
51
|
await this.user.init();
|
|
52
|
+
// Last: the loader replays security fixtures through the API, so every
|
|
53
|
+
// repository it writes through must already be up.
|
|
40
54
|
await this.loader.init();
|
|
41
55
|
}
|
|
42
56
|
}
|