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,12 +1,8 @@
|
|
|
1
|
-
export = kuzzleStateEnum;
|
|
2
|
-
type kuzzleStateEnum = number;
|
|
3
|
-
/**
|
|
4
|
-
* @typedef {number} kuzzleStateEnum
|
|
5
|
-
*/
|
|
6
1
|
/**
|
|
7
|
-
* Enum for Kuzzle's state
|
|
8
|
-
*
|
|
9
|
-
*
|
|
2
|
+
* Enum for Kuzzle's state.
|
|
3
|
+
*
|
|
4
|
+
* A frozen object rather than a TypeScript `enum`: the JavaScript exported a
|
|
5
|
+
* frozen one, and an `enum` emits an ordinary, mutable object.
|
|
10
6
|
*/
|
|
11
7
|
declare const kuzzleStateEnum: Readonly<{
|
|
12
8
|
NOT_ENOUGH_NODES: 4;
|
|
@@ -14,7 +10,15 @@ declare const kuzzleStateEnum: Readonly<{
|
|
|
14
10
|
SHUTTING_DOWN: 3;
|
|
15
11
|
STARTING: 1;
|
|
16
12
|
}>;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
/**
|
|
14
|
+
* The value and the type keep the same name, which is what lets `kuzzle.ts`
|
|
15
|
+
* write both `kuzzleStateEnum.RUNNING` and `get state(): kuzzleStateEnum` —
|
|
16
|
+
* the two spellings the JavaScript supported through a `@typedef`.
|
|
17
|
+
*
|
|
18
|
+
* Derived from the object rather than declared, so it cannot drift. It widens
|
|
19
|
+
* to `number`, which is exactly what `@typedef {number} kuzzleStateEnum` said:
|
|
20
|
+
* `Object.freeze` over a plain literal gives `Readonly<{ … : number }>`, not
|
|
21
|
+
* literal types, so no call site has to change.
|
|
22
|
+
*/
|
|
23
|
+
type kuzzleStateEnum = (typeof kuzzleStateEnum)[keyof typeof kuzzleStateEnum];
|
|
24
|
+
export = kuzzleStateEnum;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*
|
|
2
3
|
* Kuzzle, a backend software, self-hostable and ready to use
|
|
3
4
|
* to power modern apps
|
|
@@ -18,14 +19,11 @@
|
|
|
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
|
/**
|
|
23
|
-
*
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
*
|
|
27
|
-
* @readOnly
|
|
28
|
-
* @enum {kuzzleStateEnum}
|
|
23
|
+
* Enum for Kuzzle's state.
|
|
24
|
+
*
|
|
25
|
+
* A frozen object rather than a TypeScript `enum`: the JavaScript exported a
|
|
26
|
+
* frozen one, and an `enum` emits an ordinary, mutable object.
|
|
29
27
|
*/
|
|
30
28
|
const kuzzleStateEnum = Object.freeze({
|
|
31
29
|
NOT_ENOUGH_NODES: 4,
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
export function load(vaultKey: any, secretsFile: any): Vault;
|
|
2
1
|
import { Vault } from "kuzzle-vault";
|
|
2
|
+
declare function load(vaultKey?: string, secretsFile?: string, useNewAlgorithm?: boolean): Vault;
|
|
3
|
+
declare const _default: {
|
|
4
|
+
load: typeof load;
|
|
5
|
+
};
|
|
6
|
+
export = _default;
|
package/dist/lib/kuzzle/vault.js
CHANGED
|
@@ -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,42 +19,53 @@
|
|
|
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
|
|
22
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
|
+
};
|
|
25
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
26
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
27
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
28
|
+
const kuzzle_vault_1 = require("kuzzle-vault");
|
|
29
|
+
const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
|
|
27
30
|
// The Vault package remove the variable from env after reading it and we have
|
|
28
31
|
// to instantiate the Vault two times with Kaaf (one before init and one after)
|
|
32
|
+
//
|
|
33
|
+
// `| undefined` is the truth until the first call assigns it. A module-scope
|
|
34
|
+
// `let` escapes TypeScript's definite-assignment analysis, so `: string` passed
|
|
35
|
+
// strict while being false for every read before that first assignment
|
|
36
|
+
// (TD-57, #2760).
|
|
29
37
|
let ENV_VAULT_KEY;
|
|
30
|
-
function load(vaultKey, secretsFile) {
|
|
38
|
+
function load(vaultKey, secretsFile, useNewAlgorithm = false) {
|
|
31
39
|
// Using KaaF kuzzle is an npm package and is located under node_modules folder
|
|
32
40
|
// We need to get back to root folder of the project to get the secret file
|
|
33
41
|
const defaultEncryptedSecretsFile = __dirname.endsWith("/node_modules/kuzzle/lib/kuzzle")
|
|
34
|
-
?
|
|
35
|
-
:
|
|
42
|
+
? node_path_1.default.resolve(`${__dirname}/../../../../config/secrets.enc.json`)
|
|
43
|
+
: node_path_1.default.resolve(`${__dirname}/../../config/secrets.enc.json`);
|
|
36
44
|
const encryptedSecretsFile = secretsFile ||
|
|
37
45
|
process.env.KUZZLE_SECRETS_FILE ||
|
|
38
46
|
defaultEncryptedSecretsFile;
|
|
39
47
|
let key = vaultKey;
|
|
40
|
-
if (
|
|
41
|
-
(!
|
|
48
|
+
if ((0, isEmpty_1.default)(vaultKey) &&
|
|
49
|
+
(!(0, isEmpty_1.default)(process.env.KUZZLE_VAULT_KEY) || !(0, isEmpty_1.default)(ENV_VAULT_KEY))) {
|
|
42
50
|
// Keep the vault key value when reading it from the env
|
|
43
51
|
key = ENV_VAULT_KEY = process.env.KUZZLE_VAULT_KEY || ENV_VAULT_KEY;
|
|
44
52
|
}
|
|
45
|
-
const fileExists =
|
|
53
|
+
const fileExists = node_fs_1.default.existsSync(encryptedSecretsFile);
|
|
46
54
|
// Abort if a custom secrets file has been provided but Kuzzle can't load it
|
|
47
|
-
if (!
|
|
48
|
-
|
|
55
|
+
if (!(0, isEmpty_1.default)(process.env.KUZZLE_SECRETS_FILE) || !(0, isEmpty_1.default)(secretsFile)) {
|
|
56
|
+
(0, node_assert_1.default)(fileExists, `A secret file has been provided but Kuzzle cannot find it at "${encryptedSecretsFile}".`);
|
|
49
57
|
}
|
|
50
58
|
// Abort if a secret file is found (default or custom)
|
|
51
59
|
// but no vault key has been provided
|
|
52
|
-
|
|
60
|
+
(0, node_assert_1.default)(!(fileExists && (0, isEmpty_1.default)(key)), "A secret file has been provided but Kuzzle cannot find the Vault key. Aborting.");
|
|
53
61
|
// Abort if a vault key has been provided
|
|
54
62
|
// but no secrets file can be loaded (default or custom)
|
|
55
|
-
|
|
56
|
-
const vault = new Vault(key
|
|
63
|
+
(0, node_assert_1.default)(!(!(0, isEmpty_1.default)(key) && !fileExists), `A Vault key is present but Kuzzle cannot find the secret file at "${encryptedSecretsFile}". Aborting.`);
|
|
64
|
+
const vault = new kuzzle_vault_1.Vault(key, {
|
|
65
|
+
cipher: useNewAlgorithm
|
|
66
|
+
? kuzzle_vault_1.CryptonomiconCipher.AES_256_GCM
|
|
67
|
+
: kuzzle_vault_1.CryptonomiconCipher.AES_256_CBC,
|
|
68
|
+
});
|
|
57
69
|
if (key) {
|
|
58
70
|
vault.decrypt(encryptedSecretsFile);
|
|
59
71
|
}
|
|
@@ -1,17 +1,32 @@
|
|
|
1
|
-
import { Policy, OptimizedPolicy, OptimizedPolicyRestrictions } from "../../types/index";
|
|
2
|
-
import { Role } from "./role";
|
|
3
|
-
import { KuzzleRequest } from "../../../index";
|
|
1
|
+
import type { Policy, OptimizedPolicy, OptimizedPolicyRestrictions } from "../../types/index";
|
|
2
|
+
import type { Role } from "./role";
|
|
3
|
+
import type { KuzzleRequest } from "../../../index";
|
|
4
4
|
/** @internal */
|
|
5
5
|
type InternalProfilePolicy = {
|
|
6
6
|
role: Role;
|
|
7
|
+
/**
|
|
8
|
+
* Carried straight off the optimized policy, which may not have one.
|
|
9
|
+
* Declared as always present all the same, as v2.56.0 declared it: this
|
|
10
|
+
* reaches plugins through `getPolicies()`.
|
|
11
|
+
*/
|
|
7
12
|
restrictedTo: OptimizedPolicyRestrictions;
|
|
8
13
|
};
|
|
9
14
|
/**
|
|
10
15
|
* @class Profile
|
|
11
16
|
*/
|
|
12
17
|
export declare class Profile {
|
|
18
|
+
/**
|
|
19
|
+
* `null` until the profile is stored — see ADR-0001, TD-62. Declared
|
|
20
|
+
* `string` all the same, as v2.56.0 declared it (see `User._id`).
|
|
21
|
+
*/
|
|
13
22
|
_id: string;
|
|
14
23
|
policies: Policy[];
|
|
24
|
+
/**
|
|
25
|
+
* Unset while the profile is persisted — `persistToDatabase` clears it so the
|
|
26
|
+
* derived form is never written — and the two readers below test for
|
|
27
|
+
* `undefined` (ADR-0001, TD-40 / TD-56). Declared as always present all the
|
|
28
|
+
* same, as v2.56.0 declared it.
|
|
29
|
+
*/
|
|
15
30
|
optimizedPolicies: OptimizedPolicy[];
|
|
16
31
|
rateLimit: number;
|
|
17
32
|
constructor();
|
|
@@ -40,7 +55,7 @@ export declare class Profile {
|
|
|
40
55
|
* @returns {Promise}
|
|
41
56
|
*/
|
|
42
57
|
validateDefinition({ strict }?: {
|
|
43
|
-
strict?: boolean;
|
|
58
|
+
strict?: boolean | undefined;
|
|
44
59
|
}): Promise<boolean>;
|
|
45
60
|
/**
|
|
46
61
|
* Resolves an array of rights related to the profile's roles.
|
|
@@ -48,7 +63,21 @@ export declare class Profile {
|
|
|
48
63
|
* @returns {Promise}
|
|
49
64
|
*/
|
|
50
65
|
getRights(): Promise<{}>;
|
|
51
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Hashes a rights item into the key it is stored under.
|
|
68
|
+
*
|
|
69
|
+
* Placeholder on purpose: `profileRepository` replaces it with
|
|
70
|
+
* `global.kuzzle.hash` at startup, and the `false` returned here is exactly
|
|
71
|
+
* how that patching detects an un-patched class. The overload signature
|
|
72
|
+
* describes the patched function; the implementation is the stub.
|
|
73
|
+
*
|
|
74
|
+
* The patch is `global.kuzzle.hash`, which returns a **number** (`murmur.v3`)
|
|
75
|
+
* — hence `number | false` in practice. Declared `any`, v2.56.0's public
|
|
76
|
+
* type being `() => boolean`: code compiled against that reads a `boolean`
|
|
77
|
+
* back or assigns a `boolean`-returning stub, and no narrower type accepts
|
|
78
|
+
* both that and the patch.
|
|
79
|
+
*/
|
|
80
|
+
static _hash(rightsItem?: unknown): any;
|
|
52
81
|
validateRateLimit(): void;
|
|
53
82
|
}
|
|
54
83
|
export {};
|
|
@@ -72,9 +72,9 @@ class Profile {
|
|
|
72
72
|
if (!global.kuzzle) {
|
|
73
73
|
throw kerror.get("security", "profile", "uninitialized", this._id);
|
|
74
74
|
}
|
|
75
|
-
return bluebird_1.default.map(this.optimizedPolicies, async ({ restrictedTo, roleId }) => {
|
|
75
|
+
return bluebird_1.default.map(this.optimizedPolicies ?? [], async ({ restrictedTo, roleId }) => {
|
|
76
76
|
const role = await global.kuzzle.ask("core:security:role:get", roleId);
|
|
77
|
-
return { restrictedTo, role };
|
|
77
|
+
return { restrictedTo: restrictedTo, role };
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
@@ -209,9 +209,10 @@ class Profile {
|
|
|
209
209
|
value: actionRights,
|
|
210
210
|
};
|
|
211
211
|
const rightsObject = {
|
|
212
|
-
//
|
|
213
|
-
//
|
|
214
|
-
|
|
212
|
+
// `String()` is what the computed key does implicitly anyway
|
|
213
|
+
// (`_hash` returns a number, or `false` while un-patched), and
|
|
214
|
+
// it is what makes that return type legal here — see `_hash`.
|
|
215
|
+
[String(this.constructor._hash(rightsItem))]: rightsItem,
|
|
215
216
|
};
|
|
216
217
|
lodash_1.default.assignWith(profileRights, rightsObject, rights_1.default.merge);
|
|
217
218
|
}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
+
interface PolicyRight {
|
|
2
|
+
value?: string | boolean;
|
|
3
|
+
}
|
|
1
4
|
/**
|
|
2
5
|
* Merge function for policies rights
|
|
3
|
-
* @param {Object} prev existing policies rights
|
|
4
|
-
* @param {Object} cur new policies rights to merge
|
|
5
6
|
*
|
|
6
|
-
* @
|
|
7
|
+
* @param prev existing policies rights
|
|
8
|
+
* @param cur new policies rights to merge
|
|
9
|
+
*
|
|
10
|
+
* @returns the merged policies rights
|
|
7
11
|
*/
|
|
8
|
-
|
|
12
|
+
declare function merge(prev: PolicyRight | undefined, cur: PolicyRight): PolicyRight;
|
|
13
|
+
declare const _default: {
|
|
14
|
+
merge: typeof merge;
|
|
15
|
+
};
|
|
16
|
+
export = _default;
|
|
@@ -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,16 +19,16 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return obj && (obj.value === "allowed" || obj.value === true);
|
|
22
|
+
function isAllowed(right) {
|
|
23
|
+
return Boolean(right && (right.value === "allowed" || right.value === true));
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* Merge function for policies rights
|
|
27
|
-
* @param {Object} prev existing policies rights
|
|
28
|
-
* @param {Object} cur new policies rights to merge
|
|
29
27
|
*
|
|
30
|
-
* @
|
|
28
|
+
* @param prev existing policies rights
|
|
29
|
+
* @param cur new policies rights to merge
|
|
30
|
+
*
|
|
31
|
+
* @returns the merged policies rights
|
|
31
32
|
*/
|
|
32
33
|
function merge(prev, cur) {
|
|
33
34
|
cur.value = isAllowed(cur) || isAllowed(prev) ? "allowed" : "denied";
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { ControllerRight, ControllerRights } from "../../types/controllers/ControllerRights";
|
|
2
|
-
import { KuzzleRequest } from "../../../index";
|
|
3
|
-
import { OptimizedPolicyRestrictions } from "../../types/PolicyRestrictions";
|
|
1
|
+
import type { ControllerRight, ControllerRights } from "../../types/controllers/ControllerRights";
|
|
2
|
+
import type { KuzzleRequest } from "../../../index";
|
|
3
|
+
import type { OptimizedPolicyRestrictions } from "../../types/PolicyRestrictions";
|
|
4
4
|
/**
|
|
5
5
|
* @class Role
|
|
6
6
|
*/
|
|
7
7
|
export declare class Role {
|
|
8
8
|
controllers: ControllerRights;
|
|
9
|
+
/**
|
|
10
|
+
* The constructor does not set it; `RoleRepository` does, on the way out of
|
|
11
|
+
* the store. See ADR-0001, TD-62.
|
|
12
|
+
*/
|
|
9
13
|
_id: string;
|
|
10
14
|
constructor();
|
|
11
15
|
/**
|
|
@@ -23,7 +27,7 @@ export declare class Role {
|
|
|
23
27
|
* @param {Map<string, string[]>} restrictedTo Restricted indexes
|
|
24
28
|
* @returns {Boolean} resolves to a Boolean value
|
|
25
29
|
*/
|
|
26
|
-
checkRestrictions(index: string, collection: string, restrictedTo
|
|
30
|
+
checkRestrictions(index: string, collection: string, restrictedTo?: OptimizedPolicyRestrictions): boolean;
|
|
27
31
|
/**
|
|
28
32
|
* Verifies that a controller rights definition is correct
|
|
29
33
|
*
|
|
@@ -75,7 +75,8 @@ class Role {
|
|
|
75
75
|
(this.controllers.ms || this.controllers.memoryStorage)) {
|
|
76
76
|
controllerRights = this.controllers.ms || this.controllers.memoryStorage;
|
|
77
77
|
}
|
|
78
|
-
else if (
|
|
78
|
+
else if (request.input.controller !== null &&
|
|
79
|
+
(0, safeObject_1.has)(this.controllers, request.input.controller)) {
|
|
79
80
|
controllerRights = this.controllers[request.input.controller];
|
|
80
81
|
}
|
|
81
82
|
else if (this.controllers["*"] !== undefined) {
|
|
@@ -84,11 +85,13 @@ class Role {
|
|
|
84
85
|
else {
|
|
85
86
|
return false;
|
|
86
87
|
}
|
|
87
|
-
if (controllerRights
|
|
88
|
+
if (controllerRights === undefined ||
|
|
89
|
+
controllerRights.actions === undefined) {
|
|
88
90
|
return false;
|
|
89
91
|
}
|
|
90
92
|
let actionRights;
|
|
91
|
-
if (
|
|
93
|
+
if (request.input.action !== null &&
|
|
94
|
+
(0, safeObject_1.has)(controllerRights.actions, request.input.action)) {
|
|
92
95
|
actionRights = controllerRights.actions[request.input.action];
|
|
93
96
|
}
|
|
94
97
|
else if (controllerRights.actions["*"] !== undefined) {
|
|
@@ -125,7 +128,10 @@ class Role {
|
|
|
125
128
|
* @param {Map<string, string[]>} restrictedTo Restricted indexes
|
|
126
129
|
* @returns {Boolean} resolves to a Boolean value
|
|
127
130
|
*/
|
|
128
|
-
checkRestrictions(index, collection,
|
|
131
|
+
checkRestrictions(index, collection,
|
|
132
|
+
// Optional, and the first line already reads it as such: an optimized
|
|
133
|
+
// policy carries `restrictedTo` only when the profile restricted it.
|
|
134
|
+
restrictedTo) {
|
|
129
135
|
// If no restrictions, we allow the action:
|
|
130
136
|
if (!restrictedTo || restrictedTo.size === 0) {
|
|
131
137
|
return true;
|
|
@@ -191,8 +197,8 @@ class Role {
|
|
|
191
197
|
*/
|
|
192
198
|
canLogIn() {
|
|
193
199
|
for (const controllerKey of ["auth", "*"]) {
|
|
194
|
-
|
|
195
|
-
|
|
200
|
+
const controller = this.controllers[controllerKey];
|
|
201
|
+
if (controller) {
|
|
196
202
|
for (const actionKey of ["login", "*"]) {
|
|
197
203
|
const action = controller.actions[actionKey];
|
|
198
204
|
if (typeof action === "boolean" && action) {
|
|
@@ -17,6 +17,14 @@ export interface TokenContent {
|
|
|
17
17
|
* Represents a token that identify an user.
|
|
18
18
|
*/
|
|
19
19
|
export declare class Token implements TokenContent {
|
|
20
|
+
/**
|
|
21
|
+
* The constructor writes `null` for any of these five its `TokenContent`
|
|
22
|
+
* did not carry, and a `Token` is routinely built empty —
|
|
23
|
+
* `Token.Anonymous()` and the repository's cache miss both do it (ADR-0001,
|
|
24
|
+
* TD-62). They are declared non-nullable all the same, as v2.56.0 declared
|
|
25
|
+
* them: plugins read `request.context.token.userId` as a `string`, and
|
|
26
|
+
* `| null` broke that under `strict`.
|
|
27
|
+
*/
|
|
20
28
|
_id: string;
|
|
21
29
|
expiresAt: number;
|
|
22
30
|
ttl: number;
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
import { Profile } from "./profile";
|
|
2
|
-
import { KuzzleRequest } from "../../../index";
|
|
1
|
+
import type { Profile } from "./profile";
|
|
2
|
+
import type { KuzzleRequest } from "../../../index";
|
|
3
3
|
/**
|
|
4
4
|
* @class User
|
|
5
5
|
*/
|
|
6
6
|
export declare class User {
|
|
7
|
+
/**
|
|
8
|
+
* `null` until the user is stored — see ADR-0001, TD-62. Declared `string`
|
|
9
|
+
* all the same, as v2.56.0 declared it: `request.context.user._id` read as
|
|
10
|
+
* a `string` is everywhere in plugins and applications, and a
|
|
11
|
+
* `string | null` broke every one of them under `strict`.
|
|
12
|
+
*/
|
|
7
13
|
_id: string;
|
|
8
14
|
profileIds: string[];
|
|
9
15
|
strategies: any;
|
|
@@ -109,20 +109,23 @@ class User {
|
|
|
109
109
|
const profilesPolicies = await Promise.all(profiles.map((profile) => profile.getAllowedPolicies(request)));
|
|
110
110
|
// Every target must be allowed by at least one profile
|
|
111
111
|
for (const target of targets) {
|
|
112
|
+
// Held in locals: the closures below lose the narrowing this guard gives
|
|
113
|
+
// the properties.
|
|
114
|
+
const { index, collections } = target;
|
|
112
115
|
// Skip targets with no Index or Collection
|
|
113
|
-
if (!
|
|
116
|
+
if (!index || !collections) {
|
|
114
117
|
continue;
|
|
115
118
|
}
|
|
116
119
|
// TODO: Support Wildcard
|
|
117
|
-
if (
|
|
120
|
+
if (index.includes("*")) {
|
|
118
121
|
return false;
|
|
119
122
|
}
|
|
120
|
-
for (const collection of
|
|
123
|
+
for (const collection of collections) {
|
|
121
124
|
// TODO: Support Wildcard
|
|
122
125
|
if (collection.includes("*")) {
|
|
123
126
|
return false;
|
|
124
127
|
}
|
|
125
|
-
const isTargetAllowed = profilesPolicies.some((policies) => policies.some((policy) => policy.role.checkRestrictions(
|
|
128
|
+
const isTargetAllowed = profilesPolicies.some((policies) => policies.some((policy) => policy.role.checkRestrictions(index, collection, policy.restrictedTo)));
|
|
126
129
|
if (!isTargetAllowed) {
|
|
127
130
|
return false;
|
|
128
131
|
}
|
|
@@ -1,49 +1,78 @@
|
|
|
1
|
-
|
|
1
|
+
import type { JSONObject } from "../../types/JSONObject";
|
|
2
|
+
import type { KuzzleRequest } from "../../api/request";
|
|
3
|
+
import BaseModel from "./baseModel";
|
|
4
|
+
import type { User } from "../security/user";
|
|
5
|
+
interface ApiKeyCreateOptions {
|
|
6
|
+
creatorId?: string | null;
|
|
7
|
+
apiKeyId?: string | null;
|
|
8
|
+
refresh?: boolean | string;
|
|
9
|
+
bypassMaxTTL?: boolean;
|
|
10
|
+
}
|
|
2
11
|
declare class ApiKey extends BaseModel {
|
|
12
|
+
userId: string;
|
|
13
|
+
description: string;
|
|
14
|
+
expiresAt: number;
|
|
15
|
+
ttl: number | string;
|
|
16
|
+
token: string;
|
|
17
|
+
fingerprint: string;
|
|
18
|
+
constructor(_source: JSONObject, _id?: string | null);
|
|
3
19
|
/**
|
|
4
20
|
* @override
|
|
5
21
|
*/
|
|
6
|
-
|
|
22
|
+
_afterDelete(): Promise<void>;
|
|
23
|
+
serialize({ includeToken }?: {
|
|
24
|
+
includeToken?: boolean;
|
|
25
|
+
}): {
|
|
26
|
+
_id: string | null;
|
|
27
|
+
_source: JSONObject;
|
|
28
|
+
};
|
|
7
29
|
/**
|
|
8
30
|
* @override
|
|
9
31
|
*/
|
|
10
|
-
static
|
|
32
|
+
static get collection(): string;
|
|
33
|
+
/**
|
|
34
|
+
* @override
|
|
35
|
+
*/
|
|
36
|
+
static get fields(): string[];
|
|
11
37
|
/**
|
|
12
38
|
* Creates a new API key for an user
|
|
13
39
|
*
|
|
14
|
-
* @param
|
|
15
|
-
* @param
|
|
16
|
-
* @param
|
|
17
|
-
* @param
|
|
18
|
-
*
|
|
19
|
-
* @returns {Promise<ApiKey>}
|
|
40
|
+
* @param user
|
|
41
|
+
* @param expiresIn - API key expiration date in ms format
|
|
42
|
+
* @param description
|
|
43
|
+
* @param options - creatorId (null), apiKeyId (null), refresh (null), bypassMaxTTL (false)
|
|
20
44
|
*/
|
|
21
|
-
static create(user: User, expiresIn: string, description: string, { creatorId, apiKeyId, refresh, bypassMaxTTL }?:
|
|
45
|
+
static create(user: User, expiresIn: number | string, description: string, { creatorId, apiKeyId, refresh, bypassMaxTTL, }?: ApiKeyCreateOptions): Promise<ApiKey>;
|
|
22
46
|
/**
|
|
23
47
|
* Loads an user API key from the database
|
|
24
48
|
*
|
|
25
|
-
* @param
|
|
26
|
-
* @param
|
|
27
|
-
*
|
|
28
|
-
* @returns {Promise<ApiKey>}
|
|
49
|
+
* @param userId - User ID
|
|
50
|
+
* @param id - API key ID
|
|
29
51
|
*/
|
|
30
52
|
static load(userId: string, id: string): Promise<ApiKey>;
|
|
31
53
|
/**
|
|
32
|
-
*
|
|
54
|
+
* Loads an user API key from the database by its fingerprint
|
|
33
55
|
*
|
|
34
|
-
* @param
|
|
35
|
-
* @param
|
|
56
|
+
* @param userId - User ID
|
|
57
|
+
* @param fingerprint - API key fingerprint
|
|
58
|
+
*/
|
|
59
|
+
static loadByFingerprint(userId: string, fingerprint: string): Promise<ApiKey>;
|
|
60
|
+
/**
|
|
61
|
+
* Loads a user's API key from a request, identified by its `_id`, its
|
|
62
|
+
* clear-text `key` or its `fingerprint` (in that order of precedence).
|
|
36
63
|
*
|
|
37
|
-
* @
|
|
64
|
+
* @param userId - User ID
|
|
65
|
+
* @param request - Request carrying the `_id`, `key` or `fingerprint` argument
|
|
38
66
|
*/
|
|
39
|
-
static
|
|
40
|
-
constructor(_source: any, _id?: any);
|
|
67
|
+
static loadFromRequest(userId: string, request: KuzzleRequest): Promise<ApiKey>;
|
|
41
68
|
/**
|
|
42
|
-
*
|
|
69
|
+
* Deletes API keys for an user
|
|
70
|
+
*
|
|
71
|
+
* @param user
|
|
72
|
+
* @param options - refresh (null)
|
|
43
73
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}): any;
|
|
74
|
+
static deleteByUser(user: User, { refresh }?: {
|
|
75
|
+
refresh?: boolean | string;
|
|
76
|
+
}): Promise<void>;
|
|
48
77
|
}
|
|
49
|
-
|
|
78
|
+
export = ApiKey;
|