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
|
@@ -59,7 +59,6 @@ const TIMEOUT_MAX = Math.pow(2, 31) - 1;
|
|
|
59
59
|
*/
|
|
60
60
|
class TokenManager {
|
|
61
61
|
constructor() {
|
|
62
|
-
this.anonymousUserId = null;
|
|
63
62
|
/**
|
|
64
63
|
* Map<connectionId, ManagedToken>
|
|
65
64
|
*/
|
|
@@ -99,9 +98,21 @@ class TokenManager {
|
|
|
99
98
|
this.removeConnection(connection.id).catch((err) => this.logger.info(err));
|
|
100
99
|
});
|
|
101
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* The managed token filed under `idx`, or undefined when none is.
|
|
103
|
+
*
|
|
104
|
+
* `search` answers a position or `-1`, and indexing `array` with it is
|
|
105
|
+
* `| undefined` for every position under `noUncheckedIndexedAccess` — so the
|
|
106
|
+
* callers test one value rather than a position and then an element.
|
|
107
|
+
*/
|
|
108
|
+
find(idx) {
|
|
109
|
+
const pos = this.tokens.search({ idx });
|
|
110
|
+
return pos === -1 ? undefined : this.tokens.array[pos];
|
|
111
|
+
}
|
|
102
112
|
runTimer() {
|
|
103
|
-
|
|
104
|
-
|
|
113
|
+
const next = this.tokens.array[0];
|
|
114
|
+
if (next !== undefined) {
|
|
115
|
+
const delay = Math.min((next.expiresAt ?? 0) - Date.now(), TIMEOUT_MAX);
|
|
105
116
|
if (this.timer) {
|
|
106
117
|
clearTimeout(this.timer);
|
|
107
118
|
}
|
|
@@ -127,13 +138,12 @@ class TokenManager {
|
|
|
127
138
|
}
|
|
128
139
|
this.removeConnectionLinkedToToken(connectionId, currentToken);
|
|
129
140
|
}
|
|
130
|
-
const
|
|
131
|
-
if (
|
|
141
|
+
const managedToken = this.find(idx);
|
|
142
|
+
if (managedToken === undefined) {
|
|
132
143
|
this.add(token, new Set([connectionId]));
|
|
133
144
|
this.logger.trace(`connection "${connectionId}" from user "${token.userId}" linked to a new token`);
|
|
134
145
|
}
|
|
135
146
|
else {
|
|
136
|
-
const managedToken = this.tokens.array[pos];
|
|
137
147
|
managedToken.connectionIds.add(connectionId);
|
|
138
148
|
this.tokensByConnection.set(connectionId, managedToken);
|
|
139
149
|
this.logger.trace(`connection "${connectionId}" from user "${token.userId}" linked to existing token`);
|
|
@@ -145,6 +155,12 @@ class TokenManager {
|
|
|
145
155
|
* @param token
|
|
146
156
|
* @param connectionId
|
|
147
157
|
*/
|
|
158
|
+
/**
|
|
159
|
+
* `Token | null`: a request whose connection never authenticated carries no
|
|
160
|
+
* token, and the trace below is the deliberate answer to that. The
|
|
161
|
+
* non-nullable parameter made `authController.logout` — the one caller —
|
|
162
|
+
* look like it had checked.
|
|
163
|
+
*/
|
|
148
164
|
unlink(token, connectionId) {
|
|
149
165
|
if (!token) {
|
|
150
166
|
this.logger.trace(`tried to unlink connection "${connectionId}" with no token`);
|
|
@@ -155,12 +171,12 @@ class TokenManager {
|
|
|
155
171
|
return;
|
|
156
172
|
}
|
|
157
173
|
const idx = ManagedToken.indexFor(token);
|
|
158
|
-
const
|
|
159
|
-
if (
|
|
174
|
+
const managedToken = this.find(idx);
|
|
175
|
+
if (managedToken === undefined) {
|
|
160
176
|
this.logger.trace(`tried to unlink connection "${connectionId}" with no token associated`);
|
|
161
177
|
return;
|
|
162
178
|
}
|
|
163
|
-
this.removeConnectionLinkedToToken(connectionId,
|
|
179
|
+
this.removeConnectionLinkedToToken(connectionId, managedToken);
|
|
164
180
|
const currentToken = this.tokensByConnection.get(connectionId);
|
|
165
181
|
if (currentToken && currentToken._id === token._id) {
|
|
166
182
|
this.tokensByConnection.delete(connectionId);
|
|
@@ -194,8 +210,8 @@ class TokenManager {
|
|
|
194
210
|
}
|
|
195
211
|
const idx = ManagedToken.indexFor(token);
|
|
196
212
|
const searchResult = this.tokens.search({ idx });
|
|
197
|
-
|
|
198
|
-
|
|
213
|
+
const managedToken = this.tokens.array[searchResult];
|
|
214
|
+
if (managedToken !== undefined) {
|
|
199
215
|
for (const connectionId of managedToken.connectionIds) {
|
|
200
216
|
this.tokensByConnection.delete(connectionId);
|
|
201
217
|
await global.kuzzle.ask("core:realtime:connection:remove", connectionId);
|
|
@@ -220,8 +236,9 @@ class TokenManager {
|
|
|
220
236
|
// within the same second) but, oh, well... it costs nothing to fix a
|
|
221
237
|
// potentially very, very, very hard to debug random problem before it
|
|
222
238
|
// occurs
|
|
223
|
-
|
|
224
|
-
|
|
239
|
+
const managedToken = pos === -1 ? undefined : this.tokens.array[pos];
|
|
240
|
+
if (managedToken !== undefined && oldToken._id !== newToken._id) {
|
|
241
|
+
const connectionIds = managedToken.connectionIds;
|
|
225
242
|
this.add(newToken, connectionIds);
|
|
226
243
|
// Delete old token
|
|
227
244
|
this.deleteByIndex(pos);
|
|
@@ -230,11 +247,13 @@ class TokenManager {
|
|
|
230
247
|
}
|
|
231
248
|
async checkTokensValidity() {
|
|
232
249
|
const arr = this.tokens.array;
|
|
250
|
+
const first = arr[0];
|
|
233
251
|
// API key can never expire (-1)
|
|
234
|
-
if (
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
252
|
+
if (first !== undefined &&
|
|
253
|
+
first.expiresAt !== null &&
|
|
254
|
+
first.expiresAt > 0 &&
|
|
255
|
+
first.expiresAt < Date.now()) {
|
|
256
|
+
const managedToken = first;
|
|
238
257
|
arr.shift();
|
|
239
258
|
for (const connectionId of managedToken.connectionIds) {
|
|
240
259
|
await global.kuzzle.ask("core:realtime:tokenExpired:notify", connectionId);
|
|
@@ -248,9 +267,18 @@ class TokenManager {
|
|
|
248
267
|
}
|
|
249
268
|
}
|
|
250
269
|
/**
|
|
251
|
-
* Gets the token matching user & connection if any
|
|
270
|
+
* Gets the token matching user & connection if any.
|
|
271
|
+
*
|
|
272
|
+
* `string | null` on both: this is a query, and a request that carries
|
|
273
|
+
* neither a connection nor a stored user is answered — `null` misses the
|
|
274
|
+
* map, and a null kuid matches no token's `userId` — rather than being a
|
|
275
|
+
* caller error. `authController.login` asks it of every login, including
|
|
276
|
+
* the ones where the strategy has not yet produced either.
|
|
252
277
|
*/
|
|
253
278
|
getConnectedUserToken(userId, connectionId) {
|
|
279
|
+
if (connectionId === null) {
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
254
282
|
const token = this.tokensByConnection.get(connectionId);
|
|
255
283
|
return token && token.userId === userId ? token : null;
|
|
256
284
|
}
|
|
@@ -279,7 +307,7 @@ class TokenManager {
|
|
|
279
307
|
this.tokensByConnection.set(connectionId, orderedToken);
|
|
280
308
|
}
|
|
281
309
|
this.tokens.insert(orderedToken);
|
|
282
|
-
if (this.tokens.array[0]
|
|
310
|
+
if (this.tokens.array[0]?.idx === orderedToken.idx) {
|
|
283
311
|
this.runTimer();
|
|
284
312
|
}
|
|
285
313
|
this.logger.trace(`token from user ${token.userId} linked to connections ${Array.from(connectionIds)}`);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import Kuzzle from "../../kuzzle/kuzzle";
|
|
2
|
-
import { Backend } from "./index";
|
|
1
|
+
import type Kuzzle from "../../kuzzle/kuzzle";
|
|
2
|
+
import type { Backend } from "./index";
|
|
3
3
|
export declare class ApplicationManager {
|
|
4
4
|
protected _application: any;
|
|
5
5
|
constructor(application: Backend);
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
import { JSONObject } from "
|
|
1
|
+
import type { JSONObject } from "../../types/JSONObject";
|
|
2
2
|
import { EmbeddedSDK } from "../shared/sdk/embeddedSdk";
|
|
3
|
-
import { EventDefinition } from "../../../index";
|
|
3
|
+
import type { EventDefinition } from "../../../index";
|
|
4
4
|
import { BackendCluster, BackendConfig, BackendController, BackendHook, BackendImport, BackendPipe, BackendPlugin, BackendStorage, BackendVault, BackendOpenApi, BackendErrors, BackendSubscription } from "./index";
|
|
5
5
|
import { Logger } from "../../kuzzle/Logger";
|
|
6
|
+
import Plugin from "../plugin/plugin";
|
|
6
7
|
export declare class Backend {
|
|
7
8
|
private _kuzzle;
|
|
8
9
|
private _name;
|
|
10
|
+
/**
|
|
11
|
+
* Both are defined with `Reflect.defineProperty` in the constructor, so
|
|
12
|
+
* that they stay off the enumerable surface a plugin sees; the compiler
|
|
13
|
+
* does not read that as an initialisation.
|
|
14
|
+
*/
|
|
9
15
|
private _sdk;
|
|
10
16
|
private _started;
|
|
11
|
-
protected _pipes:
|
|
17
|
+
protected _pipes: Record<string, Array<() => Promise<void>>>;
|
|
12
18
|
protected _hooks: {};
|
|
13
19
|
protected _controllers: {};
|
|
14
20
|
protected _plugins: {};
|
|
@@ -28,9 +34,14 @@ export declare class Backend {
|
|
|
28
34
|
handler: () => void;
|
|
29
35
|
}>;
|
|
30
36
|
/**
|
|
31
|
-
*
|
|
37
|
+
* The `Plugin` wrapper class, held on the instance rather than imported at
|
|
38
|
+
* use site — see the `Reflect.defineProperty` in the constructor.
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* Defined with `Reflect.defineProperty` below, for the same reason as
|
|
42
|
+
* `_kuzzle` and `_sdk`.
|
|
32
43
|
*/
|
|
33
|
-
protected PluginObject:
|
|
44
|
+
protected PluginObject: typeof Plugin;
|
|
34
45
|
/**
|
|
35
46
|
* Application version
|
|
36
47
|
*/
|
|
@@ -54,6 +54,7 @@ const kerror = __importStar(require("../../kerror"));
|
|
|
54
54
|
const index_1 = require("../../../index");
|
|
55
55
|
const index_2 = require("./index");
|
|
56
56
|
const Logger_1 = require("../../kuzzle/Logger");
|
|
57
|
+
const plugin_1 = __importDefault(require("../plugin/plugin"));
|
|
57
58
|
const assertionError = kerror.wrap("plugin", "assert");
|
|
58
59
|
const runtimeError = kerror.wrap("plugin", "runtime");
|
|
59
60
|
let _app = null;
|
|
@@ -80,6 +81,7 @@ class Backend {
|
|
|
80
81
|
* @param name - Your application name
|
|
81
82
|
*/
|
|
82
83
|
constructor(name) {
|
|
84
|
+
this._started = false;
|
|
83
85
|
this._pipes = {};
|
|
84
86
|
this._hooks = {};
|
|
85
87
|
this._controllers = {};
|
|
@@ -93,6 +95,10 @@ class Backend {
|
|
|
93
95
|
users: {},
|
|
94
96
|
};
|
|
95
97
|
this._installationsWaitingList = [];
|
|
98
|
+
/**
|
|
99
|
+
* Application version
|
|
100
|
+
*/
|
|
101
|
+
this.version = "";
|
|
96
102
|
/**
|
|
97
103
|
* Current Git commit (if available)
|
|
98
104
|
*/
|
|
@@ -107,13 +113,10 @@ class Backend {
|
|
|
107
113
|
*
|
|
108
114
|
*/
|
|
109
115
|
this._support = {};
|
|
110
|
-
/**
|
|
111
|
-
* Requiring the PluginObject on module top level creates cyclic dependency
|
|
112
|
-
*/
|
|
113
116
|
Reflect.defineProperty(this, "PluginObject", {
|
|
114
|
-
value:
|
|
117
|
+
value: plugin_1.default,
|
|
115
118
|
});
|
|
116
|
-
if (!
|
|
119
|
+
if (!plugin_1.default.checkName(name)) {
|
|
117
120
|
throw assertionError.get("invalid_application_name", name);
|
|
118
121
|
}
|
|
119
122
|
this._name = name;
|
|
@@ -145,7 +148,7 @@ class Backend {
|
|
|
145
148
|
const info = JSON.parse(node_fs_1.default.readFileSync("./package.json", "utf8"));
|
|
146
149
|
this.version = info.version;
|
|
147
150
|
}
|
|
148
|
-
catch
|
|
151
|
+
catch {
|
|
149
152
|
// Silent if no version can be found
|
|
150
153
|
}
|
|
151
154
|
global.app = this;
|
|
@@ -286,7 +289,12 @@ class Backend {
|
|
|
286
289
|
if (!node_fs_1.default.statSync(gitDir).isDirectory()) {
|
|
287
290
|
return null;
|
|
288
291
|
}
|
|
292
|
+
// A detached HEAD holds the hash itself, with no "ref: " prefix: there is
|
|
293
|
+
// no ref file to follow, and the split answered undefined for it.
|
|
289
294
|
const ref = node_fs_1.default.readFileSync(`${dir}/.git/HEAD`, "utf8").split("ref: ")[1];
|
|
295
|
+
if (ref === undefined) {
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
290
298
|
const refFile = `${dir}/.git/${ref}`.replace("\n", "");
|
|
291
299
|
if (!node_fs_1.default.existsSync(refFile)) {
|
|
292
300
|
return null;
|
|
@@ -1,10 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import type { Backend } from "./index";
|
|
2
|
+
import { ApplicationManager } from "./index";
|
|
3
|
+
import type { IKuzzleConfiguration, KuzzleConfigurationOverrides } from "../../types/config/KuzzleConfiguration";
|
|
4
|
+
/**
|
|
5
|
+
* `content` is declared here, as an accessor pair, rather than as a field of
|
|
6
|
+
* the class: read, it is the whole configuration, which it is once loaded;
|
|
7
|
+
* assigned, it takes a `Partial` one, which is what v2.56.0 declared it as.
|
|
8
|
+
* Code compiled against that assigns one, and must still compile; reads no
|
|
9
|
+
* longer need `?.` at every level. At runtime it is the plain property the
|
|
10
|
+
* constructor assigns, as it always was — an interface adds no accessor.
|
|
11
|
+
*/
|
|
12
|
+
export interface BackendConfig {
|
|
4
13
|
/**
|
|
5
14
|
* Configuration content.
|
|
6
15
|
*/
|
|
7
|
-
content:
|
|
16
|
+
get content(): IKuzzleConfiguration;
|
|
17
|
+
set content(content: Partial<IKuzzleConfiguration>);
|
|
18
|
+
}
|
|
19
|
+
export declare class BackendConfig extends ApplicationManager {
|
|
8
20
|
constructor(application: Backend);
|
|
9
21
|
/**
|
|
10
22
|
* Sets a configuration value
|
|
@@ -22,5 +34,5 @@ export declare class BackendConfig extends ApplicationManager {
|
|
|
22
34
|
*
|
|
23
35
|
* @param config - Configuration object to merge
|
|
24
36
|
*/
|
|
25
|
-
merge(config:
|
|
37
|
+
merge(config: KuzzleConfigurationOverrides): void;
|
|
26
38
|
}
|
|
@@ -52,6 +52,7 @@ const kerror = __importStar(require("../../kerror"));
|
|
|
52
52
|
const index_1 = require("./index");
|
|
53
53
|
const index_2 = require("../../config/index");
|
|
54
54
|
const runtimeError = kerror.wrap("plugin", "runtime");
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging -- see the interface above
|
|
55
56
|
class BackendConfig extends index_1.ApplicationManager {
|
|
56
57
|
constructor(application) {
|
|
57
58
|
super(application);
|
|
@@ -159,7 +159,14 @@ class BackendController extends index_1.ApplicationManager {
|
|
|
159
159
|
// if the function handler is an instance method,
|
|
160
160
|
// bind the context to the controller instance
|
|
161
161
|
const handlerName = definition.handler.name;
|
|
162
|
-
|
|
162
|
+
// `Reflect.get`, not safeObject's `get`: a controller's actions are class
|
|
163
|
+
// methods and live on the prototype, which that helper deliberately does
|
|
164
|
+
// not read. Landed in an `unknown` so the reflective read's `any` goes no
|
|
165
|
+
// further than the `typeof` below.
|
|
166
|
+
const method = handlerName
|
|
167
|
+
? Reflect.get(controller, handlerName)
|
|
168
|
+
: undefined;
|
|
169
|
+
if (typeof method === "function") {
|
|
163
170
|
definition.handler = definition.handler.bind(controller);
|
|
164
171
|
}
|
|
165
172
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { KuzzleError } from "../../kerror/errors";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import type { KuzzleError } from "../../kerror/errors";
|
|
2
|
+
import * as kerror from "../../kerror";
|
|
3
|
+
import type { Backend } from "./index";
|
|
4
|
+
import { ApplicationManager } from "./index";
|
|
5
|
+
import type { CustomErrorDefinition } from "../../types";
|
|
4
6
|
export declare class BackendErrors extends ApplicationManager {
|
|
5
7
|
private domains;
|
|
6
8
|
constructor(application: Backend);
|
|
@@ -34,7 +36,7 @@ export declare class BackendErrors extends ApplicationManager {
|
|
|
34
36
|
*
|
|
35
37
|
* @returns Standardized KuzzleError
|
|
36
38
|
*/
|
|
37
|
-
get(domain: string, subDomain: string, name: string, ...placeholders:
|
|
39
|
+
get(domain: string, subDomain: string, name: string, ...placeholders: unknown[]): KuzzleError;
|
|
38
40
|
/**
|
|
39
41
|
* Get a standardized KuzzleError from an existing error to keep the stacktrace
|
|
40
42
|
*
|
|
@@ -46,16 +48,21 @@ export declare class BackendErrors extends ApplicationManager {
|
|
|
46
48
|
*
|
|
47
49
|
* @returns Standardized KuzzleError
|
|
48
50
|
*/
|
|
49
|
-
getFrom(source: Error, domain: string, subDomain: string, name: string, ...placeholders:
|
|
51
|
+
getFrom(source: Error, domain: string, subDomain: string, name: string, ...placeholders: unknown[]): KuzzleError;
|
|
50
52
|
/**
|
|
51
53
|
* Wrap an error manager on the domain and subDomain
|
|
52
54
|
*
|
|
53
55
|
* @param domain Domain name
|
|
54
56
|
* @param subDomain Subdomain to wrap to
|
|
57
|
+
*
|
|
58
|
+
* The error name is declared `unknown`, as v2.56.0's `any` accepted
|
|
59
|
+
* anything; one that is not a registered name gives
|
|
60
|
+
* `core.fatal.unexpected_error`, as it always has. Methods rather than
|
|
61
|
+
* function-typed properties, so that `kerror`'s `string`-typed ones fit.
|
|
55
62
|
*/
|
|
56
63
|
wrap(domain: string, subDomain: string): {
|
|
57
|
-
get
|
|
58
|
-
getFrom
|
|
59
|
-
reject
|
|
64
|
+
get(error: unknown, ...placeholders: unknown[]): KuzzleError;
|
|
65
|
+
getFrom(source: unknown, error: unknown, ...placeholders: unknown[]): KuzzleError;
|
|
66
|
+
reject(error: unknown, ...placeholders: unknown[]): ReturnType<typeof kerror.reject>;
|
|
60
67
|
};
|
|
61
68
|
}
|
|
@@ -118,6 +118,11 @@ class BackendErrors extends index_1.ApplicationManager {
|
|
|
118
118
|
*
|
|
119
119
|
* @param domain Domain name
|
|
120
120
|
* @param subDomain Subdomain to wrap to
|
|
121
|
+
*
|
|
122
|
+
* The error name is declared `unknown`, as v2.56.0's `any` accepted
|
|
123
|
+
* anything; one that is not a registered name gives
|
|
124
|
+
* `core.fatal.unexpected_error`, as it always has. Methods rather than
|
|
125
|
+
* function-typed properties, so that `kerror`'s `string`-typed ones fit.
|
|
121
126
|
*/
|
|
122
127
|
wrap(domain, subDomain) {
|
|
123
128
|
return kerror.rawWrap(this.domains, domain, subDomain);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { Backend } from "./index";
|
|
2
|
+
import { ApplicationManager } from "./index";
|
|
3
|
+
import type { OpenApiDefinition } from "../../types";
|
|
3
4
|
export declare class BackendOpenApi extends ApplicationManager {
|
|
4
5
|
/**
|
|
5
6
|
* Application Open API definition
|
|
@@ -63,7 +63,15 @@ class BackendPipe extends index_1.ApplicationManager {
|
|
|
63
63
|
throw assertionError.get("invalid_pipe", event);
|
|
64
64
|
}
|
|
65
65
|
if (this._application.started) {
|
|
66
|
-
|
|
66
|
+
const application = global.kuzzle.pluginsManager.application;
|
|
67
|
+
// `started` is set by `kuzzle.start`, which registers the application
|
|
68
|
+
// with the plugins manager before it flips: an application that is
|
|
69
|
+
// running and unknown to the manager cannot happen, and the error says
|
|
70
|
+
// which half is missing rather than handing `undefined` on.
|
|
71
|
+
if (application === undefined) {
|
|
72
|
+
throw runtimeError.get("unavailable_before_start", "pipe.register");
|
|
73
|
+
}
|
|
74
|
+
return global.kuzzle.pluginsManager.registerPipe(application, event, handler);
|
|
67
75
|
}
|
|
68
76
|
if (!this._application._pipes[event]) {
|
|
69
77
|
this._application._pipes[event] = [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { JSONObject } from "
|
|
2
|
-
import { Plugin } from "../../types";
|
|
1
|
+
import type { JSONObject } from "../../types/JSONObject";
|
|
2
|
+
import type { Plugin } from "../../types";
|
|
3
3
|
import { ApplicationManager } from "./index";
|
|
4
4
|
export declare class BackendPlugin extends ApplicationManager {
|
|
5
5
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { JSONObject } from "
|
|
2
|
-
import { Connection } from "../../api/request";
|
|
1
|
+
import type { JSONObject } from "../../types/JSONObject";
|
|
2
|
+
import type { Connection } from "../../api/request";
|
|
3
3
|
import { ApplicationManager } from "./index";
|
|
4
4
|
export declare class BackendSubscription extends ApplicationManager {
|
|
5
5
|
/**
|
|
@@ -35,6 +35,9 @@ class BackendVault extends index_1.ApplicationManager {
|
|
|
35
35
|
constructor() {
|
|
36
36
|
super(...arguments);
|
|
37
37
|
this.decrypted = false;
|
|
38
|
+
// Empty until `secrets` loads the vault. It is never read before that: the
|
|
39
|
+
// only `return this._secrets` is below the load.
|
|
40
|
+
this._secrets = {};
|
|
38
41
|
}
|
|
39
42
|
/**
|
|
40
43
|
* Secret key to decrypt encrypted secrets.
|
|
@@ -61,8 +64,12 @@ class BackendVault extends index_1.ApplicationManager {
|
|
|
61
64
|
// We need to load the secrets before Kuzzle start so we can use them
|
|
62
65
|
// in the configuration (e.g. configure ES X-Pack credentials)
|
|
63
66
|
if (!this._application.started && !this.decrypted) {
|
|
64
|
-
const kuzzleVault = vault_1.default.load(this._application._vaultKey, this._application._secretsFile);
|
|
67
|
+
const kuzzleVault = vault_1.default.load(this._application._vaultKey, this._application._secretsFile, this._application.config.content.vault.newAlgorithm);
|
|
65
68
|
this._secrets = kuzzleVault.secrets;
|
|
69
|
+
// `decrypted` was written once, at declaration, and never set — so this
|
|
70
|
+
// block re-decrypted the vault on every read before start, which is
|
|
71
|
+
// exactly what the flag exists to prevent.
|
|
72
|
+
this.decrypted = true;
|
|
66
73
|
}
|
|
67
74
|
if (this._application.started) {
|
|
68
75
|
return this._kuzzle.vault.secrets;
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
import Redis from "../../service/cache/redis";
|
|
2
|
+
import type { Logger } from "../../kuzzle/Logger";
|
|
3
|
+
import "../../types/Global";
|
|
2
4
|
declare class CacheEngine {
|
|
3
5
|
public: Redis;
|
|
4
6
|
internal: Redis;
|
|
5
|
-
logger:
|
|
7
|
+
logger: Logger;
|
|
8
|
+
constructor();
|
|
6
9
|
/**
|
|
7
10
|
* Initializes the redis clients
|
|
8
11
|
*
|
|
9
12
|
* @returns {Promise}
|
|
10
13
|
*/
|
|
11
|
-
init(): Promise<
|
|
14
|
+
init(): Promise<void>;
|
|
12
15
|
registerInternalEvents(): void;
|
|
13
16
|
registerPublicEvents(): void;
|
|
14
17
|
}
|
|
15
|
-
|
|
18
|
+
export = CacheEngine;
|
|
@@ -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,14 +19,17 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
|
+
};
|
|
25
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
26
|
+
const redis_1 = __importDefault(require("../../service/cache/redis"));
|
|
27
|
+
require("../../types/Global");
|
|
24
28
|
class CacheEngine {
|
|
25
29
|
constructor() {
|
|
26
30
|
const config = global.kuzzle.config.services;
|
|
27
|
-
this.public = new
|
|
28
|
-
this.internal = new
|
|
31
|
+
this.public = new redis_1.default(config.memoryStorage, "public_adapter");
|
|
32
|
+
this.internal = new redis_1.default(config.internalCache, "internal_adapter");
|
|
29
33
|
this.logger = global.kuzzle.log.child("core:cache:cacheEngine");
|
|
30
34
|
}
|
|
31
35
|
/**
|
|
@@ -34,7 +38,7 @@ class CacheEngine {
|
|
|
34
38
|
* @returns {Promise}
|
|
35
39
|
*/
|
|
36
40
|
async init() {
|
|
37
|
-
await
|
|
41
|
+
await bluebird_1.default.all([this.public.init(), this.internal.init()]);
|
|
38
42
|
this.registerInternalEvents();
|
|
39
43
|
this.registerPublicEvents();
|
|
40
44
|
this.logger.info("[✔] Cache initialized");
|
|
@@ -104,7 +108,7 @@ class CacheEngine {
|
|
|
104
108
|
* @param {string} script
|
|
105
109
|
*/
|
|
106
110
|
global.kuzzle.onAsk("core:cache:internal:script:define", (name, keys, script) => {
|
|
107
|
-
return this.internal.
|
|
111
|
+
return this.internal.connectedClient.defineCommand(name, {
|
|
108
112
|
lua: script,
|
|
109
113
|
numberOfKeys: keys,
|
|
110
114
|
});
|
|
@@ -116,7 +120,14 @@ class CacheEngine {
|
|
|
116
120
|
* @param {...string} args -- script arguments
|
|
117
121
|
* @return {*} script result (if any)
|
|
118
122
|
*/
|
|
119
|
-
global.kuzzle.onAsk("core:cache:internal:script:execute", (name, ...args) =>
|
|
123
|
+
global.kuzzle.onAsk("core:cache:internal:script:execute", (name, ...args) => {
|
|
124
|
+
const client = this.internal.connectedClient;
|
|
125
|
+
// `defineCommand` attaches the script to the client INSTANCE, so it has
|
|
126
|
+
// to be invoked as a method: a detached reference loses `this` and
|
|
127
|
+
// ioredis' Commander throws on `this.options`. `Reflect.apply` keeps the
|
|
128
|
+
// receiver, which a plain `Reflect.get(...)(...)` does not.
|
|
129
|
+
return Reflect.apply(Reflect.get(client, name), client, args);
|
|
130
|
+
});
|
|
120
131
|
/**
|
|
121
132
|
* Convenience method for easy access to options NX and PX of the "set"
|
|
122
133
|
* command.
|
|
@@ -139,6 +150,12 @@ class CacheEngine {
|
|
|
139
150
|
* @param {Array} args -- command arguments
|
|
140
151
|
*/
|
|
141
152
|
global.kuzzle.onAsk("core:cache:internal:execute", (command, ...args) => this.internal.exec(command, ...args));
|
|
153
|
+
/**
|
|
154
|
+
* Returns the raw ioredis client instance backing the internal cache.
|
|
155
|
+
* In-process only — never exposed over the network. Used by
|
|
156
|
+
* lib/util/distributedLock.ts to build its redis-semaphore mutexes.
|
|
157
|
+
*/
|
|
158
|
+
global.kuzzle.onAsk("core:cache:internal:client:get", () => this.internal.client);
|
|
142
159
|
}
|
|
143
160
|
registerPublicEvents() {
|
|
144
161
|
/**
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { JSONObject } from "
|
|
1
|
+
import type { JSONObject } from "../../types/JSONObject";
|
|
2
2
|
export declare class KuzzleDebugger {
|
|
3
|
+
/** Built by `init()`, which is called before anything can reach the API. */
|
|
3
4
|
private inspector;
|
|
4
5
|
private debuggerStatus;
|
|
5
6
|
/**
|