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,19 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Client } from "sdk-es8";
|
|
2
|
+
import type { JSONObject } from "../../../types/JSONObject";
|
|
3
|
+
import { KuzzleError } from "../../../kerror/errors";
|
|
4
|
+
/**
|
|
5
|
+
* What the Elasticsearch client throws: an Error, carrying the server's
|
|
6
|
+
* response on `meta` for the ones that came back from the cluster. `catch`
|
|
7
|
+
* hands callers `unknown`, and this is the shape every reader below assumes.
|
|
8
|
+
*/
|
|
9
|
+
type ThrownESError = Error & {
|
|
10
|
+
meta?: JSONObject;
|
|
11
|
+
body?: JSONObject;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* One that came back from the cluster rather than from the client itself, so
|
|
15
|
+
* its `meta` is present — which is what `formatESError` checks before handing
|
|
16
|
+
* it to the handlers below.
|
|
17
|
+
*/
|
|
18
|
+
type ThrownESResponseError = ThrownESError & {
|
|
19
|
+
meta: JSONObject;
|
|
20
|
+
};
|
|
2
21
|
declare class ESWrapper {
|
|
3
|
-
|
|
4
|
-
client:
|
|
22
|
+
client: Client;
|
|
23
|
+
constructor(client: Client);
|
|
5
24
|
/**
|
|
6
25
|
* Transforms raw ES errors into a normalized Kuzzle version
|
|
7
26
|
*
|
|
8
|
-
* @param
|
|
9
|
-
* @returns {KuzzleError}
|
|
27
|
+
* @param error
|
|
10
28
|
*/
|
|
11
|
-
formatESError(error:
|
|
12
|
-
reject(error:
|
|
13
|
-
_handleConflictError(error:
|
|
14
|
-
_handleNotFoundError(error:
|
|
15
|
-
_handleBadRequestError(error:
|
|
16
|
-
_handleUnknownError(error:
|
|
29
|
+
formatESError(error: unknown): KuzzleError;
|
|
30
|
+
reject(error: unknown): Promise<never>;
|
|
31
|
+
_handleConflictError(error: ThrownESResponseError, message: string): KuzzleError;
|
|
32
|
+
_handleNotFoundError(error: ThrownESResponseError, message: string): KuzzleError;
|
|
33
|
+
_handleBadRequestError(error: ThrownESResponseError, message: string): KuzzleError;
|
|
34
|
+
_handleUnknownError(error: ThrownESError, message: string): KuzzleError;
|
|
17
35
|
}
|
|
18
|
-
|
|
19
|
-
import Bluebird = require("bluebird");
|
|
36
|
+
export = ESWrapper;
|
|
@@ -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,18 +19,26 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
22
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
|
+
};
|
|
21
25
|
/* eslint sort-keys: 0 */
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const
|
|
26
|
+
const node_util_1 = require("node:util");
|
|
27
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
28
|
+
const get_1 = __importDefault(require("lodash/get"));
|
|
29
|
+
const sdk_es8_1 = require("sdk-es8");
|
|
30
|
+
const errors_1 = require("../../../kerror/errors");
|
|
31
|
+
const debug_1 = __importDefault(require("../../../util/debug"));
|
|
32
|
+
const kerror_1 = require("../../../kerror");
|
|
33
|
+
const debug = (0, debug_1.default)("kuzzle:services:storage:ESCommon");
|
|
34
|
+
const kerror = (0, kerror_1.wrap)("services", "storage");
|
|
35
|
+
function isResponseError(error) {
|
|
36
|
+
return Boolean(error.meta);
|
|
37
|
+
}
|
|
29
38
|
const errorMessagesMapping = [
|
|
30
39
|
{
|
|
31
40
|
regex: /^\[es_rejected_execution_exception] rejected execution .*? on EsThreadPoolExecutor\[(.*?), .*$/,
|
|
32
|
-
|
|
41
|
+
subcode: "too_many_operations",
|
|
33
42
|
getPlaceholders: (esError, matches) => [matches[1]],
|
|
34
43
|
},
|
|
35
44
|
{
|
|
@@ -89,7 +98,7 @@ const errorMessagesMapping = [
|
|
|
89
98
|
},
|
|
90
99
|
{
|
|
91
100
|
// [index_not_found_exception] no such index, with { resource.type=index_or_alias & resource.id=foso & index=foso }
|
|
92
|
-
regex: /^no such index \[([%&])(
|
|
101
|
+
regex: /^no such index \[([%&])([^\]]*)\.([^.\]]*)\]$/,
|
|
93
102
|
subcode: "unknown_collection",
|
|
94
103
|
getPlaceholders: (esError, matches) => [matches[2], matches[3]],
|
|
95
104
|
},
|
|
@@ -117,14 +126,14 @@ const errorMessagesMapping = [
|
|
|
117
126
|
getPlaceholders: (esError, matches) => [matches[1]],
|
|
118
127
|
},
|
|
119
128
|
{
|
|
120
|
-
// mapping set to strict, dynamic introduction of [lehuong] within [_doc] is not allowed
|
|
129
|
+
// [_doc] mapping set to strict, dynamic introduction of [lehuong] within [_doc] is not allowed
|
|
121
130
|
regex: /^\[(.+)\] mapping set to strict, dynamic introduction of \[(.+)\] within \[.+\] is not allowed/,
|
|
122
131
|
subcode: "strict_mapping_rejection",
|
|
123
132
|
getPlaceholders: (esError, matches) => {
|
|
124
133
|
// "/%26index.collection/_doc"
|
|
125
|
-
const esPath = esError
|
|
134
|
+
const esPath = (0, get_1.default)(esError, "meta.meta.request.params.path", "");
|
|
126
135
|
// keep only "index"
|
|
127
|
-
const index = esPath.split(".")[0]
|
|
136
|
+
const index = esPath.split(".")[0]?.split("%26")[1];
|
|
128
137
|
// keep only "collection"
|
|
129
138
|
const collection = esPath.substr(esPath.indexOf(".") + 1).split("/")[0];
|
|
130
139
|
return [matches[2], index, collection];
|
|
@@ -150,47 +159,58 @@ class ESWrapper {
|
|
|
150
159
|
/**
|
|
151
160
|
* Transforms raw ES errors into a normalized Kuzzle version
|
|
152
161
|
*
|
|
153
|
-
* @param
|
|
154
|
-
* @returns {KuzzleError}
|
|
162
|
+
* @param error
|
|
155
163
|
*/
|
|
156
164
|
formatESError(error) {
|
|
157
|
-
if (error instanceof KuzzleError) {
|
|
165
|
+
if (error instanceof errors_1.KuzzleError) {
|
|
158
166
|
return error;
|
|
159
167
|
}
|
|
168
|
+
// `catch` answers `unknown`, and a rejected client promise can in principle
|
|
169
|
+
// carry anything. Everything below reads an Error's shape, so that is what
|
|
170
|
+
// it gets — without asserting that whatever arrived already was one.
|
|
171
|
+
// `inspect`, not `String`: a thrown object stringifies to "[object
|
|
172
|
+
// Object]", which is the one thing the message must not say.
|
|
173
|
+
const esError = error instanceof Error ? error : new Error((0, node_util_1.inspect)(error));
|
|
160
174
|
global.kuzzle.emit("services:storage:error", {
|
|
161
|
-
message: `Elasticsearch Client error: ${
|
|
175
|
+
message: `Elasticsearch Client error: ${esError.message}`,
|
|
162
176
|
// /!\ not all ES error classes have a "meta" property
|
|
163
|
-
meta:
|
|
164
|
-
stack:
|
|
177
|
+
meta: esError.meta || null,
|
|
178
|
+
stack: esError.stack,
|
|
165
179
|
});
|
|
166
|
-
if (error instanceof
|
|
180
|
+
if (error instanceof sdk_es8_1.errors.NoLivingConnectionsError) {
|
|
167
181
|
throw kerror.get("not_connected");
|
|
168
182
|
}
|
|
169
|
-
const message =
|
|
183
|
+
const message = (0, get_1.default)(esError, "meta.body.error.reason", esError.message);
|
|
170
184
|
// Try to match a known elasticsearch error
|
|
171
185
|
for (const betterError of errorMessagesMapping) {
|
|
172
186
|
const matches = message.match(betterError.regex);
|
|
173
187
|
if (matches) {
|
|
174
|
-
return kerror.get(betterError.subcode, ...betterError.getPlaceholders(
|
|
188
|
+
return kerror.get(betterError.subcode, ...betterError.getPlaceholders(esError, matches));
|
|
175
189
|
}
|
|
176
190
|
}
|
|
177
191
|
// Try to match using error codes
|
|
178
|
-
|
|
179
|
-
|
|
192
|
+
// `meta` is what tells a cluster response from a client-side failure, so
|
|
193
|
+
// the three handlers below are declared to require it rather than
|
|
194
|
+
// re-checking it four times each. The error itself is handed over, never a
|
|
195
|
+
// copy: the client's `ResponseError` exposes `body` as a prototype getter,
|
|
196
|
+
// which a spread does not carry — and without it every missing document
|
|
197
|
+
// answered `unexpected_not_found` instead of `not_found`.
|
|
198
|
+
if (isResponseError(esError)) {
|
|
199
|
+
switch (esError.meta.statusCode) {
|
|
180
200
|
case 400:
|
|
181
|
-
return this._handleBadRequestError(
|
|
201
|
+
return this._handleBadRequestError(esError, message);
|
|
182
202
|
case 404:
|
|
183
|
-
return this._handleNotFoundError(
|
|
203
|
+
return this._handleNotFoundError(esError, message);
|
|
184
204
|
case 409:
|
|
185
|
-
return this._handleConflictError(
|
|
205
|
+
return this._handleConflictError(esError, message);
|
|
186
206
|
default:
|
|
187
207
|
break;
|
|
188
208
|
}
|
|
189
209
|
}
|
|
190
|
-
return this._handleUnknownError(
|
|
210
|
+
return this._handleUnknownError(esError, message);
|
|
191
211
|
}
|
|
192
212
|
reject(error) {
|
|
193
|
-
return
|
|
213
|
+
return bluebird_1.default.reject(this.formatESError(error));
|
|
194
214
|
}
|
|
195
215
|
_handleConflictError(error, message) {
|
|
196
216
|
debug('unhandled "Conflict" elasticsearch error: %a', error);
|
|
@@ -198,46 +218,47 @@ class ESWrapper {
|
|
|
198
218
|
}
|
|
199
219
|
_handleNotFoundError(error, message) {
|
|
200
220
|
let errorMessage = message;
|
|
201
|
-
|
|
221
|
+
const indice = (0, get_1.default)(error, "body._index");
|
|
222
|
+
if (!indice) {
|
|
202
223
|
return kerror.get("unexpected_not_found", errorMessage);
|
|
203
224
|
}
|
|
204
225
|
// _index= "&nyc-open-data.yellow-taxi"
|
|
205
|
-
const index =
|
|
206
|
-
const collection =
|
|
226
|
+
const index = indice.split(".")[0]?.slice(1);
|
|
227
|
+
const collection = indice.split(".")[1];
|
|
207
228
|
// 404 on a GET document
|
|
208
|
-
if (error.body
|
|
229
|
+
if (error.body?.found === false) {
|
|
209
230
|
return kerror.get("not_found", error.body._id, index, collection);
|
|
210
231
|
}
|
|
211
232
|
// 404 on DELETE document (ES error payloads are so cool!)
|
|
212
233
|
if (error.meta.body._id) {
|
|
213
234
|
return kerror.get("not_found", error.meta.body._id, index, collection);
|
|
214
235
|
}
|
|
215
|
-
if (error.meta.body
|
|
236
|
+
if (error.meta.body?.error) {
|
|
216
237
|
errorMessage = error.meta.body.error
|
|
217
238
|
? `${error.meta.body.error.reason}: ${error.meta.body.error["resource.id"]}`
|
|
218
|
-
: `${error.message}: ${error.body
|
|
239
|
+
: `${error.message}: ${error.body?._id}`;
|
|
219
240
|
}
|
|
220
241
|
debug('unhandled "NotFound" elasticsearch error: %a', error);
|
|
221
242
|
return kerror.get("unexpected_not_found", errorMessage);
|
|
222
243
|
}
|
|
223
244
|
_handleBadRequestError(error, message) {
|
|
224
245
|
let errorMessage = message;
|
|
225
|
-
if (error.meta.body
|
|
246
|
+
if (error.meta.body?.error) {
|
|
226
247
|
errorMessage = error.meta.body.error.root_cause
|
|
227
248
|
? error.meta.body.error.root_cause[0].reason
|
|
228
249
|
: error.meta.body.error.reason;
|
|
229
250
|
// empty query throws exception with ES 7
|
|
230
251
|
if (error.meta.body.error.type === "parsing_exception" &&
|
|
231
|
-
|
|
252
|
+
(0, get_1.default)(error, "meta.body.error.caused_by.type") ===
|
|
232
253
|
"illegal_argument_exception") {
|
|
233
254
|
errorMessage = error.meta.body.error.caused_by.reason;
|
|
234
255
|
}
|
|
235
256
|
}
|
|
236
|
-
debug('unhandled "BadRequest" elasticsearch error: %a',
|
|
257
|
+
debug('unhandled "BadRequest" elasticsearch error: %a', (0, get_1.default)(error, "meta.body.error.reason", error.message));
|
|
237
258
|
return kerror.get("unexpected_bad_request", errorMessage);
|
|
238
259
|
}
|
|
239
260
|
_handleUnknownError(error, message) {
|
|
240
|
-
debug("unhandled elasticsearch error (unhandled type: %s): %o",
|
|
261
|
+
debug("unhandled elasticsearch error (unhandled type: %s): %o", (0, get_1.default)(error, "error.meta.statusCode", "<no status code>"), error);
|
|
241
262
|
return kerror.get("unexpected_error", message);
|
|
242
263
|
}
|
|
243
264
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare class QueryTranslator {
|
|
2
|
-
translate(filters:
|
|
3
|
-
_translateOperator(operator:
|
|
4
|
-
_translateClause(clause:
|
|
2
|
+
translate(filters: unknown): any;
|
|
3
|
+
_translateOperator(operator: unknown, operands: unknown): any;
|
|
4
|
+
_translateClause(clause: unknown, content: unknown): any;
|
|
5
5
|
}
|
|
@@ -1,27 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.QueryTranslator = void 0;
|
|
4
|
-
/*
|
|
5
|
-
* Kuzzle, a backend software, self-hostable and ready to use
|
|
6
|
-
* to power modern apps
|
|
7
|
-
*
|
|
8
|
-
* Copyright 2015-2022 Kuzzle
|
|
9
|
-
* mailto: support AT kuzzle.io
|
|
10
|
-
* website: http://kuzzle.io
|
|
11
|
-
*
|
|
12
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
* you may not use this file except in compliance with the License.
|
|
14
|
-
* You may obtain a copy of the License at
|
|
15
|
-
*
|
|
16
|
-
* https://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
*
|
|
18
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
* limitations under the License.
|
|
23
|
-
*/
|
|
24
4
|
const kerror_1 = require("../../../kerror");
|
|
5
|
+
const safeObject_1 = require("../../../util/safeObject");
|
|
6
|
+
/**
|
|
7
|
+
* The payload of a clause that is the same Elasticsearch query under another
|
|
8
|
+
* name, and so is spread into it verbatim. Only `exists` and `missing` accept
|
|
9
|
+
* the string form.
|
|
10
|
+
*/
|
|
11
|
+
function asClauseObject(content) {
|
|
12
|
+
if (!(0, safeObject_1.isPlainObject)(content)) {
|
|
13
|
+
throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", `Invalid clause payload: expected an object, got ${typeof content}`);
|
|
14
|
+
}
|
|
15
|
+
return content;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A Koncorde filter, as `translate` recurses over it: one keyword and its
|
|
19
|
+
* payload. Anything else is a malformed filter, and the translation error
|
|
20
|
+
* this module already raises for a malformed `exists` path says so.
|
|
21
|
+
*/
|
|
22
|
+
function asFilter(value) {
|
|
23
|
+
if (!(0, safeObject_1.isPlainObject)(value)) {
|
|
24
|
+
throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", `Invalid operand: expected a filter object, got ${typeof value}`);
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
function asFilterList(value) {
|
|
29
|
+
if (!Array.isArray(value)) {
|
|
30
|
+
throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", `Invalid operands: expected a list of filters, got ${typeof value}`);
|
|
31
|
+
}
|
|
32
|
+
return value.map(asFilter);
|
|
33
|
+
}
|
|
25
34
|
class KeywordError extends Error {
|
|
26
35
|
constructor(type, name) {
|
|
27
36
|
super(`The ${type} "${name}" of Koncorde DSL is not supported for search queries.`);
|
|
@@ -55,12 +64,16 @@ function parseKoncordePath(path) {
|
|
|
55
64
|
const KONCORDE_CLAUSES_TO_ES = {
|
|
56
65
|
equals: (content) => ({
|
|
57
66
|
term: {
|
|
58
|
-
...content,
|
|
67
|
+
...asClauseObject(content),
|
|
59
68
|
},
|
|
60
69
|
}),
|
|
61
70
|
exists: (field) => {
|
|
62
71
|
// Support old syntax { exists: { field: "path" } } and { exists: "path" }
|
|
63
|
-
const
|
|
72
|
+
const declared = (0, safeObject_1.isPlainObject)(field) ? field.field : field;
|
|
73
|
+
if (typeof declared !== "string") {
|
|
74
|
+
throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", `Invalid exists path: expected a string, got ${typeof declared}`);
|
|
75
|
+
}
|
|
76
|
+
const parsedInfo = parseKoncordePath(declared);
|
|
64
77
|
// If we have a value, we need to use a range query to be sure that the value is the same
|
|
65
78
|
if (parsedInfo.value) {
|
|
66
79
|
return {
|
|
@@ -91,32 +104,32 @@ const KONCORDE_CLAUSES_TO_ES = {
|
|
|
91
104
|
},
|
|
92
105
|
geoBoundingBox: (content) => ({
|
|
93
106
|
geo_bounding_box: {
|
|
94
|
-
...content,
|
|
107
|
+
...asClauseObject(content),
|
|
95
108
|
},
|
|
96
109
|
}),
|
|
97
110
|
geoDistance: (content) => ({
|
|
98
111
|
geo_distance: {
|
|
99
|
-
...content,
|
|
112
|
+
...asClauseObject(content),
|
|
100
113
|
},
|
|
101
114
|
}),
|
|
102
115
|
geoDistanceRange: (content) => ({
|
|
103
116
|
geo_distance_range: {
|
|
104
|
-
...content,
|
|
117
|
+
...asClauseObject(content),
|
|
105
118
|
},
|
|
106
119
|
}),
|
|
107
120
|
geoPolygon: (content) => ({
|
|
108
121
|
geo_polygon: {
|
|
109
|
-
...content,
|
|
122
|
+
...asClauseObject(content),
|
|
110
123
|
},
|
|
111
124
|
}),
|
|
112
125
|
ids: (content) => ({
|
|
113
126
|
ids: {
|
|
114
|
-
...content,
|
|
127
|
+
...asClauseObject(content),
|
|
115
128
|
},
|
|
116
129
|
}),
|
|
117
130
|
in: (content) => ({
|
|
118
131
|
terms: {
|
|
119
|
-
...content,
|
|
132
|
+
...asClauseObject(content),
|
|
120
133
|
},
|
|
121
134
|
}),
|
|
122
135
|
missing: (field) => ({
|
|
@@ -126,19 +139,26 @@ const KONCORDE_CLAUSES_TO_ES = {
|
|
|
126
139
|
}),
|
|
127
140
|
range: (content) => ({
|
|
128
141
|
range: {
|
|
129
|
-
...content,
|
|
142
|
+
...asClauseObject(content),
|
|
130
143
|
},
|
|
131
144
|
}),
|
|
132
145
|
};
|
|
133
146
|
const KONCORDE_OPERATORS_TO_ES = {
|
|
134
147
|
and: (content) => ({
|
|
135
148
|
bool: {
|
|
136
|
-
filter: [...content],
|
|
149
|
+
filter: [...asFilterList(content)],
|
|
137
150
|
},
|
|
138
151
|
}),
|
|
139
152
|
bool: undefined,
|
|
140
153
|
not: (content) => {
|
|
141
|
-
|
|
154
|
+
// `not` is handed the single already-translated filter below, so its
|
|
155
|
+
// first entry is the ES clause to negate.
|
|
156
|
+
const [first] = asFilterList(content);
|
|
157
|
+
const [entry] = Object.entries(asFilter(first));
|
|
158
|
+
if (entry === undefined) {
|
|
159
|
+
throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", "Invalid not operand: the negated filter is empty");
|
|
160
|
+
}
|
|
161
|
+
const [name, value] = entry;
|
|
142
162
|
return {
|
|
143
163
|
bool: {
|
|
144
164
|
must_not: [{ [name]: value }],
|
|
@@ -147,13 +167,26 @@ const KONCORDE_OPERATORS_TO_ES = {
|
|
|
147
167
|
},
|
|
148
168
|
or: (content) => ({
|
|
149
169
|
bool: {
|
|
150
|
-
should: [...content],
|
|
170
|
+
should: [...asFilterList(content)],
|
|
151
171
|
},
|
|
152
172
|
}),
|
|
153
173
|
};
|
|
174
|
+
/*
|
|
175
|
+
* The three public methods below keep v2.56.0's declarations — untyped
|
|
176
|
+
* arguments, an `any` answer — as a public overload in front of the typed
|
|
177
|
+
* implementation: a `JSONObject` answer breaks code compiled against that
|
|
178
|
+
* which assigns it to its own query type.
|
|
179
|
+
*/
|
|
154
180
|
class QueryTranslator {
|
|
155
181
|
translate(filters) {
|
|
156
|
-
const [
|
|
182
|
+
const [entry] = Object.entries(filters);
|
|
183
|
+
// An empty filter has no keyword to translate. `BaseController`'s
|
|
184
|
+
// `translateKoncorde` answers `{}` before reaching here; this is what
|
|
185
|
+
// destructuring `Object.entries(filters)[0]` raised a TypeError for.
|
|
186
|
+
if (entry === undefined) {
|
|
187
|
+
throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", "Invalid filter: no keyword to translate");
|
|
188
|
+
}
|
|
189
|
+
const [name, value] = entry;
|
|
157
190
|
if (KONCORDE_OPERATORS.includes(name)) {
|
|
158
191
|
return this._translateOperator(name, value);
|
|
159
192
|
}
|
|
@@ -166,10 +199,10 @@ class QueryTranslator {
|
|
|
166
199
|
}
|
|
167
200
|
const esOperands = [];
|
|
168
201
|
if (operator === "not") {
|
|
169
|
-
esOperands.push(this.translate(operands));
|
|
202
|
+
esOperands.push(this.translate(asFilter(operands)));
|
|
170
203
|
}
|
|
171
204
|
else {
|
|
172
|
-
for (const operand of operands) {
|
|
205
|
+
for (const operand of asFilterList(operands)) {
|
|
173
206
|
esOperands.push(this.translate(operand));
|
|
174
207
|
}
|
|
175
208
|
}
|
|
@@ -182,6 +215,9 @@ class QueryTranslator {
|
|
|
182
215
|
[clause]: content,
|
|
183
216
|
};
|
|
184
217
|
}
|
|
218
|
+
if (!(0, safeObject_1.isPlainObject)(content) && typeof content !== "string") {
|
|
219
|
+
throw (0, kerror_1.get)("services", "koncorde", "elastic_translation_error", `Invalid "${clause}" clause: expected an object or a string, got ${typeof content}`);
|
|
220
|
+
}
|
|
185
221
|
return converter(content);
|
|
186
222
|
}
|
|
187
223
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { JSONObject } from "./JSONObject";
|
|
2
|
+
/**
|
|
3
|
+
* One entry of the HTTP route table the API exposes, native or plugin-provided.
|
|
4
|
+
*/
|
|
5
|
+
export interface ApiRoute {
|
|
6
|
+
controller: string;
|
|
7
|
+
action: string;
|
|
8
|
+
path: string;
|
|
9
|
+
verb: string;
|
|
10
|
+
/** Attached by `PluginsManager` for a plugin route that declares one. */
|
|
11
|
+
openapi?: JSONObject;
|
|
12
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Kuzzle, a backend software, self-hostable and ready to use
|
|
4
|
+
* to power modern apps
|
|
5
|
+
*
|
|
6
|
+
* Copyright 2015-2022 Kuzzle
|
|
7
|
+
* mailto: support AT kuzzle.io
|
|
8
|
+
* website: http://kuzzle.io
|
|
9
|
+
*
|
|
10
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
11
|
+
* you may not use this file except in compliance with the License.
|
|
12
|
+
* You may obtain a copy of the License at
|
|
13
|
+
*
|
|
14
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
15
|
+
*
|
|
16
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
17
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
19
|
+
* See the License for the specific language governing permissions and
|
|
20
|
+
* limitations under the License.
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
//# sourceMappingURL=ApiRoute.js.map
|
|
@@ -44,6 +44,16 @@ export type HookEventHandler<TEventDefinition extends EventDefinition = EventDef
|
|
|
44
44
|
* It should return a promise resolving the first received argument.
|
|
45
45
|
*/
|
|
46
46
|
export type PipeEventHandler<TEventDefinition extends EventDefinition = EventDefinition> = (...args: TEventDefinition["args"]) => Promise<TEventDefinition["args"][0]>;
|
|
47
|
+
/**
|
|
48
|
+
* A plugin pipe in its **callback** form: instead of answering a promise it
|
|
49
|
+
* takes a trailing `callback(error, result)`. The pipe runner supports both,
|
|
50
|
+
* and `PluginsManager.registerPipe` always hands over this one.
|
|
51
|
+
*/
|
|
52
|
+
export type CallbackPipeHandler = (...args: unknown[]) => void;
|
|
53
|
+
/**
|
|
54
|
+
* What the emitter actually stores for a plugin pipe: either form.
|
|
55
|
+
*/
|
|
56
|
+
export type RegisteredPipeHandler<TEventDefinition extends EventDefinition = EventDefinition> = PipeEventHandler<TEventDefinition> | CallbackPipeHandler;
|
|
47
57
|
/**
|
|
48
58
|
* Handler for cluster event.
|
|
49
59
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Backend } from "../core/backend";
|
|
2
|
-
import { Kuzzle } from "../kuzzle";
|
|
1
|
+
import type { Backend } from "../core/backend";
|
|
2
|
+
import type { Kuzzle } from "../kuzzle";
|
|
3
3
|
/**
|
|
4
4
|
* This file contains global type declarations for Kuzzle.
|
|
5
5
|
* We need to use `var` so Typescript extends the globalThis type.
|
|
@@ -8,6 +8,11 @@ import { Kuzzle } from "../kuzzle";
|
|
|
8
8
|
declare global {
|
|
9
9
|
var app: Backend;
|
|
10
10
|
var kuzzle: Kuzzle;
|
|
11
|
-
var
|
|
11
|
+
var nodeId: string;
|
|
12
|
+
/**
|
|
13
|
+
* `process.env.NODE_ENV`, which is not guaranteed to be set — every reader
|
|
14
|
+
* compares it against a literal, so the absent case was already handled.
|
|
15
|
+
*/
|
|
16
|
+
var NODE_ENV: string | undefined;
|
|
12
17
|
}
|
|
13
18
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { JSONObject } from "
|
|
2
|
-
import { ClientConnection } from "./ClientConnection";
|
|
1
|
+
import type { JSONObject } from "./JSONObject";
|
|
2
|
+
import type { ClientConnection } from "./ClientConnection";
|
|
3
3
|
export interface HttpMessage {
|
|
4
4
|
connection: ClientConnection;
|
|
5
5
|
content: JSONObject;
|
|
@@ -27,7 +27,9 @@ exports.HttpStream = void 0;
|
|
|
27
27
|
*/
|
|
28
28
|
class HttpStream {
|
|
29
29
|
get readableState() {
|
|
30
|
-
// @ts-
|
|
30
|
+
// @ts-expect-error -- `_readableState` is Node's internal bookkeeping and
|
|
31
|
+
// is not declared by @types/node; it is where a destroyed stream's error
|
|
32
|
+
// lands, and `errored` is the only field read from it.
|
|
31
33
|
return this.stream._readableState;
|
|
32
34
|
}
|
|
33
35
|
constructor(readableStream, { totalBytes = -1 } = {}) {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An object with any key and any value — a JSON document, a request body, a
|
|
3
|
+
* payload.
|
|
4
|
+
*
|
|
5
|
+
* Kuzzle's own definition (ADR-0002 step 02), declared exactly as kuzzle-sdk
|
|
6
|
+
* declares its `JSONObject`, so that a value of one is a value of the other,
|
|
7
|
+
* both ways: a plugin mixing the two imports sees no difference.
|
|
8
|
+
*/
|
|
9
|
+
export type JSONObject = Record<PropertyKey, any>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Kuzzle, a backend software, self-hostable and ready to use
|
|
4
|
+
* to power modern apps
|
|
5
|
+
*
|
|
6
|
+
* Copyright 2015-2022 Kuzzle
|
|
7
|
+
* mailto: support AT kuzzle.io
|
|
8
|
+
* website: http://kuzzle.io
|
|
9
|
+
*
|
|
10
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
11
|
+
* you may not use this file except in compliance with the License.
|
|
12
|
+
* You may obtain a copy of the License at
|
|
13
|
+
*
|
|
14
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
15
|
+
*
|
|
16
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
17
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
19
|
+
* See the License for the specific language governing permissions and
|
|
20
|
+
* limitations under the License.
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
//# sourceMappingURL=JSONObject.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { JSONObject } from "
|
|
1
|
+
import type { JSONObject } from "./JSONObject";
|
|
2
2
|
export type InstallationConfig = {
|
|
3
3
|
id: string;
|
|
4
4
|
handler: () => Promise<void>;
|
|
@@ -7,9 +7,11 @@ export type InstallationConfig = {
|
|
|
7
7
|
export type StartOptions = {
|
|
8
8
|
import?: JSONObject;
|
|
9
9
|
plugins?: JSONObject;
|
|
10
|
-
|
|
10
|
+
/** Path to the encrypted secrets file — see `lib/kuzzle/vault.ts`. */
|
|
11
|
+
secretsFile?: string;
|
|
11
12
|
support?: JSONObject;
|
|
12
|
-
|
|
13
|
+
/** Key the encrypted secrets file is decrypted with. */
|
|
14
|
+
vaultKey?: string;
|
|
13
15
|
installations?: Array<InstallationConfig>;
|
|
14
16
|
};
|
|
15
17
|
export type ImportConfig = {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { JSONObject } from "./JSONObject";
|
|
2
|
+
import type uWS from "uWebSockets.js";
|
|
3
|
+
/**
|
|
4
|
+
* What Kuzzle hands `res.upgrade()` as the socket's user data.
|
|
5
|
+
*
|
|
6
|
+
* uWebSockets merges it onto the socket object itself, which is why the code
|
|
7
|
+
* reads `socket.internal` rather than `socket.getUserData().internal` — the
|
|
8
|
+
* intersection below is what says so.
|
|
9
|
+
*/
|
|
10
|
+
export interface KuzzleSocketData {
|
|
11
|
+
headers: JSONObject;
|
|
12
|
+
internal: {
|
|
13
|
+
debugSession?: boolean;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Rate-limiting bookkeeping. Seeded by `wsOnUpgradeHandler` along with the
|
|
17
|
+
* rest of this data, so the limiter can read `count` in the branch that did
|
|
18
|
+
* not just write it — which is what it always did.
|
|
19
|
+
*/
|
|
20
|
+
last: number;
|
|
21
|
+
count: number;
|
|
22
|
+
}
|
|
23
|
+
/** A WebSocket carrying Kuzzle's own upgrade data. */
|
|
24
|
+
export type KuzzleWebSocket = uWS.WebSocket<unknown> & KuzzleSocketData;
|