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,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,23 +19,23 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const
|
|
22
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
|
+
};
|
|
25
|
+
const request_1 = require("../../../api/request");
|
|
26
|
+
const kerror_1 = require("../../../kerror");
|
|
27
|
+
const errors_1 = require("../../../kerror/errors");
|
|
28
|
+
const debug_1 = __importDefault(require("../../../util/debug"));
|
|
29
|
+
const routePart_1 = __importDefault(require("./routePart"));
|
|
30
|
+
const kerror = (0, kerror_1.wrap)("network", "http");
|
|
31
|
+
const debug = (0, debug_1.default)("kuzzle:http:router");
|
|
28
32
|
/**
|
|
29
|
-
* Attach handler to routes and dispatch a HTTP
|
|
30
|
-
* message to the right handler
|
|
33
|
+
* Attach handler to routes and dispatch a HTTP message to the right handler
|
|
31
34
|
*
|
|
32
35
|
* Handlers will be called with the following arguments:
|
|
33
36
|
* - request: received HTTP request
|
|
34
37
|
* - response: HTTP response object
|
|
35
38
|
* - data: URL query arguments and/or POST data, if any
|
|
36
|
-
*
|
|
37
|
-
* @class Router
|
|
38
39
|
*/
|
|
39
40
|
class Router {
|
|
40
41
|
constructor() {
|
|
@@ -51,69 +52,51 @@ class Router {
|
|
|
51
52
|
this.defaultHeaders["Accept-Encoding"] = "gzip,deflate,identity";
|
|
52
53
|
}
|
|
53
54
|
this.routes = {
|
|
54
|
-
DELETE: new
|
|
55
|
-
GET: new
|
|
56
|
-
HEAD: new
|
|
57
|
-
PATCH: new
|
|
58
|
-
POST: new
|
|
59
|
-
PUT: new
|
|
55
|
+
DELETE: new routePart_1.default(),
|
|
56
|
+
GET: new routePart_1.default(),
|
|
57
|
+
HEAD: new routePart_1.default(),
|
|
58
|
+
PATCH: new routePart_1.default(),
|
|
59
|
+
POST: new routePart_1.default(),
|
|
60
|
+
PUT: new routePart_1.default(),
|
|
60
61
|
};
|
|
61
62
|
// Add an automatic HEAD route on the '/' url, answering with default headers
|
|
62
63
|
attach("/", (request, cb) => {
|
|
63
|
-
request.
|
|
64
|
+
request.response.configure({ result: {}, status: 200 });
|
|
64
65
|
cb(request);
|
|
65
66
|
}, this.routes.HEAD);
|
|
66
67
|
}
|
|
67
68
|
/**
|
|
68
69
|
* Attach a handler to a GET HTTP route
|
|
69
|
-
*
|
|
70
|
-
* @param {string} path
|
|
71
|
-
* @param {Function} handler
|
|
72
70
|
*/
|
|
73
71
|
get(path, handler) {
|
|
74
72
|
attach(path, handler, this.routes.GET);
|
|
75
73
|
}
|
|
76
74
|
/**
|
|
77
75
|
* Attach a handler to a POST HTTP route
|
|
78
|
-
*
|
|
79
|
-
* @param {string} path
|
|
80
|
-
* @param {Function} handler
|
|
81
76
|
*/
|
|
82
77
|
post(path, handler) {
|
|
83
78
|
attach(path, handler, this.routes.POST);
|
|
84
79
|
}
|
|
85
80
|
/**
|
|
86
81
|
* Attach a handler to a PUT HTTP route
|
|
87
|
-
*
|
|
88
|
-
* @param {string} path
|
|
89
|
-
* @param {Function} handler
|
|
90
82
|
*/
|
|
91
83
|
put(path, handler) {
|
|
92
84
|
attach(path, handler, this.routes.PUT);
|
|
93
85
|
}
|
|
94
86
|
/**
|
|
95
87
|
* Attach a handler to a PATCH HTTP route
|
|
96
|
-
*
|
|
97
|
-
* @param {string} path
|
|
98
|
-
* @param {Function} handler
|
|
99
88
|
*/
|
|
100
89
|
patch(path, handler) {
|
|
101
90
|
attach(path, handler, this.routes.PATCH);
|
|
102
91
|
}
|
|
103
92
|
/**
|
|
104
93
|
* Attach a handler to a DELETE HTTP route
|
|
105
|
-
*
|
|
106
|
-
* @param {string} path
|
|
107
|
-
* @param {Function} handler
|
|
108
94
|
*/
|
|
109
95
|
delete(path, handler) {
|
|
110
96
|
attach(path, handler, this.routes.DELETE);
|
|
111
97
|
}
|
|
112
98
|
/**
|
|
113
99
|
* Attach a handler to a HEAD HTTP route
|
|
114
|
-
*
|
|
115
|
-
* @param {string} path
|
|
116
|
-
* @param {Function} handler
|
|
117
100
|
*/
|
|
118
101
|
head(path, handler) {
|
|
119
102
|
attach(path, handler, this.routes.HEAD);
|
|
@@ -121,30 +104,33 @@ class Router {
|
|
|
121
104
|
/**
|
|
122
105
|
* Route an incoming HTTP message to the right handler
|
|
123
106
|
*
|
|
124
|
-
* @param
|
|
125
|
-
* @param {function} cb
|
|
107
|
+
* @param message - Parsed HTTP message
|
|
126
108
|
*/
|
|
127
109
|
route(message, cb) {
|
|
128
110
|
debug("Routing HTTP message: %a", message);
|
|
129
|
-
|
|
111
|
+
const method = message.method;
|
|
112
|
+
if (!isHttpVerb(method)) {
|
|
130
113
|
this.routeUnhandledHttpMethod(message, cb);
|
|
131
114
|
return;
|
|
132
115
|
}
|
|
133
116
|
let routeHandler;
|
|
134
117
|
try {
|
|
135
|
-
routeHandler = this.routes[
|
|
118
|
+
routeHandler = this.routes[method].getHandler(message);
|
|
136
119
|
// Set Headers if not present
|
|
137
120
|
routeHandler.request.response.setHeaders(this.defaultHeaders, true);
|
|
138
121
|
applyACAOHeader(message, routeHandler.request);
|
|
139
|
-
|
|
122
|
+
// Read once and invoke here: `invokeHandler` used to re-read the field
|
|
123
|
+
// this check had just proved non-null, one call away from the proof.
|
|
124
|
+
const handler = routeHandler.handler;
|
|
125
|
+
if (handler === null) {
|
|
140
126
|
throw kerror.get("url_not_found", routeHandler.url);
|
|
141
127
|
}
|
|
142
|
-
routeHandler.
|
|
128
|
+
handler(routeHandler.request, cb);
|
|
143
129
|
}
|
|
144
130
|
catch (err) {
|
|
145
131
|
let request;
|
|
146
|
-
if (!routeHandler
|
|
147
|
-
request = new Request({ requestId: message.requestId }, {});
|
|
132
|
+
if (!routeHandler?._request) {
|
|
133
|
+
request = new request_1.Request({ requestId: message.requestId }, {});
|
|
148
134
|
// Set Headers if not present
|
|
149
135
|
request.response.setHeaders(this.defaultHeaders, true);
|
|
150
136
|
applyACAOHeader(message, request);
|
|
@@ -152,7 +138,7 @@ class Router {
|
|
|
152
138
|
else {
|
|
153
139
|
request = routeHandler.request;
|
|
154
140
|
}
|
|
155
|
-
const e = err instanceof KuzzleError
|
|
141
|
+
const e = err instanceof errors_1.KuzzleError
|
|
156
142
|
? err
|
|
157
143
|
: kerror.getFrom(err, "unexpected_error", err.message);
|
|
158
144
|
replyWithError(cb, request, e);
|
|
@@ -161,17 +147,15 @@ class Router {
|
|
|
161
147
|
/**
|
|
162
148
|
* Route HTTP messages using an HTTP method that is not handled by Kuzzle's
|
|
163
149
|
* API, such as OPTIONS.
|
|
164
|
-
* @param {HttpMessage} message
|
|
165
|
-
* @param {function} cb
|
|
166
150
|
*/
|
|
167
151
|
routeUnhandledHttpMethod(message, cb) {
|
|
168
|
-
const requestContext = global.kuzzle.router.connections.get(message.connection.id), request = new Request({ requestId: message.requestId }, requestContext
|
|
152
|
+
const requestContext = global.kuzzle.router.connections.get(message.connection.id), request = new request_1.Request({ requestId: message.requestId }, requestContext?.toJSON());
|
|
169
153
|
// Set Headers if not present
|
|
170
154
|
request.response.setHeaders(this.defaultHeaders, true);
|
|
171
155
|
applyACAOHeader(message, request);
|
|
172
156
|
if (message.method === "OPTIONS") {
|
|
173
157
|
request.input.headers = message.headers;
|
|
174
|
-
request.
|
|
158
|
+
request.response.configure({ result: {}, status: 200 });
|
|
175
159
|
global.kuzzle.pipe("http:options", request, (error, result) => {
|
|
176
160
|
if (error) {
|
|
177
161
|
replyWithError(cb, request, error);
|
|
@@ -186,46 +170,55 @@ class Router {
|
|
|
186
170
|
}
|
|
187
171
|
}
|
|
188
172
|
/**
|
|
189
|
-
* Set the Header Access-Control-Allow-Origin based on the kuzzle configuration
|
|
190
|
-
*
|
|
191
|
-
* @param {HttpMessage} message
|
|
192
|
-
* @param {Request} request
|
|
173
|
+
* Set the Header Access-Control-Allow-Origin based on the kuzzle configuration
|
|
174
|
+
* and request origin
|
|
193
175
|
*/
|
|
194
176
|
function applyACAOHeader(message, request) {
|
|
195
|
-
if (message.headers
|
|
177
|
+
if (message.headers?.origin) {
|
|
196
178
|
request.response.setHeaders({
|
|
197
179
|
"Access-Control-Allow-Origin": message.headers.origin,
|
|
198
180
|
Vary: "Origin",
|
|
199
181
|
}, true);
|
|
200
182
|
}
|
|
201
183
|
}
|
|
184
|
+
/** The HTTP verbs this router attaches handlers for. */
|
|
185
|
+
const HTTP_VERBS = ["DELETE", "GET", "HEAD", "PATCH", "POST", "PUT"];
|
|
186
|
+
/** The same list as a set, which is what `isHttpVerb` asks. */
|
|
187
|
+
const HTTP_VERB_SET = new Set(HTTP_VERBS);
|
|
202
188
|
/**
|
|
203
|
-
*
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
|
|
189
|
+
* Whether an incoming message names one of them. `has(this.routes, method)`
|
|
190
|
+
* answered the same question, without telling the compiler which key it had
|
|
191
|
+
* just proved — so the six named route parts had to be `RoutePart |
|
|
192
|
+
* undefined` for its sake.
|
|
193
|
+
*/
|
|
194
|
+
function isHttpVerb(method) {
|
|
195
|
+
return HTTP_VERB_SET.has(method);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Attach a handler to a path and stores it to the target object
|
|
208
199
|
*/
|
|
209
200
|
function attach(path, handler, target) {
|
|
210
|
-
const sanitized = path
|
|
201
|
+
const sanitized = path.at(-1) === "/" ? path.slice(0, -1) : path;
|
|
211
202
|
if (!attachParts(sanitized.split("/"), handler, target)) {
|
|
212
203
|
throw kerror.get("duplicate_url", sanitized);
|
|
213
204
|
}
|
|
214
205
|
}
|
|
215
206
|
/**
|
|
216
|
-
*
|
|
217
|
-
* @param {Array<string>} parts
|
|
218
|
-
* @param {Function} routeHandler
|
|
219
|
-
* @param {RoutePart} target
|
|
220
|
-
* @param {Array<string>} placeholders
|
|
221
|
-
* @returns {Boolean} If false, failed to attach because of a duplicate
|
|
207
|
+
* @returns If false, failed to attach because of a duplicate
|
|
222
208
|
*/
|
|
223
209
|
function attachParts(parts, handler, target, placeholders = []) {
|
|
224
210
|
let part;
|
|
225
211
|
do {
|
|
226
212
|
part = parts.shift();
|
|
227
|
-
|
|
228
|
-
|
|
213
|
+
// `part?.length`: an exhausted list answers undefined, which is not an
|
|
214
|
+
// empty part to skip over — it is the end of the loop.
|
|
215
|
+
} while (parts.length > 0 && part?.length === 0);
|
|
216
|
+
if (part === undefined) {
|
|
217
|
+
// `attach()` splits a path, so there is always a first part — the empty
|
|
218
|
+
// string for "/". Nothing to attach here.
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
if (part.startsWith(":")) {
|
|
229
222
|
placeholders.push(part.substring(1));
|
|
230
223
|
part = "*";
|
|
231
224
|
}
|
|
@@ -242,17 +235,10 @@ function attachParts(parts, handler, target, placeholders = []) {
|
|
|
242
235
|
}
|
|
243
236
|
/**
|
|
244
237
|
* Reply to a callback function with an HTTP error
|
|
245
|
-
*
|
|
246
|
-
* @param {function} cb
|
|
247
|
-
* @param {Request} request
|
|
248
|
-
* @param {Error} error
|
|
249
238
|
*/
|
|
250
239
|
function replyWithError(cb, request, error) {
|
|
251
240
|
request.setError(error);
|
|
252
241
|
cb(request);
|
|
253
242
|
}
|
|
254
|
-
/**
|
|
255
|
-
* @type {Router}
|
|
256
|
-
*/
|
|
257
243
|
module.exports = Router;
|
|
258
244
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,46 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
import type { JSONObject } from "../../../types/JSONObject";
|
|
2
|
+
import { Request } from "../../../api/request";
|
|
3
|
+
import type HttpMessage from "../protocols/httpMessage";
|
|
4
|
+
import type { RouteHandlerFunction } from "./routeTypes";
|
|
2
5
|
/**
|
|
3
|
-
* Object returned by routePart.getHandler(),
|
|
4
|
-
*
|
|
5
|
-
* a requested route and the corresponding handler
|
|
6
|
-
* to invoke
|
|
6
|
+
* Object returned by routePart.getHandler(), containing the information
|
|
7
|
+
* gathered about a requested route and the corresponding handler to invoke
|
|
7
8
|
*
|
|
8
|
-
* @class RouteHandler
|
|
9
|
-
* @param {string} url - parsed URL
|
|
10
|
-
* @param {object} query - parsed query string
|
|
11
|
-
* @param {HttpMessage} message
|
|
12
9
|
* @throws {BadRequestError} If x-kuzzle-volatile HTTP header can not be parsed
|
|
13
10
|
* in JSON format
|
|
14
11
|
*/
|
|
15
12
|
declare class RouteHandler {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
url: any;
|
|
20
|
-
data: any;
|
|
13
|
+
handler: RouteHandlerFunction | null;
|
|
14
|
+
url: string;
|
|
15
|
+
data: JSONObject;
|
|
21
16
|
connection: {
|
|
22
|
-
connection:
|
|
23
|
-
headers: any;
|
|
24
|
-
id: any;
|
|
25
|
-
ips: any;
|
|
26
|
-
path: any;
|
|
27
|
-
protocol: string;
|
|
28
|
-
url: any;
|
|
29
|
-
verb: any;
|
|
30
|
-
};
|
|
17
|
+
connection: JSONObject;
|
|
31
18
|
};
|
|
19
|
+
_request: Request | null;
|
|
20
|
+
constructor(url: string, query: JSONObject, message: HttpMessage);
|
|
32
21
|
get request(): Request;
|
|
33
22
|
/**
|
|
34
23
|
* Add a parametric argument to the request object
|
|
35
|
-
* @param {string} name
|
|
36
|
-
* @param {string} value
|
|
37
|
-
*/
|
|
38
|
-
addArgument(name: string, value: string): void;
|
|
39
|
-
/**
|
|
40
|
-
* Invokes the registered handler
|
|
41
24
|
*
|
|
42
|
-
*
|
|
25
|
+
* `value` is optional because its only caller pairs a route's placeholder
|
|
26
|
+
* names with the values collected during the descent, and a name with no
|
|
27
|
+
* value has always been written through as `undefined` rather than skipped.
|
|
43
28
|
*/
|
|
44
|
-
|
|
29
|
+
addArgument(name: string, value: string | undefined): void;
|
|
45
30
|
}
|
|
46
|
-
|
|
31
|
+
export = RouteHandler;
|
|
@@ -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,19 +19,13 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
const kerror =
|
|
22
|
+
const request_1 = require("../../../api/request");
|
|
23
|
+
const kerror_1 = require("../../../kerror");
|
|
24
|
+
const kerror = (0, kerror_1.wrap)("network", "http");
|
|
24
25
|
/**
|
|
25
|
-
* Object returned by routePart.getHandler(),
|
|
26
|
-
*
|
|
27
|
-
* a requested route and the corresponding handler
|
|
28
|
-
* to invoke
|
|
26
|
+
* Object returned by routePart.getHandler(), containing the information
|
|
27
|
+
* gathered about a requested route and the corresponding handler to invoke
|
|
29
28
|
*
|
|
30
|
-
* @class RouteHandler
|
|
31
|
-
* @param {string} url - parsed URL
|
|
32
|
-
* @param {object} query - parsed query string
|
|
33
|
-
* @param {HttpMessage} message
|
|
34
29
|
* @throws {BadRequestError} If x-kuzzle-volatile HTTP header can not be parsed
|
|
35
30
|
* in JSON format
|
|
36
31
|
*/
|
|
@@ -51,51 +46,46 @@ class RouteHandler {
|
|
|
51
46
|
ips: message.ips,
|
|
52
47
|
path: message.path,
|
|
53
48
|
protocol: "http",
|
|
54
|
-
//
|
|
55
|
-
url: message.
|
|
49
|
+
// the request context's own deprecated alias of "path"
|
|
50
|
+
url: message.path,
|
|
56
51
|
verb: message.method,
|
|
57
52
|
},
|
|
58
53
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
54
|
+
// `Object.entries` rather than `Object.keys` + three indexed reads: the
|
|
55
|
+
// value comes back with the key, so there is nothing to look up twice and
|
|
56
|
+
// nothing for `noUncheckedIndexedAccess` to object to.
|
|
57
|
+
for (const [name, value] of Object.entries(message.headers)) {
|
|
58
|
+
if (name.toLowerCase() === "authorization" &&
|
|
59
|
+
value.toLowerCase().startsWith("bearer ")) {
|
|
60
|
+
this.data.jwt = value.substring("Bearer ".length);
|
|
63
61
|
}
|
|
64
|
-
else if (
|
|
62
|
+
else if (name.toLowerCase() === "x-kuzzle-volatile") {
|
|
65
63
|
try {
|
|
66
|
-
this.data.volatile = JSON.parse(
|
|
64
|
+
this.data.volatile = JSON.parse(value);
|
|
67
65
|
}
|
|
68
66
|
catch (e) {
|
|
69
|
-
|
|
67
|
+
// A malformed header is whatever JSON.parse threw, which is a
|
|
68
|
+
// SyntaxError in practice but is not typed as one.
|
|
69
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
70
|
+
throw kerror.getFrom(error, "volatile_parse_failed", error.message);
|
|
70
71
|
}
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
get request() {
|
|
75
|
-
|
|
76
|
-
this._request = new Request(this.data, this.connection);
|
|
77
|
-
}
|
|
76
|
+
this._request ?? (this._request = new request_1.Request(this.data, this.connection));
|
|
78
77
|
return this._request;
|
|
79
78
|
}
|
|
80
79
|
/**
|
|
81
80
|
* Add a parametric argument to the request object
|
|
82
|
-
*
|
|
83
|
-
*
|
|
81
|
+
*
|
|
82
|
+
* `value` is optional because its only caller pairs a route's placeholder
|
|
83
|
+
* names with the values collected during the descent, and a name with no
|
|
84
|
+
* value has always been written through as `undefined` rather than skipped.
|
|
84
85
|
*/
|
|
85
86
|
addArgument(name, value) {
|
|
86
87
|
this.data[name] = value;
|
|
87
88
|
}
|
|
88
|
-
/**
|
|
89
|
-
* Invokes the registered handler
|
|
90
|
-
*
|
|
91
|
-
* @param {Function} callback
|
|
92
|
-
*/
|
|
93
|
-
invokeHandler(callback) {
|
|
94
|
-
this.handler(this.request, callback);
|
|
95
|
-
}
|
|
96
89
|
}
|
|
97
|
-
/**
|
|
98
|
-
* @type {RouteHandler}
|
|
99
|
-
*/
|
|
100
90
|
module.exports = RouteHandler;
|
|
101
91
|
//# sourceMappingURL=routeHandler.js.map
|
|
@@ -1,35 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
import type HttpMessage from "../protocols/httpMessage";
|
|
2
|
+
import RouteHandler from "./routeHandler";
|
|
3
|
+
import type { RouteHandlerFunction } from "./routeTypes";
|
|
2
4
|
/**
|
|
3
5
|
* Defines a new route part
|
|
4
|
-
*
|
|
5
|
-
* @class RoutePart
|
|
6
6
|
*/
|
|
7
7
|
declare class RoutePart {
|
|
8
|
-
subparts:
|
|
9
|
-
placeholders:
|
|
10
|
-
handler:
|
|
8
|
+
subparts: Record<string, RoutePart>;
|
|
9
|
+
placeholders: string[] | null;
|
|
10
|
+
handler: RouteHandlerFunction | null;
|
|
11
|
+
constructor();
|
|
11
12
|
/**
|
|
12
13
|
* Checks if an url part already exists
|
|
13
|
-
*
|
|
14
|
-
* @param {string} part
|
|
15
|
-
* @returns {boolean}
|
|
16
14
|
*/
|
|
17
15
|
exists(part: string): boolean;
|
|
18
16
|
/**
|
|
19
|
-
* Gets the next element of an URL part, creating a new
|
|
20
|
-
* tree leaf if necessary
|
|
21
|
-
*
|
|
22
|
-
* @param {string} part
|
|
23
|
-
* @returns {RoutePart}
|
|
17
|
+
* Gets the next element of an URL part, creating a new tree leaf if necessary
|
|
24
18
|
*/
|
|
25
19
|
getNext(part: string): RoutePart;
|
|
26
20
|
/**
|
|
27
21
|
* Returns a RouteHandler instance corresponding to the provided URL
|
|
28
22
|
* Returns null if no handler was found
|
|
29
|
-
*
|
|
30
|
-
* @param {HttpMessage} message
|
|
31
|
-
* @returns {RouteHandler} registered function handler
|
|
32
23
|
*/
|
|
33
24
|
getHandler(message: HttpMessage): RouteHandler;
|
|
34
25
|
}
|
|
35
|
-
|
|
26
|
+
export = RoutePart;
|
|
@@ -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,100 +19,117 @@
|
|
|
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
|
-
|
|
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 querystring = __importStar(require("node:querystring"));
|
|
49
|
+
const URL = __importStar(require("node:url"));
|
|
50
|
+
const routeHandler_1 = __importDefault(require("./routeHandler"));
|
|
26
51
|
/**
|
|
27
52
|
* Defines a new route part
|
|
28
|
-
*
|
|
29
|
-
* @class RoutePart
|
|
30
53
|
*/
|
|
31
54
|
class RoutePart {
|
|
32
55
|
constructor() {
|
|
33
|
-
|
|
56
|
+
// Null-prototype: URL parts are attacker-controlled, and `{}` answers
|
|
57
|
+
// `subparts["toString"]` with a function. That is why every read below used
|
|
58
|
+
// to go through `has()` first; with no prototype to inherit from, a single
|
|
59
|
+
// indexed read is both safe and honest — it is `RoutePart | undefined`, and
|
|
60
|
+
// nothing has to be taken on trust between the check and the use.
|
|
61
|
+
this.subparts = Object.create(null);
|
|
34
62
|
this.placeholders = null;
|
|
35
63
|
this.handler = null;
|
|
36
64
|
}
|
|
37
65
|
/**
|
|
38
66
|
* Checks if an url part already exists
|
|
39
|
-
*
|
|
40
|
-
* @param {string} part
|
|
41
|
-
* @returns {boolean}
|
|
42
67
|
*/
|
|
43
68
|
exists(part) {
|
|
44
|
-
|
|
69
|
+
const subpart = this.subparts[part];
|
|
70
|
+
return subpart !== undefined && subpart.handler !== null;
|
|
45
71
|
}
|
|
46
72
|
/**
|
|
47
|
-
* Gets the next element of an URL part, creating a new
|
|
48
|
-
* tree leaf if necessary
|
|
49
|
-
*
|
|
50
|
-
* @param {string} part
|
|
51
|
-
* @returns {RoutePart}
|
|
73
|
+
* Gets the next element of an URL part, creating a new tree leaf if necessary
|
|
52
74
|
*/
|
|
53
75
|
getNext(part) {
|
|
54
|
-
|
|
55
|
-
|
|
76
|
+
let subpart = this.subparts[part];
|
|
77
|
+
if (subpart === undefined) {
|
|
78
|
+
subpart = new RoutePart();
|
|
79
|
+
this.subparts[part] = subpart;
|
|
56
80
|
}
|
|
57
|
-
return
|
|
81
|
+
return subpart;
|
|
58
82
|
}
|
|
59
83
|
/**
|
|
60
84
|
* Returns a RouteHandler instance corresponding to the provided URL
|
|
61
85
|
* Returns null if no handler was found
|
|
62
|
-
*
|
|
63
|
-
* @param {HttpMessage} message
|
|
64
|
-
* @returns {RouteHandler} registered function handler
|
|
65
86
|
*/
|
|
66
87
|
getHandler(message) {
|
|
67
88
|
// Do not use WHATWG API yet, stick with the legacy (and deprecated) URL
|
|
68
89
|
// There are two issues:
|
|
69
90
|
// - Heavy performance impact: https://github.com/nodejs/node/issues/30334
|
|
70
91
|
// - Double slash bug: https://github.com/nodejs/node/issues/30776
|
|
71
|
-
const parsed = URL.parse(message.
|
|
92
|
+
const parsed = URL.parse(message.path, true);
|
|
72
93
|
let pathname = parsed.pathname || ""; // pathname is set to null if empty
|
|
73
|
-
if (pathname
|
|
94
|
+
if (pathname.at(-1) === "/") {
|
|
74
95
|
pathname = pathname.slice(0, -1);
|
|
75
96
|
}
|
|
76
|
-
const routeHandler = new
|
|
97
|
+
const routeHandler = new routeHandler_1.default(pathname, parsed.query, message);
|
|
77
98
|
return getHandlerPart(this, pathname.split("/"), routeHandler);
|
|
78
99
|
}
|
|
79
100
|
}
|
|
80
101
|
/**
|
|
81
102
|
* Populate the routeHandler argument with parametric values, if any
|
|
82
103
|
*
|
|
83
|
-
* @param
|
|
84
|
-
* @param
|
|
85
|
-
* @param
|
|
86
|
-
* @param {Array<string>} placeholders - sorted array to populate the list of parametric values
|
|
87
|
-
* @returns {RouteHandler} registered function handler
|
|
104
|
+
* @param routePart - tree leaf to scan
|
|
105
|
+
* @param routeHandler - registered function handler
|
|
106
|
+
* @param placeholders - sorted array to populate the list of parametric values
|
|
88
107
|
*/
|
|
89
108
|
function getHandlerPart(routePart, parts, routeHandler, placeholders = []) {
|
|
90
|
-
let part;
|
|
91
|
-
|
|
109
|
+
let part = parts.shift();
|
|
110
|
+
while (part?.length === 0 && parts.length > 0) {
|
|
92
111
|
part = parts.shift();
|
|
93
|
-
}
|
|
112
|
+
}
|
|
94
113
|
if (part === undefined) {
|
|
95
114
|
routeHandler.handler = routePart.handler;
|
|
96
115
|
if (routePart.placeholders !== null) {
|
|
97
|
-
for (const i of
|
|
98
|
-
routeHandler.addArgument(
|
|
116
|
+
for (const [i, name] of routePart.placeholders.entries()) {
|
|
117
|
+
routeHandler.addArgument(name, placeholders[i]);
|
|
99
118
|
}
|
|
100
119
|
}
|
|
101
120
|
return routeHandler;
|
|
102
121
|
}
|
|
103
122
|
part = querystring.unescape(part);
|
|
104
|
-
|
|
105
|
-
|
|
123
|
+
const subpart = routePart.subparts[part];
|
|
124
|
+
if (subpart !== undefined) {
|
|
125
|
+
return getHandlerPart(subpart, parts, routeHandler, placeholders);
|
|
106
126
|
}
|
|
107
|
-
|
|
127
|
+
const wildcard = routePart.subparts["*"];
|
|
128
|
+
if (wildcard !== undefined) {
|
|
108
129
|
placeholders.push(part);
|
|
109
|
-
return getHandlerPart(
|
|
130
|
+
return getHandlerPart(wildcard, parts, routeHandler, placeholders);
|
|
110
131
|
}
|
|
111
132
|
return routeHandler;
|
|
112
133
|
}
|
|
113
|
-
/**
|
|
114
|
-
* @type {RoutePart}
|
|
115
|
-
*/
|
|
116
134
|
module.exports = RoutePart;
|
|
117
135
|
//# sourceMappingURL=routePart.js.map
|