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,4 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import type { JSONObject } from "../../../types/JSONObject";
|
|
2
|
+
import ClientConnection from "../clientConnection";
|
|
3
|
+
import type { NetworkEntryPoint } from "../networkEntryPoint";
|
|
4
|
+
import Protocol from "./protocol";
|
|
5
|
+
interface InternalMessage {
|
|
6
|
+
channels: string[];
|
|
7
|
+
payload: JSONObject;
|
|
8
|
+
}
|
|
2
9
|
/**
|
|
3
10
|
* Internal protocol to use SDK realtime subscription from plugins.
|
|
4
11
|
*
|
|
@@ -8,20 +15,24 @@ export = InternalProtocol;
|
|
|
8
15
|
* - 'core:network:internal:message'
|
|
9
16
|
*/
|
|
10
17
|
declare class InternalProtocol extends Protocol {
|
|
11
|
-
constructor();
|
|
12
18
|
connection: ClientConnection;
|
|
13
|
-
/**
|
|
14
|
-
* List of channel IDs
|
|
15
|
-
* @type {Set<string>}
|
|
16
|
-
*/
|
|
19
|
+
/** List of channel IDs */
|
|
17
20
|
channels: Set<string>;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
constructor();
|
|
22
|
+
init(entryPoint: NetworkEntryPoint): Promise<boolean>;
|
|
23
|
+
/** @deprecated pass the name to the constructor and call `init(entryPoint)` */
|
|
24
|
+
init(name: null, entryPoint: NetworkEntryPoint): Promise<boolean>;
|
|
25
|
+
joinChannel(channel: string, connectionId: string): {
|
|
26
|
+
channel: string;
|
|
27
|
+
connectionId: string;
|
|
28
|
+
};
|
|
29
|
+
leaveChannel(channel: string, connectionId: string): {
|
|
30
|
+
channel: string;
|
|
31
|
+
connectionId: string;
|
|
32
|
+
};
|
|
33
|
+
disconnect(connectionId: string): void;
|
|
34
|
+
broadcast(data: InternalMessage): void;
|
|
35
|
+
notify(data: InternalMessage): void;
|
|
36
|
+
_send(data: InternalMessage): void;
|
|
25
37
|
}
|
|
26
|
-
|
|
27
|
-
import ClientConnection = require("../clientConnection");
|
|
38
|
+
export = InternalProtocol;
|
|
@@ -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,10 +19,13 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
22
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
|
+
};
|
|
25
|
+
const debug_1 = __importDefault(require("../../../util/debug"));
|
|
26
|
+
const clientConnection_1 = __importDefault(require("../clientConnection"));
|
|
27
|
+
const protocol_1 = __importDefault(require("./protocol"));
|
|
28
|
+
const debug = (0, debug_1.default)("kuzzle:network:protocols:internal");
|
|
25
29
|
/**
|
|
26
30
|
* Internal protocol to use SDK realtime subscription from plugins.
|
|
27
31
|
*
|
|
@@ -30,34 +34,31 @@ const debug = require("../../../util/debug")("kuzzle:network:protocols:internal"
|
|
|
30
34
|
* Messages to the embedded SDK are dispatched with the following event:
|
|
31
35
|
* - 'core:network:internal:message'
|
|
32
36
|
*/
|
|
33
|
-
class InternalProtocol extends
|
|
37
|
+
class InternalProtocol extends protocol_1.default {
|
|
34
38
|
constructor() {
|
|
35
39
|
super("internal");
|
|
36
|
-
this.connection = new
|
|
37
|
-
/**
|
|
38
|
-
* List of channel IDs
|
|
39
|
-
* @type {Set<string>}
|
|
40
|
-
*/
|
|
40
|
+
this.connection = new clientConnection_1.default(this.name, ["127.0.0.1"]);
|
|
41
41
|
this.channels = new Set();
|
|
42
42
|
}
|
|
43
|
-
async init(
|
|
44
|
-
await super.init(
|
|
43
|
+
async init(...args) {
|
|
44
|
+
await super.init(protocol_1.default.entryPointOf(args));
|
|
45
45
|
debug("initializing InternalProtocol");
|
|
46
46
|
this.entryPoint.newConnection(this.connection);
|
|
47
47
|
/**
|
|
48
48
|
* Returns the internal connection ID used by the protocol.
|
|
49
|
-
*
|
|
50
|
-
* @returns {string} connectionId
|
|
51
49
|
*/
|
|
52
50
|
global.kuzzle.onAsk("core:network:internal:connectionId:get", () => this.connection.id);
|
|
51
|
+
return true;
|
|
53
52
|
}
|
|
54
53
|
joinChannel(channel, connectionId) {
|
|
55
54
|
debug("joinChannel: %s", channel, connectionId);
|
|
56
55
|
this.channels.add(channel);
|
|
56
|
+
return { channel, connectionId };
|
|
57
57
|
}
|
|
58
58
|
leaveChannel(channel, connectionId) {
|
|
59
59
|
debug("leaveChannel: %s", channel, connectionId);
|
|
60
60
|
this.channels.delete(channel);
|
|
61
|
+
return { channel, connectionId };
|
|
61
62
|
}
|
|
62
63
|
disconnect(connectionId) {
|
|
63
64
|
debug("disconnect: %s", connectionId);
|
|
@@ -72,8 +73,8 @@ class InternalProtocol extends Protocol {
|
|
|
72
73
|
this._send(data);
|
|
73
74
|
}
|
|
74
75
|
_send(data) {
|
|
75
|
-
for (
|
|
76
|
-
const message = { ...data.payload, room:
|
|
76
|
+
for (const channel of data.channels) {
|
|
77
|
+
const message = { ...data.payload, room: channel };
|
|
77
78
|
global.kuzzle.emit("core:network:internal:message", message);
|
|
78
79
|
}
|
|
79
80
|
}
|
|
@@ -1,39 +1,63 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
import * as net from "node:net";
|
|
3
|
+
import type { AedesPublishPacket, Client, PublishPacket, Subscription } from "aedes";
|
|
4
|
+
import Aedes from "aedes";
|
|
5
|
+
import type { JSONObject } from "../../../types/JSONObject";
|
|
6
|
+
import ClientConnection from "../clientConnection";
|
|
7
|
+
import type { NetworkEntryPoint } from "../networkEntryPoint";
|
|
8
|
+
import Protocol from "./protocol";
|
|
9
|
+
/** `server.protocols.mqtt` in the Kuzzle configuration */
|
|
10
|
+
interface MqttConfig {
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
allowPubSub: boolean;
|
|
13
|
+
developmentMode: boolean;
|
|
14
|
+
disconnectDelay: number;
|
|
15
|
+
requestTopic: string;
|
|
16
|
+
responseTopic: string;
|
|
17
|
+
server: {
|
|
18
|
+
port: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
interface MqttNotification {
|
|
22
|
+
channels: string[];
|
|
23
|
+
connectionId?: string;
|
|
24
|
+
payload: JSONObject;
|
|
25
|
+
}
|
|
26
|
+
declare class MqttProtocol extends Protocol<MqttConfig> {
|
|
27
|
+
aedes: Aedes;
|
|
9
28
|
server: net.Server;
|
|
10
|
-
connections: Map<
|
|
11
|
-
connectionsById: Map<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
notify(data: any): void;
|
|
29
|
+
connections: Map<Client, ClientConnection>;
|
|
30
|
+
connectionsById: Map<string, Client>;
|
|
31
|
+
publishCallback: (error?: Error) => void;
|
|
32
|
+
private readonly logger;
|
|
33
|
+
constructor();
|
|
34
|
+
init(entryPoint: NetworkEntryPoint): Promise<boolean>;
|
|
35
|
+
/** @deprecated pass the name to the constructor and call `init(entryPoint)` */
|
|
36
|
+
init(name: null, entryPoint: NetworkEntryPoint): Promise<boolean>;
|
|
37
|
+
broadcast(data: MqttNotification): void;
|
|
20
38
|
/**
|
|
21
|
-
* @param
|
|
39
|
+
* @param message - **unused.** aedes' `close()` takes a callback and nothing
|
|
40
|
+
* else, so this never reached the client; #2723 removed the call that
|
|
41
|
+
* pretended to pass it. Kept in the signature because `disconnect` is
|
|
42
|
+
* reached by name from the entry point and by protocol plugins.
|
|
43
|
+
* ADR-0001, TD-41 (#2728).
|
|
22
44
|
*/
|
|
45
|
+
disconnect(connectionId: string, message?: string): void;
|
|
46
|
+
joinChannel(channel: string, connectionId: string): {
|
|
47
|
+
channel: string;
|
|
48
|
+
connectionId: string;
|
|
49
|
+
};
|
|
50
|
+
leaveChannel(channel: string, connectionId: string): {
|
|
51
|
+
channel: string;
|
|
52
|
+
connectionId: string;
|
|
53
|
+
};
|
|
54
|
+
notify(data: MqttNotification): void;
|
|
23
55
|
onConnection(client: Client): void;
|
|
24
|
-
/**
|
|
25
|
-
* @param {Client} client
|
|
26
|
-
*/
|
|
27
56
|
onDisconnection(client: Client): void;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
_respond(client: any, response: any): void;
|
|
34
|
-
_respondError(client: any, error: any): void;
|
|
35
|
-
_authorizePublish(client: any, packet: any, callback: any): void;
|
|
36
|
-
_authorizeSubscribe(client: any, sub: any, callback: any): void;
|
|
57
|
+
onMessage(packet: AedesPublishPacket, client: Client | null): void;
|
|
58
|
+
_respond(client: Client, response: JSONObject): void;
|
|
59
|
+
_respondError(client: Client, error: Error): void;
|
|
60
|
+
_authorizePublish(client: Client | null, packet: PublishPacket, callback: (error?: Error | null) => void): void;
|
|
61
|
+
_authorizeSubscribe(client: Client, sub: Subscription, callback: (error: Error | null, subscription?: Subscription | null) => void): void;
|
|
37
62
|
}
|
|
38
|
-
|
|
39
|
-
import net = require("net");
|
|
63
|
+
export = MqttProtocol;
|
|
@@ -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,41 +19,70 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
22
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
25
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
26
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
27
|
+
}
|
|
28
|
+
Object.defineProperty(o, k2, desc);
|
|
29
|
+
}) : (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
o[k2] = m[k];
|
|
32
|
+
}));
|
|
33
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
34
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
35
|
+
}) : function(o, v) {
|
|
36
|
+
o["default"] = v;
|
|
37
|
+
});
|
|
38
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
+
};
|
|
48
|
+
const net = __importStar(require("node:net"));
|
|
49
|
+
const node_util_1 = require("node:util");
|
|
50
|
+
const aedes_1 = __importDefault(require("aedes"));
|
|
51
|
+
const request_1 = require("../../../api/request");
|
|
52
|
+
const kerror_1 = require("../../../kerror");
|
|
53
|
+
const debug_1 = __importDefault(require("../../../util/debug"));
|
|
54
|
+
const stackTrace_1 = require("../../../util/stackTrace");
|
|
55
|
+
const clientConnection_1 = __importDefault(require("../clientConnection"));
|
|
56
|
+
const protocol_1 = __importDefault(require("./protocol"));
|
|
57
|
+
const kerror = (0, kerror_1.wrap)("network", "mqtt");
|
|
58
|
+
const debug = (0, debug_1.default)("kuzzle:network:protocols:mqtt");
|
|
59
|
+
class MqttProtocol extends protocol_1.default {
|
|
34
60
|
constructor() {
|
|
35
61
|
super("mqtt");
|
|
62
|
+
this.logger = global.kuzzle.log.child("core:network:protocols:mqtt");
|
|
36
63
|
// eslint-disable-next-line new-cap
|
|
37
|
-
this.aedes = new
|
|
64
|
+
this.aedes = new aedes_1.default();
|
|
38
65
|
this.server = net.createServer(this.aedes.handle);
|
|
39
66
|
this.connections = new Map();
|
|
40
67
|
this.connectionsById = new Map();
|
|
41
|
-
this.logger = global.kuzzle.log.child("core:network:protocols:mqtt");
|
|
42
68
|
// needs to be bound to this object's context
|
|
43
|
-
this.publishCallback =
|
|
69
|
+
this.publishCallback = (error) => {
|
|
44
70
|
if (error) {
|
|
45
71
|
this.logger.info(`[MQTT] Publishing message failed: ${error}`);
|
|
46
72
|
}
|
|
47
73
|
};
|
|
48
74
|
}
|
|
49
|
-
async init(
|
|
50
|
-
await super.init(
|
|
75
|
+
async init(...args) {
|
|
76
|
+
await super.init(protocol_1.default.entryPointOf(args));
|
|
51
77
|
if (this.config.enabled === false) {
|
|
52
78
|
return false;
|
|
53
79
|
}
|
|
54
80
|
debug("initializing MQTT Server with config: %a", this.config);
|
|
55
|
-
|
|
81
|
+
// The defaults in their own object: written as literal keys before the
|
|
82
|
+
// spread, every one of them is a property the compiler can see being
|
|
83
|
+
// overwritten on the next line (TS2783), which is exactly the intent but
|
|
84
|
+
// not something worth restating six times.
|
|
85
|
+
const defaults = {
|
|
56
86
|
allowPubSub: false,
|
|
57
87
|
developmentMode: false,
|
|
58
88
|
disconnectDelay: 250,
|
|
@@ -61,7 +91,8 @@ class MqttProtocol extends Protocol {
|
|
|
61
91
|
server: {
|
|
62
92
|
port: 1883,
|
|
63
93
|
},
|
|
64
|
-
}
|
|
94
|
+
};
|
|
95
|
+
this.config = { ...defaults, ...this.config };
|
|
65
96
|
/*
|
|
66
97
|
* To avoid ill-use of our topics, we need to configure authorizations:
|
|
67
98
|
* "requestTopic": should be publish-only, so no one but this plugin can
|
|
@@ -86,43 +117,56 @@ class MqttProtocol extends Protocol {
|
|
|
86
117
|
this.aedes.publish({ payload, topic: channel }, this.publishCallback);
|
|
87
118
|
}
|
|
88
119
|
}
|
|
89
|
-
|
|
120
|
+
/**
|
|
121
|
+
* @param message - **unused.** aedes' `close()` takes a callback and nothing
|
|
122
|
+
* else, so this never reached the client; #2723 removed the call that
|
|
123
|
+
* pretended to pass it. Kept in the signature because `disconnect` is
|
|
124
|
+
* reached by name from the entry point and by protocol plugins.
|
|
125
|
+
* ADR-0001, TD-41 (#2728).
|
|
126
|
+
*/
|
|
127
|
+
disconnect(connectionId,
|
|
128
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
129
|
+
message = "Connection closed by remote host") {
|
|
90
130
|
debug("disconnect: connection id: %s, message %s", connectionId, message);
|
|
91
131
|
const client = this.connectionsById.get(connectionId);
|
|
92
132
|
if (client) {
|
|
93
|
-
|
|
133
|
+
// aedes' close() takes a callback and nothing else: `message` has never
|
|
134
|
+
// reached the client
|
|
135
|
+
client.close();
|
|
94
136
|
}
|
|
95
137
|
}
|
|
96
|
-
joinChannel() {
|
|
138
|
+
joinChannel(channel, connectionId) {
|
|
97
139
|
// do nothing
|
|
140
|
+
return { channel, connectionId };
|
|
98
141
|
}
|
|
99
|
-
leaveChannel() {
|
|
142
|
+
leaveChannel(channel, connectionId) {
|
|
100
143
|
// do nothing
|
|
144
|
+
return { channel, connectionId };
|
|
101
145
|
}
|
|
102
146
|
notify(data) {
|
|
103
147
|
debug("notify %a", data);
|
|
104
|
-
const client =
|
|
148
|
+
const client = data.connectionId === undefined
|
|
149
|
+
? undefined
|
|
150
|
+
: this.connectionsById.get(data.connectionId);
|
|
105
151
|
if (!client) {
|
|
106
152
|
return;
|
|
107
153
|
}
|
|
108
154
|
const payload = Buffer.from(JSON.stringify(data.payload));
|
|
109
|
-
data.channels
|
|
155
|
+
for (const topic of data.channels) {
|
|
110
156
|
client.publish({ payload, topic }, this.publishCallback);
|
|
111
|
-
}
|
|
157
|
+
}
|
|
112
158
|
}
|
|
113
|
-
/**
|
|
114
|
-
* @param {Client} client
|
|
115
|
-
*/
|
|
116
159
|
onConnection(client) {
|
|
117
160
|
debug("onConnection: %s", client.id);
|
|
118
|
-
|
|
161
|
+
// A socket with no remote address is one that closed between the
|
|
162
|
+
// connection event and this line; the empty string is what
|
|
163
|
+
// `ClientConnection` was already given for it.
|
|
164
|
+
const remoteAddress = client.conn.remoteAddress ?? "";
|
|
165
|
+
const connection = new clientConnection_1.default(this.name, [remoteAddress], {});
|
|
119
166
|
this.entryPoint.newConnection(connection);
|
|
120
167
|
this.connections.set(client, connection);
|
|
121
168
|
this.connectionsById.set(connection.id, client);
|
|
122
169
|
}
|
|
123
|
-
/**
|
|
124
|
-
* @param {Client} client
|
|
125
|
-
*/
|
|
126
170
|
onDisconnection(client) {
|
|
127
171
|
debug("onDisconnection %s", client.id);
|
|
128
172
|
if (this.connections.has(client)) {
|
|
@@ -136,12 +180,12 @@ class MqttProtocol extends Protocol {
|
|
|
136
180
|
}, this.config.disconnectDelay);
|
|
137
181
|
}
|
|
138
182
|
}
|
|
139
|
-
/**
|
|
140
|
-
* @param packet
|
|
141
|
-
* @param client
|
|
142
|
-
*/
|
|
143
183
|
onMessage(packet, client) {
|
|
144
|
-
|
|
184
|
+
// `client` is null for a publish aedes made itself — a will message, or
|
|
185
|
+
// one the broker originated. There is nobody to answer, which is what
|
|
186
|
+
// the two `_respond` calls below need.
|
|
187
|
+
if (client === null ||
|
|
188
|
+
packet.topic !== this.config.requestTopic ||
|
|
145
189
|
packet.payload === null ||
|
|
146
190
|
client.id === null) {
|
|
147
191
|
return;
|
|
@@ -155,11 +199,11 @@ class MqttProtocol extends Protocol {
|
|
|
155
199
|
try {
|
|
156
200
|
const payload = JSON.parse(packet.payload.toString());
|
|
157
201
|
debug("onMessage payload: %o", payload);
|
|
158
|
-
const request = new Request(payload, { connection });
|
|
202
|
+
const request = new request_1.Request(payload, { connection });
|
|
159
203
|
this.entryPoint.execute(connection, request, (response) => this._respond(client, response));
|
|
160
204
|
}
|
|
161
205
|
catch (error) {
|
|
162
|
-
this._respondError(client, error);
|
|
206
|
+
this._respondError(client, error instanceof Error ? error : new Error((0, node_util_1.inspect)(error)));
|
|
163
207
|
}
|
|
164
208
|
}
|
|
165
209
|
_respond(client, response) {
|
|
@@ -178,13 +222,16 @@ class MqttProtocol extends Protocol {
|
|
|
178
222
|
}
|
|
179
223
|
_respondError(client, error) {
|
|
180
224
|
const connection = this.connections.get(client);
|
|
181
|
-
const errReq = new Request({}, {
|
|
225
|
+
const errReq = new request_1.Request({}, {
|
|
182
226
|
connection,
|
|
183
227
|
error: kerror.getFrom(error, "unexpected_error", error.message),
|
|
184
228
|
});
|
|
185
|
-
this._respond(client, removeStacktrace(errReq.response.toJSON()));
|
|
229
|
+
this._respond(client, (0, stackTrace_1.removeStacktrace)(errReq.response.toJSON()));
|
|
186
230
|
}
|
|
187
|
-
_authorizePublish(
|
|
231
|
+
_authorizePublish(
|
|
232
|
+
// Aedes' own signature: it authorises broker-originated publishes too,
|
|
233
|
+
// and this method reads nothing off the client.
|
|
234
|
+
client, packet, callback) {
|
|
188
235
|
const topic = packet.topic.toString();
|
|
189
236
|
if (this.config.allowPubSub) {
|
|
190
237
|
if (topic === this.config.responseTopic) {
|
|
@@ -1,26 +1,90 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import type { NetworkEntryPoint } from "../networkEntryPoint";
|
|
2
|
+
/**
|
|
3
|
+
* @typeParam TConfig - the shape of `server.protocols.<name>` in the Kuzzle
|
|
4
|
+
* configuration, which is what `init` copies into
|
|
5
|
+
* `this.config`
|
|
6
|
+
*/
|
|
7
|
+
declare class Protocol<TConfig = Record<string, unknown>> {
|
|
8
|
+
private _maxRequestSize;
|
|
9
|
+
private _entryPoint;
|
|
10
|
+
name: string;
|
|
11
|
+
config: TConfig;
|
|
8
12
|
initCalled: boolean;
|
|
9
13
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
14
|
+
* The entry point that owns this protocol, and the request size limit it
|
|
15
|
+
* published. Both are set by `init` and read by everything a protocol does
|
|
16
|
+
* afterwards — a handler cannot run before the server it is registered on
|
|
17
|
+
* has been created.
|
|
18
|
+
*
|
|
19
|
+
* Declaring them nullable and reading them anyway is what the subclasses
|
|
20
|
+
* did: 20 unchecked dereferences across the three of them, each one taking
|
|
21
|
+
* on trust what `init` establishes. These two accessors say it once, where
|
|
22
|
+
* it can actually fail.
|
|
23
|
+
*/
|
|
24
|
+
get entryPoint(): NetworkEntryPoint;
|
|
25
|
+
get maxRequestSize(): number;
|
|
26
|
+
set maxRequestSize(size: number);
|
|
27
|
+
/**
|
|
28
|
+
* Normalises the two `init` call shapes into the entry point they both
|
|
29
|
+
* carry. Every subclass overriding `init` has to accept both shapes too —
|
|
30
|
+
* a subclass that only took the live one would not honour the contract its
|
|
31
|
+
* base class publishes, and `init(null, entryPoint)` on it would throw —
|
|
32
|
+
* so the normalisation lives here rather than being written out four times.
|
|
12
33
|
*
|
|
13
|
-
*
|
|
34
|
+
* The old shape puts the entry point second. Reading `args[1]`
|
|
35
|
+
* unconditionally is what the first conversion did: `init(entryPoint)`
|
|
36
|
+
* type-checked and threw on `entryPoint.config` (TD-41).
|
|
14
37
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
38
|
+
static entryPointOf(args: Protocol.InitArgs): NetworkEntryPoint;
|
|
39
|
+
constructor(name?: string);
|
|
40
|
+
/**
|
|
41
|
+
* Initializes the protocol against the entry point that owns it.
|
|
42
|
+
*
|
|
43
|
+
* Two call shapes reach this method, and only one of them is alive:
|
|
44
|
+
*
|
|
45
|
+
* - `init(entryPoint)` — what `entryPoint.js` calls on every protocol, and
|
|
46
|
+
* what a subclass should call on `super`;
|
|
47
|
+
* - `init(null, entryPoint)` — what the three in-tree subclasses currently
|
|
48
|
+
* call, and what a third-party protocol written against an older version
|
|
49
|
+
* still calls. Kept working, hence the implementation signature below.
|
|
50
|
+
*
|
|
51
|
+
* A *string* first argument is **not** a third shape. The parameter was
|
|
52
|
+
* deprecated in #1645 (2020-06-16) by an assert that reads
|
|
53
|
+
* `assert(this.name && !name)`, so passing a name here has thrown ever since
|
|
54
|
+
* — including when no name was given to the constructor, which is the only
|
|
55
|
+
* case the deprecation was meant to still allow. The signature says `null`
|
|
56
|
+
* because `null` is what this method can accept. Widening it to
|
|
57
|
+
* `string | null`, as the first TypeScript conversion did, advertised a call
|
|
58
|
+
* that throws. ADR-0001, TD-41 (#2728).
|
|
59
|
+
*
|
|
60
|
+
* The assert is left exactly as it is: fixing it would re-open a path that
|
|
61
|
+
* has been closed for five years, which is a decision about the plugin API,
|
|
62
|
+
* not about this method's type.
|
|
63
|
+
*/
|
|
64
|
+
init(entryPoint: NetworkEntryPoint): Promise<boolean>;
|
|
65
|
+
/** @deprecated pass the name to the constructor and call `init(entryPoint)` */
|
|
66
|
+
init(name: null, entryPoint: NetworkEntryPoint): Promise<boolean>;
|
|
67
|
+
broadcast(data?: unknown): void;
|
|
68
|
+
joinChannel(channel: string, connectionId: string): {
|
|
69
|
+
channel: string;
|
|
70
|
+
connectionId: string;
|
|
71
|
+
} | void;
|
|
72
|
+
leaveChannel(channel: string, connectionId: string): {
|
|
73
|
+
channel: string;
|
|
74
|
+
connectionId: string;
|
|
75
|
+
} | void;
|
|
76
|
+
notify(data?: unknown): void;
|
|
26
77
|
}
|
|
78
|
+
declare namespace Protocol {
|
|
79
|
+
/**
|
|
80
|
+
* The two shapes `Protocol.init` accepts, as one tuple union — see `init`.
|
|
81
|
+
* A subclass overriding `init` declares the same two overloads and takes
|
|
82
|
+
* this as its implementation signature, which is what makes the override
|
|
83
|
+
* assignable to the base method.
|
|
84
|
+
*
|
|
85
|
+
* It lives in a namespace merged with the class because `export =` leaves
|
|
86
|
+
* no room for a second export.
|
|
87
|
+
*/
|
|
88
|
+
type InitArgs = [entryPoint: NetworkEntryPoint] | [name: null, entryPoint: NetworkEntryPoint];
|
|
89
|
+
}
|
|
90
|
+
export = Protocol;
|