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,17 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A native Kuzzle HTTP route, as exposed through `config.http.routes`.
|
|
3
|
+
*
|
|
4
|
+
* `url` is not declared in the literals below: it is derived from `path` by the
|
|
5
|
+
* loop at the end of this file, and kept as a (deprecated) alias for it.
|
|
6
|
+
*/
|
|
7
|
+
interface KuzzleHttpRoute {
|
|
8
|
+
verb: "get" | "post" | "put" | "patch" | "delete";
|
|
4
9
|
path: string;
|
|
5
10
|
controller: string;
|
|
6
11
|
action: string;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
verb: string;
|
|
10
|
-
path: string;
|
|
11
|
-
controller: string;
|
|
12
|
-
action: string;
|
|
13
|
-
deprecated: {
|
|
12
|
+
/** Set when the route is superseded by another one. */
|
|
13
|
+
deprecated?: {
|
|
14
14
|
since: string;
|
|
15
15
|
message: string;
|
|
16
16
|
};
|
|
17
|
-
|
|
17
|
+
/** Alias of `path`, populated below. */
|
|
18
|
+
url?: string;
|
|
19
|
+
openapi?: Record<string, any>;
|
|
20
|
+
}
|
|
21
|
+
declare const routes: KuzzleHttpRoute[];
|
|
22
|
+
export = routes;
|
|
@@ -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,8 +19,6 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
/* eslint sort-keys: 0 */
|
|
22
|
-
"use strict";
|
|
23
22
|
const routes = [
|
|
24
23
|
// GET (idempotent)
|
|
25
24
|
{ verb: "get", path: "/_me", controller: "auth", action: "getCurrentUser" },
|
|
@@ -941,12 +940,180 @@ const routes = [
|
|
|
941
940
|
path: "/users/:userId/api-keys/_create",
|
|
942
941
|
controller: "security",
|
|
943
942
|
action: "createApiKey",
|
|
943
|
+
openapi: {
|
|
944
|
+
description: "Creates a new API key for a user. The clear-text token is only ever returned in this response; it cannot be retrieved afterwards. If you are looking to manage your own API keys, use the `auth` controller instead.",
|
|
945
|
+
parameters: [
|
|
946
|
+
{
|
|
947
|
+
in: "path",
|
|
948
|
+
name: "userId",
|
|
949
|
+
schema: { type: "string" },
|
|
950
|
+
required: true,
|
|
951
|
+
description: "User kuid",
|
|
952
|
+
},
|
|
953
|
+
{
|
|
954
|
+
in: "query",
|
|
955
|
+
name: "_id",
|
|
956
|
+
schema: { type: "string" },
|
|
957
|
+
required: false,
|
|
958
|
+
description: "API key unique ID (auto-generated if not provided)",
|
|
959
|
+
},
|
|
960
|
+
{
|
|
961
|
+
in: "query",
|
|
962
|
+
name: "expiresIn",
|
|
963
|
+
schema: { type: "integer", default: -1 },
|
|
964
|
+
required: false,
|
|
965
|
+
description: "Expiration duration in milliseconds (-1 for no expiration)",
|
|
966
|
+
},
|
|
967
|
+
{
|
|
968
|
+
in: "query",
|
|
969
|
+
name: "refresh",
|
|
970
|
+
schema: {
|
|
971
|
+
type: "string",
|
|
972
|
+
enum: ["wait_for", "false"],
|
|
973
|
+
default: "wait_for",
|
|
974
|
+
},
|
|
975
|
+
required: false,
|
|
976
|
+
description: "If set to `wait_for`, waits for the API key to be indexed before responding",
|
|
977
|
+
},
|
|
978
|
+
],
|
|
979
|
+
requestBody: {
|
|
980
|
+
required: true,
|
|
981
|
+
content: {
|
|
982
|
+
"application/json": {
|
|
983
|
+
schema: {
|
|
984
|
+
type: "object",
|
|
985
|
+
required: ["description"],
|
|
986
|
+
properties: {
|
|
987
|
+
description: {
|
|
988
|
+
type: "string",
|
|
989
|
+
description: "API key description",
|
|
990
|
+
},
|
|
991
|
+
},
|
|
992
|
+
},
|
|
993
|
+
},
|
|
994
|
+
},
|
|
995
|
+
},
|
|
996
|
+
responses: {
|
|
997
|
+
200: {
|
|
998
|
+
description: "The created API key, including its clear-text token",
|
|
999
|
+
content: {
|
|
1000
|
+
"application/json": {
|
|
1001
|
+
schema: {
|
|
1002
|
+
type: "object",
|
|
1003
|
+
properties: {
|
|
1004
|
+
_id: { type: "string", description: "API key ID" },
|
|
1005
|
+
_source: {
|
|
1006
|
+
type: "object",
|
|
1007
|
+
properties: {
|
|
1008
|
+
userId: { type: "string" },
|
|
1009
|
+
description: { type: "string" },
|
|
1010
|
+
expiresAt: { type: "integer" },
|
|
1011
|
+
ttl: { type: "integer" },
|
|
1012
|
+
fingerprint: {
|
|
1013
|
+
type: "string",
|
|
1014
|
+
description: "SHA256 hash of the token",
|
|
1015
|
+
},
|
|
1016
|
+
token: {
|
|
1017
|
+
type: "string",
|
|
1018
|
+
description: "Authentication token",
|
|
1019
|
+
},
|
|
1020
|
+
},
|
|
1021
|
+
},
|
|
1022
|
+
},
|
|
1023
|
+
},
|
|
1024
|
+
},
|
|
1025
|
+
},
|
|
1026
|
+
},
|
|
1027
|
+
},
|
|
1028
|
+
},
|
|
944
1029
|
},
|
|
945
1030
|
{
|
|
946
1031
|
verb: "post",
|
|
947
1032
|
path: "/users/:userId/api-keys/_search",
|
|
948
1033
|
controller: "security",
|
|
949
1034
|
action: "searchApiKeys",
|
|
1035
|
+
openapi: {
|
|
1036
|
+
description: "Searches for a user's API keys. Supports the Elasticsearch Query DSL, or the Koncorde Filters DSL when `lang` is set to `koncorde`. If you are looking to manage your own API keys, use the `auth` controller instead.",
|
|
1037
|
+
parameters: [
|
|
1038
|
+
{
|
|
1039
|
+
in: "path",
|
|
1040
|
+
name: "userId",
|
|
1041
|
+
schema: { type: "string" },
|
|
1042
|
+
required: true,
|
|
1043
|
+
description: "User kuid",
|
|
1044
|
+
},
|
|
1045
|
+
{
|
|
1046
|
+
in: "query",
|
|
1047
|
+
name: "from",
|
|
1048
|
+
schema: { type: "integer", default: 0 },
|
|
1049
|
+
required: false,
|
|
1050
|
+
description: "Offset of the first result to return",
|
|
1051
|
+
},
|
|
1052
|
+
{
|
|
1053
|
+
in: "query",
|
|
1054
|
+
name: "size",
|
|
1055
|
+
schema: { type: "integer" },
|
|
1056
|
+
required: false,
|
|
1057
|
+
description: "Maximum number of API keys to return",
|
|
1058
|
+
},
|
|
1059
|
+
{
|
|
1060
|
+
in: "query",
|
|
1061
|
+
name: "lang",
|
|
1062
|
+
schema: {
|
|
1063
|
+
type: "string",
|
|
1064
|
+
enum: ["elasticsearch", "koncorde"],
|
|
1065
|
+
default: "elasticsearch",
|
|
1066
|
+
},
|
|
1067
|
+
required: false,
|
|
1068
|
+
description: "Query language used in the request body",
|
|
1069
|
+
},
|
|
1070
|
+
],
|
|
1071
|
+
requestBody: {
|
|
1072
|
+
required: false,
|
|
1073
|
+
content: {
|
|
1074
|
+
"application/json": {
|
|
1075
|
+
schema: {
|
|
1076
|
+
type: "object",
|
|
1077
|
+
description: "Search query (Elasticsearch Query DSL or Koncorde filters). Leave empty to match all of the user's API keys.",
|
|
1078
|
+
},
|
|
1079
|
+
},
|
|
1080
|
+
},
|
|
1081
|
+
},
|
|
1082
|
+
responses: {
|
|
1083
|
+
200: {
|
|
1084
|
+
description: "Matching API keys",
|
|
1085
|
+
content: {
|
|
1086
|
+
"application/json": {
|
|
1087
|
+
schema: {
|
|
1088
|
+
type: "object",
|
|
1089
|
+
properties: {
|
|
1090
|
+
hits: {
|
|
1091
|
+
type: "array",
|
|
1092
|
+
items: {
|
|
1093
|
+
type: "object",
|
|
1094
|
+
properties: {
|
|
1095
|
+
_id: { type: "string" },
|
|
1096
|
+
_source: {
|
|
1097
|
+
type: "object",
|
|
1098
|
+
properties: {
|
|
1099
|
+
userId: { type: "string" },
|
|
1100
|
+
description: { type: "string" },
|
|
1101
|
+
expiresAt: { type: "integer" },
|
|
1102
|
+
ttl: { type: "integer" },
|
|
1103
|
+
fingerprint: { type: "string" },
|
|
1104
|
+
},
|
|
1105
|
+
},
|
|
1106
|
+
},
|
|
1107
|
+
},
|
|
1108
|
+
},
|
|
1109
|
+
total: { type: "integer" },
|
|
1110
|
+
},
|
|
1111
|
+
},
|
|
1112
|
+
},
|
|
1113
|
+
},
|
|
1114
|
+
},
|
|
1115
|
+
},
|
|
1116
|
+
},
|
|
950
1117
|
},
|
|
951
1118
|
{
|
|
952
1119
|
verb: "post",
|
|
@@ -1295,6 +1462,109 @@ const routes = [
|
|
|
1295
1462
|
path: "/users/:userId/api-keys/:_id",
|
|
1296
1463
|
controller: "security",
|
|
1297
1464
|
action: "deleteApiKey",
|
|
1465
|
+
openapi: {
|
|
1466
|
+
description: "Deletes a user API key, identified by its `_id`. If you are looking to manage your own API keys, use the `auth` controller instead.",
|
|
1467
|
+
parameters: [
|
|
1468
|
+
{
|
|
1469
|
+
in: "path",
|
|
1470
|
+
name: "userId",
|
|
1471
|
+
schema: { type: "string" },
|
|
1472
|
+
required: true,
|
|
1473
|
+
description: "User kuid",
|
|
1474
|
+
},
|
|
1475
|
+
{
|
|
1476
|
+
in: "path",
|
|
1477
|
+
name: "_id",
|
|
1478
|
+
schema: { type: "string" },
|
|
1479
|
+
required: true,
|
|
1480
|
+
description: "API key unique ID",
|
|
1481
|
+
},
|
|
1482
|
+
{
|
|
1483
|
+
in: "query",
|
|
1484
|
+
name: "refresh",
|
|
1485
|
+
schema: {
|
|
1486
|
+
type: "string",
|
|
1487
|
+
enum: ["wait_for", "false"],
|
|
1488
|
+
default: "wait_for",
|
|
1489
|
+
},
|
|
1490
|
+
required: false,
|
|
1491
|
+
description: "If set to `wait_for`, waits for the deletion to be indexed before responding",
|
|
1492
|
+
},
|
|
1493
|
+
],
|
|
1494
|
+
responses: {
|
|
1495
|
+
200: {
|
|
1496
|
+
description: "The deleted API key ID",
|
|
1497
|
+
content: {
|
|
1498
|
+
"application/json": {
|
|
1499
|
+
schema: {
|
|
1500
|
+
type: "object",
|
|
1501
|
+
properties: {
|
|
1502
|
+
_id: { type: "string" },
|
|
1503
|
+
},
|
|
1504
|
+
},
|
|
1505
|
+
},
|
|
1506
|
+
},
|
|
1507
|
+
},
|
|
1508
|
+
},
|
|
1509
|
+
},
|
|
1510
|
+
},
|
|
1511
|
+
{
|
|
1512
|
+
verb: "delete",
|
|
1513
|
+
path: "/users/:userId/api-keys",
|
|
1514
|
+
controller: "security",
|
|
1515
|
+
action: "deleteApiKey",
|
|
1516
|
+
openapi: {
|
|
1517
|
+
description: "Deletes a user API key, identified by its clear-text `key` or its `fingerprint` instead of its `_id`. Exactly one of `key` or `fingerprint` must be provided. If you are looking to manage your own API keys, use the `auth` controller instead.",
|
|
1518
|
+
parameters: [
|
|
1519
|
+
{
|
|
1520
|
+
in: "path",
|
|
1521
|
+
name: "userId",
|
|
1522
|
+
schema: { type: "string" },
|
|
1523
|
+
required: true,
|
|
1524
|
+
description: "User kuid",
|
|
1525
|
+
},
|
|
1526
|
+
{
|
|
1527
|
+
in: "query",
|
|
1528
|
+
name: "key",
|
|
1529
|
+
schema: { type: "string" },
|
|
1530
|
+
required: false,
|
|
1531
|
+
description: "Clear-text API key to delete",
|
|
1532
|
+
},
|
|
1533
|
+
{
|
|
1534
|
+
in: "query",
|
|
1535
|
+
name: "fingerprint",
|
|
1536
|
+
schema: { type: "string" },
|
|
1537
|
+
required: false,
|
|
1538
|
+
description: "SHA256 fingerprint of the API key to delete",
|
|
1539
|
+
},
|
|
1540
|
+
{
|
|
1541
|
+
in: "query",
|
|
1542
|
+
name: "refresh",
|
|
1543
|
+
schema: {
|
|
1544
|
+
type: "string",
|
|
1545
|
+
enum: ["wait_for", "false"],
|
|
1546
|
+
default: "wait_for",
|
|
1547
|
+
},
|
|
1548
|
+
required: false,
|
|
1549
|
+
description: "If set to `wait_for`, waits for the deletion to be indexed before responding",
|
|
1550
|
+
},
|
|
1551
|
+
],
|
|
1552
|
+
responses: {
|
|
1553
|
+
200: {
|
|
1554
|
+
description: "The deleted API key ID",
|
|
1555
|
+
content: {
|
|
1556
|
+
"application/json": {
|
|
1557
|
+
schema: {
|
|
1558
|
+
type: "object",
|
|
1559
|
+
properties: {
|
|
1560
|
+
_id: { type: "string" },
|
|
1561
|
+
},
|
|
1562
|
+
},
|
|
1563
|
+
},
|
|
1564
|
+
},
|
|
1565
|
+
},
|
|
1566
|
+
},
|
|
1567
|
+
},
|
|
1298
1568
|
},
|
|
1299
1569
|
{
|
|
1300
1570
|
verb: "delete",
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import type { KuzzleRequest } from "./request";
|
|
2
2
|
declare class RateLimiter {
|
|
3
|
-
loginsPerSecond
|
|
4
|
-
frame
|
|
5
|
-
frameResetTimer
|
|
3
|
+
private readonly loginsPerSecond;
|
|
4
|
+
private frame;
|
|
5
|
+
private frameResetTimer;
|
|
6
|
+
constructor();
|
|
6
7
|
init(): void;
|
|
7
8
|
/**
|
|
8
9
|
* Return a boolean indicating whether a request execution is allowed as per
|
|
@@ -14,5 +15,14 @@ declare class RateLimiter {
|
|
|
14
15
|
* @param {Request} request
|
|
15
16
|
* @returns {Boolean}
|
|
16
17
|
*/
|
|
17
|
-
isAllowed(request:
|
|
18
|
+
isAllowed(request: KuzzleRequest): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* The rate limit a user's profiles impose, as a single number: 0 is
|
|
21
|
+
* unlimited, and one unlimited profile makes the whole set unlimited.
|
|
22
|
+
*
|
|
23
|
+
* Extracted from isAllowed(), whose cognitive complexity this loop pushed
|
|
24
|
+
* past the gate once the null-user branch above was added.
|
|
25
|
+
*/
|
|
26
|
+
private profilesLimit;
|
|
18
27
|
}
|
|
28
|
+
export = RateLimiter;
|
|
@@ -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,7 +19,6 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
"use strict";
|
|
22
22
|
class RateLimiter {
|
|
23
23
|
constructor() {
|
|
24
24
|
this.loginsPerSecond = global.kuzzle.config.limits.loginsPerSecond;
|
|
@@ -41,34 +41,62 @@ class RateLimiter {
|
|
|
41
41
|
async isAllowed(request) {
|
|
42
42
|
const { controller, action } = request.input;
|
|
43
43
|
let count = 0;
|
|
44
|
-
|
|
44
|
+
// Assigned in both branches below, before the only read at the end.
|
|
45
|
+
let limit;
|
|
45
46
|
if (controller === "auth" && action === "login") {
|
|
46
|
-
|
|
47
|
+
// A request context can carry no connection id — internal requests do
|
|
48
|
+
// not have one. They have always shared a single bucket under the
|
|
49
|
+
// stringified `null`; keeping that key preserves the limit rather than
|
|
50
|
+
// quietly lifting it for whoever can reach this without a connection.
|
|
51
|
+
const cid = request.context.connection.id ?? "null";
|
|
47
52
|
count = this.frame[cid] = (this.frame[cid] || 0) + 1;
|
|
48
53
|
limit = this.loginsPerSecond;
|
|
49
54
|
}
|
|
50
55
|
else {
|
|
51
|
-
const
|
|
56
|
+
const user = request.getUser();
|
|
57
|
+
// No user resolved means no profile, and a profile's rateLimit is the
|
|
58
|
+
// only thing this branch reads. Falling through would leave `limit` at
|
|
59
|
+
// -1 and deny the request, which is not what "unlimited" means.
|
|
60
|
+
if (user === null) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
// A user resolved from a request has been stored, so it has an id; the
|
|
64
|
+
// fallback is what makes the frame key readable to the compiler, and it
|
|
65
|
+
// is the same key an id-less user would have produced before.
|
|
66
|
+
const { profileIds } = user;
|
|
67
|
+
const _id = user._id ?? "null";
|
|
52
68
|
// By definition, auth:logout should be unrestricted
|
|
53
69
|
if (_id !== "-1" && controller === "auth" && action === "logout") {
|
|
54
70
|
return true;
|
|
55
71
|
}
|
|
56
|
-
|
|
57
|
-
for (let i = 0; i < profiles.length; i++) {
|
|
58
|
-
const { rateLimit = 0 } = profiles[i];
|
|
59
|
-
if (limit === 0 || rateLimit === 0) {
|
|
60
|
-
limit = 0;
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
limit = Math.max(limit, rateLimit);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
72
|
+
limit = await this.profilesLimit(profileIds);
|
|
66
73
|
if (limit > 0) {
|
|
67
74
|
count = this.frame[_id] = (this.frame[_id] || 0) + 1;
|
|
68
75
|
}
|
|
69
76
|
}
|
|
70
77
|
return limit === 0 || count <= limit;
|
|
71
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* The rate limit a user's profiles impose, as a single number: 0 is
|
|
81
|
+
* unlimited, and one unlimited profile makes the whole set unlimited.
|
|
82
|
+
*
|
|
83
|
+
* Extracted from isAllowed(), whose cognitive complexity this loop pushed
|
|
84
|
+
* past the gate once the null-user branch above was added.
|
|
85
|
+
*/
|
|
86
|
+
async profilesLimit(profileIds) {
|
|
87
|
+
const profiles = await global.kuzzle.ask("core:security:profile:mGet", profileIds);
|
|
88
|
+
let limit = -1;
|
|
89
|
+
for (const profile of profiles) {
|
|
90
|
+
const { rateLimit = 0 } = profile;
|
|
91
|
+
if (limit === 0 || rateLimit === 0) {
|
|
92
|
+
limit = 0;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
limit = Math.max(limit, rateLimit);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return limit;
|
|
99
|
+
}
|
|
72
100
|
}
|
|
73
101
|
module.exports = RateLimiter;
|
|
74
102
|
//# sourceMappingURL=rateLimiter.js.map
|
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import { JSONObject } from "
|
|
1
|
+
import type { JSONObject } from "../../types/JSONObject";
|
|
2
2
|
import { RequestInput } from "./requestInput";
|
|
3
3
|
import { RequestResponse } from "./requestResponse";
|
|
4
4
|
import { RequestContext } from "./requestContext";
|
|
5
5
|
import { KuzzleError } from "../../kerror/errors";
|
|
6
|
-
import { Deprecation } from "../../types";
|
|
6
|
+
import type { Deprecation } from "../../types";
|
|
7
|
+
import type { User } from "../../model/security/user";
|
|
8
|
+
declare const _internalId = "internalId\u200B";
|
|
9
|
+
declare const _status = "status\u200B";
|
|
10
|
+
declare const _input = "input\u200B";
|
|
11
|
+
declare const _error = "error\u200B";
|
|
12
|
+
declare const _result = "result\u200B";
|
|
13
|
+
declare const _context = "context\u200B";
|
|
14
|
+
declare const _timestamp = "timestamp\u200B";
|
|
15
|
+
declare const _response = "response\u200B";
|
|
16
|
+
declare const _deprecations = "deprecations\u200B";
|
|
7
17
|
/**
|
|
8
18
|
* The `KuzzleRequest` class represents a request being processed by Kuzzle.
|
|
9
19
|
*
|
|
@@ -16,6 +26,15 @@ export declare class KuzzleRequest {
|
|
|
16
26
|
* Request external ID (specified by "requestId" or random uuid)
|
|
17
27
|
*/
|
|
18
28
|
id: string;
|
|
29
|
+
[_internalId]: string;
|
|
30
|
+
[_status]: number;
|
|
31
|
+
[_input]: RequestInput;
|
|
32
|
+
[_context]: RequestContext;
|
|
33
|
+
[_error]: KuzzleError | null;
|
|
34
|
+
[_result]: unknown;
|
|
35
|
+
[_response]: RequestResponse | null;
|
|
36
|
+
[_deprecations]: Deprecation[] | undefined;
|
|
37
|
+
[_timestamp]: number;
|
|
19
38
|
constructor(data: any, options?: any);
|
|
20
39
|
/**
|
|
21
40
|
* Request internal ID
|
|
@@ -25,6 +44,13 @@ export declare class KuzzleRequest {
|
|
|
25
44
|
* Deprecation warnings for the API action
|
|
26
45
|
*/
|
|
27
46
|
get deprecations(): Deprecation[] | void;
|
|
47
|
+
/**
|
|
48
|
+
* The setter `RequestResponse.deprecations` has always assigned through to
|
|
49
|
+
* here, and there was no setter to assign to: in a module — which is strict
|
|
50
|
+
* mode — writing to an accessor-only property throws a TypeError. Nothing in
|
|
51
|
+
* the tree exercised it, so the throw was never seen.
|
|
52
|
+
*/
|
|
53
|
+
set deprecations(deprecations: Deprecation[] | undefined);
|
|
28
54
|
/**
|
|
29
55
|
* Request timestamp (in Epoch-micro)
|
|
30
56
|
*/
|
|
@@ -65,7 +91,7 @@ export declare class KuzzleRequest {
|
|
|
65
91
|
/**
|
|
66
92
|
* Sets the request result and status
|
|
67
93
|
*
|
|
68
|
-
* @deprecated Use request.response.configure
|
|
94
|
+
* @deprecated Use `request.response.configure({ result, status, headers, format })`
|
|
69
95
|
*
|
|
70
96
|
* @param result Request result. Will be converted to JSON unless `raw` option is set to `true`
|
|
71
97
|
* @param options Additional options
|
|
@@ -87,6 +113,18 @@ export declare class KuzzleRequest {
|
|
|
87
113
|
*/
|
|
88
114
|
raw?: boolean;
|
|
89
115
|
}): void;
|
|
116
|
+
/**
|
|
117
|
+
* Sets the result and nothing else, after the checks every result goes
|
|
118
|
+
* through. What `response.configure({ result })` calls; plugins use that.
|
|
119
|
+
*
|
|
120
|
+
* @internal
|
|
121
|
+
*/
|
|
122
|
+
assignResult(result: unknown): void;
|
|
123
|
+
/**
|
|
124
|
+
* @throws {InternalError} if the result is an Error
|
|
125
|
+
* @throws {api.assert.forbidden_stream} for an HttpStream outside HTTP
|
|
126
|
+
*/
|
|
127
|
+
private assertResultAllowed;
|
|
90
128
|
/**
|
|
91
129
|
* Add a deprecation for a used component, this can be action/controller/parameters...
|
|
92
130
|
*
|
|
@@ -108,12 +146,16 @@ export declare class KuzzleRequest {
|
|
|
108
146
|
*
|
|
109
147
|
* This can be used to match Koncorde filter rather than the Request object
|
|
110
148
|
* because it has properties defined with invisible unicode characters.
|
|
149
|
+
*
|
|
150
|
+
* The `!`s are not claims: each of these may be `null`, as on the request
|
|
151
|
+
* itself. The copy is typed as v2.56.0 typed it, non-nullable, because
|
|
152
|
+
* nullable members broke code compiled against that.
|
|
111
153
|
*/
|
|
112
154
|
pojo(): {
|
|
113
155
|
context: {
|
|
114
156
|
connection: import("./requestContext").Connection;
|
|
115
|
-
token: import("
|
|
116
|
-
user:
|
|
157
|
+
token: import("../../..").KuzzleToken;
|
|
158
|
+
user: User;
|
|
117
159
|
};
|
|
118
160
|
deprecations: void | Deprecation[];
|
|
119
161
|
error: KuzzleError;
|
|
@@ -137,10 +179,17 @@ export declare class KuzzleRequest {
|
|
|
137
179
|
};
|
|
138
180
|
/**
|
|
139
181
|
* Return the requested controller
|
|
182
|
+
*
|
|
183
|
+
* `null` on a request built without one. Declared `string` all the same,
|
|
184
|
+
* as v2.56.0 declared it: a `string | null` return broke code compiled
|
|
185
|
+
* against it. `input.controller` is the nullable form.
|
|
140
186
|
*/
|
|
141
187
|
getController(): string;
|
|
142
188
|
/**
|
|
143
189
|
* Returns the requested controller's action
|
|
190
|
+
*
|
|
191
|
+
* `null` and declared `string` as {@link getController} is;
|
|
192
|
+
* `input.action` is the nullable form.
|
|
144
193
|
*/
|
|
145
194
|
getAction(): string;
|
|
146
195
|
/**
|
|
@@ -278,13 +327,15 @@ export declare class KuzzleRequest {
|
|
|
278
327
|
*/
|
|
279
328
|
getArray(name: string, def?: [] | undefined): any[];
|
|
280
329
|
/**
|
|
281
|
-
*
|
|
282
|
-
*
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
* If the request argument is a String instead of an array, it will be JSON parsed
|
|
286
|
-
* and returned if it is a valid JSON array, otherwise it will return the string splitted on `,`.
|
|
330
|
+
* Gets a parameter from a request arguments as an array, also accepting a
|
|
331
|
+
* **comma-separated string** — the form the API documents for `ids` on
|
|
332
|
+
* `document:mGet`, `document:mExists` and `security:mGetUsers`, and the only
|
|
333
|
+
* form it documents for `server:healthCheck`'s `services`.
|
|
287
334
|
*
|
|
335
|
+
* An array is returned as is. A string is, over HTTP only, first parsed as a
|
|
336
|
+
* JSON array — the one way to pass an element that contains a comma — and
|
|
337
|
+
* otherwise split on `,`, on every protocol. Unlike `getArray`, a single
|
|
338
|
+
* query-string value (`?ids=a`) is therefore a one-element array.
|
|
288
339
|
*
|
|
289
340
|
* @param name parameter name
|
|
290
341
|
* @param def default value to return if the parameter is not set
|
|
@@ -293,6 +344,12 @@ export declare class KuzzleRequest {
|
|
|
293
344
|
* value provided
|
|
294
345
|
* @throws {api.assert.invalid_type} If the fetched parameter is not an array or a string
|
|
295
346
|
*/
|
|
347
|
+
getArrayOrCsv(name: string, def?: [] | undefined): unknown[];
|
|
348
|
+
/**
|
|
349
|
+
* @deprecated Use {@link getArrayOrCsv}, which it is an alias of: same
|
|
350
|
+
* behaviour, named after what it does. Kept because `KuzzleRequest` is part
|
|
351
|
+
* of the public plugin API.
|
|
352
|
+
*/
|
|
296
353
|
getArrayLegacy(name: string, def?: [] | undefined): any[];
|
|
297
354
|
/**
|
|
298
355
|
* Gets a parameter from a request arguments and checks that it is an object
|
|
@@ -331,12 +388,20 @@ export declare class KuzzleRequest {
|
|
|
331
388
|
getTimestamp(name: string): number;
|
|
332
389
|
/**
|
|
333
390
|
* Returns the index specified in the request
|
|
391
|
+
*
|
|
392
|
+
* With `{ required: false }` and no index, this returns `null`. It is
|
|
393
|
+
* declared `string` all the same: that is what v2.56.0 declared, and a
|
|
394
|
+
* `string | null` overload broke code compiled against it — so Kuzzle's own
|
|
395
|
+
* callers of the optional form annotate the result `string | null`.
|
|
334
396
|
*/
|
|
335
397
|
getIndex({ required }?: {
|
|
336
398
|
required?: boolean;
|
|
337
399
|
}): string;
|
|
338
400
|
/**
|
|
339
401
|
* Returns the collection specified in the request
|
|
402
|
+
*
|
|
403
|
+
* `null` under the same conditions as {@link getIndex}, and declared
|
|
404
|
+
* `string` for the same reason.
|
|
340
405
|
*/
|
|
341
406
|
getCollection({ required }?: {
|
|
342
407
|
required?: boolean;
|
|
@@ -364,6 +429,8 @@ export declare class KuzzleRequest {
|
|
|
364
429
|
* - `ifMissing`: method behavior if the ID is missing (default: 'error')
|
|
365
430
|
* - `generator`: function used to generate an ID (default: 'uuid.v4')
|
|
366
431
|
*
|
|
432
|
+
* With `ifMissing: 'ignore'` and no ID, this returns `null`. It is declared
|
|
433
|
+
* `string` all the same, for the reason given on {@link getIndex}.
|
|
367
434
|
*/
|
|
368
435
|
getId(options?: {
|
|
369
436
|
ifMissing?: "error" | "generate" | "ignore";
|
|
@@ -375,8 +442,11 @@ export declare class KuzzleRequest {
|
|
|
375
442
|
getKuid(): string | null;
|
|
376
443
|
/**
|
|
377
444
|
* Returns the current user
|
|
445
|
+
*
|
|
446
|
+
* `null` when the request carries none. Declared `User`, as v2.56.0
|
|
447
|
+
* declared it; `context.user` is the nullable form.
|
|
378
448
|
*/
|
|
379
|
-
getUser():
|
|
449
|
+
getUser(): User;
|
|
380
450
|
/**
|
|
381
451
|
* Returns the search body query according to the http method
|
|
382
452
|
*/
|
|
@@ -467,3 +537,4 @@ export declare class KuzzleRequest {
|
|
|
467
537
|
}
|
|
468
538
|
export declare class Request extends KuzzleRequest {
|
|
469
539
|
}
|
|
540
|
+
export {};
|