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,27 @@
|
|
|
1
|
-
import { JSONObject } from "
|
|
1
|
+
import type { JSONObject } from "../../types/JSONObject";
|
|
2
2
|
import { Profile } from "../../model/security/profile";
|
|
3
3
|
import { ObjectRepository } from "../shared/ObjectRepository";
|
|
4
4
|
/** @internal */
|
|
5
|
+
/**
|
|
6
|
+
* The two sibling repositories this one reaches through, the same shape
|
|
7
|
+
* `UserRepository` declares for its own side of the module.
|
|
8
|
+
*/
|
|
9
|
+
interface SecurityModule {
|
|
10
|
+
role: {
|
|
11
|
+
loadRoles(ids: string[]): Promise<unknown[]>;
|
|
12
|
+
};
|
|
13
|
+
user: {
|
|
14
|
+
scroll(scrollId: string, ttl?: string): Promise<JSONObject>;
|
|
15
|
+
search(query: JSONObject, options?: JSONObject): Promise<JSONObject>;
|
|
16
|
+
update(id: string | null, profileIds: string[], content: JSONObject, options: JSONObject): Promise<unknown>;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** @internal */
|
|
5
20
|
type CreateOrReplaceOptions = {
|
|
6
21
|
method?: string;
|
|
7
22
|
refresh?: string;
|
|
8
23
|
strict?: boolean;
|
|
9
|
-
userId?: string;
|
|
24
|
+
userId?: string | null;
|
|
10
25
|
};
|
|
11
26
|
/** @internal */
|
|
12
27
|
type ValidateAndSaveProfileOptions = {
|
|
@@ -27,11 +42,11 @@ type UpdateOptions = {
|
|
|
27
42
|
* @extends ObjectRepository
|
|
28
43
|
*/
|
|
29
44
|
export declare class ProfileRepository extends ObjectRepository<Profile> {
|
|
30
|
-
private module;
|
|
45
|
+
private readonly module;
|
|
31
46
|
/**
|
|
32
47
|
* @constructor
|
|
33
48
|
*/
|
|
34
|
-
constructor(securityModule:
|
|
49
|
+
constructor(securityModule: SecurityModule);
|
|
35
50
|
init(): void;
|
|
36
51
|
/**
|
|
37
52
|
* Loads a Profile
|
|
@@ -109,9 +124,9 @@ export declare class ProfileRepository extends ObjectRepository<Profile> {
|
|
|
109
124
|
* @override
|
|
110
125
|
*/
|
|
111
126
|
delete(profile: Profile, { refresh, onAssignedUsers, userId }?: {
|
|
112
|
-
refresh?: string;
|
|
113
|
-
onAssignedUsers?: string;
|
|
114
|
-
userId?: string;
|
|
127
|
+
refresh?: string | undefined;
|
|
128
|
+
onAssignedUsers?: string | undefined;
|
|
129
|
+
userId?: string | undefined;
|
|
115
130
|
}): Promise<void>;
|
|
116
131
|
/**
|
|
117
132
|
* From a Profile object, returns a serialized object ready to be persisted
|
|
@@ -160,17 +175,7 @@ export declare class ProfileRepository extends ObjectRepository<Profile> {
|
|
|
160
175
|
private optimizePolicy;
|
|
161
176
|
toDTO(dto: Profile): JSONObject;
|
|
162
177
|
deleteFromDatabase(id: string, options: JSONObject): any;
|
|
163
|
-
search(searchBody: JSONObject, options: JSONObject): Promise<
|
|
164
|
-
|
|
165
|
-
hits: any[];
|
|
166
|
-
scrollId: any;
|
|
167
|
-
total: any;
|
|
168
|
-
}>;
|
|
169
|
-
scroll(id: string, ttl: number): Promise<{
|
|
170
|
-
aggregations: any;
|
|
171
|
-
hits: any[];
|
|
172
|
-
scrollId: any;
|
|
173
|
-
total: any;
|
|
174
|
-
}>;
|
|
178
|
+
search(searchBody: JSONObject, options: JSONObject): Promise<import("../shared/ObjectRepository").ObjectRepositorySearchAnswer>;
|
|
179
|
+
scroll(id: string, ttl: number): Promise<import("../shared/ObjectRepository").ObjectRepositorySearchAnswer>;
|
|
175
180
|
}
|
|
176
181
|
export {};
|
|
@@ -195,10 +195,16 @@ class ProfileRepository extends ObjectRepository_1.ObjectRepository {
|
|
|
195
195
|
*/
|
|
196
196
|
async loadOneFromDatabase(id) {
|
|
197
197
|
try {
|
|
198
|
-
|
|
198
|
+
const profile = await super.loadOneFromDatabase(id);
|
|
199
|
+
// The base resolves `null` for a document with no `_id`; for a profile
|
|
200
|
+
// that is the same "not found" as a 404.
|
|
201
|
+
if (profile === null) {
|
|
202
|
+
throw kerror.get("security", "profile", "not_found", id);
|
|
203
|
+
}
|
|
204
|
+
return profile;
|
|
199
205
|
}
|
|
200
206
|
catch (err) {
|
|
201
|
-
if (err.status === 404) {
|
|
207
|
+
if (err instanceof Error && "status" in err && err.status === 404) {
|
|
202
208
|
throw kerror.get("security", "profile", "not_found", id);
|
|
203
209
|
}
|
|
204
210
|
throw err;
|
|
@@ -297,7 +303,7 @@ class ProfileRepository extends ObjectRepository_1.ObjectRepository {
|
|
|
297
303
|
* @override
|
|
298
304
|
*/
|
|
299
305
|
async delete(profile, { refresh = "false", onAssignedUsers = "fail", userId = "-1" } = {}) {
|
|
300
|
-
if (["admin", "default", "anonymous"].includes(profile
|
|
306
|
+
if (["admin", "default", "anonymous"].includes(this.idOf(profile))) {
|
|
301
307
|
throw kerror.get("security", "profile", "cannot_delete");
|
|
302
308
|
}
|
|
303
309
|
const query = {
|
|
@@ -334,8 +340,9 @@ class ProfileRepository extends ObjectRepository_1.ObjectRepository {
|
|
|
334
340
|
throw kerror.get("security", "profile", "in_use");
|
|
335
341
|
}
|
|
336
342
|
}
|
|
337
|
-
|
|
338
|
-
await this.
|
|
343
|
+
const profileId = this.idOf(profile);
|
|
344
|
+
await this.deleteFromDatabase(profileId, { refresh });
|
|
345
|
+
await this.deleteFromCache(profileId);
|
|
339
346
|
}
|
|
340
347
|
/**
|
|
341
348
|
* From a Profile object, returns a serialized object ready to be persisted
|
|
@@ -370,13 +377,15 @@ class ProfileRepository extends ObjectRepository_1.ObjectRepository {
|
|
|
370
377
|
policiesRoles.indexOf("anonymous") === -1) {
|
|
371
378
|
throw kerror.get("security", "profile", "missing_anonymous_role");
|
|
372
379
|
}
|
|
373
|
-
|
|
380
|
+
// Remove optimized policies. `undefined!`: declared as always present,
|
|
381
|
+
// see Profile.optimizedPolicies.
|
|
382
|
+
profile.optimizedPolicies = undefined;
|
|
374
383
|
await super.persistToDatabase(profile, {
|
|
375
384
|
method,
|
|
376
385
|
refresh,
|
|
377
386
|
retryOnConflict,
|
|
378
387
|
});
|
|
379
|
-
const updatedProfile = await this.loadOneFromDatabase(profile
|
|
388
|
+
const updatedProfile = await this.loadOneFromDatabase(this.idOf(profile));
|
|
380
389
|
await this.persistToCache(updatedProfile);
|
|
381
390
|
// Recompute optimized policies based on new policies
|
|
382
391
|
updatedProfile.optimizedPolicies = this.optimizePolicies(updatedProfile.policies);
|
|
@@ -392,13 +401,17 @@ class ProfileRepository extends ObjectRepository_1.ObjectRepository {
|
|
|
392
401
|
if (!profile.policies || profile.policies.length === 0) {
|
|
393
402
|
profile.policies = [{ roleId: "default" }];
|
|
394
403
|
}
|
|
395
|
-
|
|
396
|
-
|
|
404
|
+
// `Profile._hash` ships as a stub returning `false`; that return value is
|
|
405
|
+
// the probe for "not patched yet". Typed through `typeof Profile` rather
|
|
406
|
+
// than `any`, which is what the overload declared on the stub is for.
|
|
407
|
+
const profileClass = profile.constructor;
|
|
408
|
+
if (profileClass._hash("") === false) {
|
|
409
|
+
profileClass._hash = (obj) => global.kuzzle.hash(obj);
|
|
397
410
|
}
|
|
398
411
|
const policiesRoles = profile.policies.map((p) => p.roleId);
|
|
399
412
|
const roles = await this.module.role.loadRoles(policiesRoles);
|
|
400
413
|
// Fail if not all roles are found
|
|
401
|
-
if (roles.some((
|
|
414
|
+
if (roles.some((role) => !role)) {
|
|
402
415
|
throw kerror.get("security", "profile", "cannot_hydrate");
|
|
403
416
|
}
|
|
404
417
|
return profile;
|
|
@@ -1,18 +1,40 @@
|
|
|
1
|
-
|
|
1
|
+
import { Role } from "../../model/security/role";
|
|
2
|
+
import { ObjectRepository } from "../shared/ObjectRepository";
|
|
3
|
+
import type { JSONObject } from "../../types/JSONObject";
|
|
4
|
+
import type { Logger } from "../../kuzzle/Logger";
|
|
5
|
+
import "../../types/Global";
|
|
6
|
+
import type { ProfileRepository } from "./profileRepository";
|
|
7
|
+
interface SecurityModule {
|
|
8
|
+
profile: ProfileRepository;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Who is performing the write, and how eagerly the change must be visible.
|
|
12
|
+
*/
|
|
13
|
+
interface WriteOptions {
|
|
14
|
+
force?: boolean;
|
|
15
|
+
method?: string;
|
|
16
|
+
refresh?: string;
|
|
17
|
+
retryOnConflict?: number;
|
|
18
|
+
userId?: string | null;
|
|
19
|
+
}
|
|
2
20
|
/**
|
|
3
21
|
* @class RoleRepository
|
|
4
22
|
* @extends ObjectRepository
|
|
5
23
|
*/
|
|
6
|
-
declare class RoleRepository extends ObjectRepository<
|
|
24
|
+
declare class RoleRepository extends ObjectRepository<Role> {
|
|
25
|
+
protected module: SecurityModule;
|
|
26
|
+
/**
|
|
27
|
+
* Role cache. It holds an in-flight `Promise<Role>` while a role is being
|
|
28
|
+
* loaded (see `loadRoles`), which is what de-duplicates concurrent loads —
|
|
29
|
+
* hence the union rather than plain `Role`.
|
|
30
|
+
*/
|
|
31
|
+
roles: Map<string, Role | Promise<Role>>;
|
|
32
|
+
logger: Logger;
|
|
7
33
|
/**
|
|
8
34
|
* @constructor
|
|
9
35
|
* @param {SecurityModule} securityModule
|
|
10
36
|
*/
|
|
11
37
|
constructor(securityModule: SecurityModule);
|
|
12
|
-
module: SecurityModule;
|
|
13
|
-
ObjectConstructor: typeof Role;
|
|
14
|
-
roles: Map<any, any>;
|
|
15
|
-
logger: import("../../kuzzle/Logger").Logger;
|
|
16
38
|
init(): void;
|
|
17
39
|
/**
|
|
18
40
|
* From a list of role ids, retrieves the matching Role objects.
|
|
@@ -21,7 +43,7 @@ declare class RoleRepository extends ObjectRepository<any> {
|
|
|
21
43
|
* @param {Object} options - resetCache (false)
|
|
22
44
|
* @returns {Promise.<Array.<Role>>}
|
|
23
45
|
*/
|
|
24
|
-
loadRoles(ids:
|
|
46
|
+
loadRoles(ids: string[]): Promise<Role[]>;
|
|
25
47
|
/**
|
|
26
48
|
* Creates a new role, or create/replace a role
|
|
27
49
|
*
|
|
@@ -30,7 +52,7 @@ declare class RoleRepository extends ObjectRepository<any> {
|
|
|
30
52
|
* @param {Object} [opts]
|
|
31
53
|
* @returns {Role}
|
|
32
54
|
*/
|
|
33
|
-
_createOrReplace(id: string, content:
|
|
55
|
+
_createOrReplace(id: string, content: JSONObject, { force, method, refresh, userId, }?: WriteOptions): Promise<Role>;
|
|
34
56
|
/**
|
|
35
57
|
* Creates a new role
|
|
36
58
|
*
|
|
@@ -39,7 +61,7 @@ declare class RoleRepository extends ObjectRepository<any> {
|
|
|
39
61
|
* @param {Object} [opts]
|
|
40
62
|
* @returns {Role}
|
|
41
63
|
*/
|
|
42
|
-
create(id: string, content:
|
|
64
|
+
create(id: string, content: JSONObject, opts?: WriteOptions): Promise<Role>;
|
|
43
65
|
/**
|
|
44
66
|
* Creates or replaces a role
|
|
45
67
|
*
|
|
@@ -48,7 +70,7 @@ declare class RoleRepository extends ObjectRepository<any> {
|
|
|
48
70
|
* @param {Object} [opts]
|
|
49
71
|
* @returns {Role}
|
|
50
72
|
*/
|
|
51
|
-
createOrReplace(id: string, content:
|
|
73
|
+
createOrReplace(id: string, content: JSONObject, opts?: WriteOptions): Promise<Role>;
|
|
52
74
|
/**
|
|
53
75
|
* Updates a role (replaces the entire content)
|
|
54
76
|
*
|
|
@@ -60,7 +82,7 @@ declare class RoleRepository extends ObjectRepository<any> {
|
|
|
60
82
|
* @param {Object} [opts]
|
|
61
83
|
* @returns {Promise}
|
|
62
84
|
*/
|
|
63
|
-
update(id: string, content:
|
|
85
|
+
update(id: string, content: JSONObject, { force, refresh, retryOnConflict, userId }?: WriteOptions): Promise<Role>;
|
|
64
86
|
/**
|
|
65
87
|
* Get from database the document that represent the role given in parameter
|
|
66
88
|
*
|
|
@@ -72,12 +94,15 @@ declare class RoleRepository extends ObjectRepository<any> {
|
|
|
72
94
|
/**
|
|
73
95
|
* @override
|
|
74
96
|
*/
|
|
75
|
-
|
|
97
|
+
loadOneFromDatabase(id: string): Promise<Role>;
|
|
76
98
|
/**
|
|
77
99
|
* @param {Object} body Search body containing either "query" or "controllers"
|
|
78
100
|
* @param {Object} options
|
|
79
101
|
*/
|
|
80
|
-
searchRole(body:
|
|
102
|
+
searchRole(body: JSONObject, { from, size }?: {
|
|
103
|
+
from?: number;
|
|
104
|
+
size?: number;
|
|
105
|
+
}): Promise<{
|
|
81
106
|
hits: any[];
|
|
82
107
|
total: any;
|
|
83
108
|
}>;
|
|
@@ -88,7 +113,7 @@ declare class RoleRepository extends ObjectRepository<any> {
|
|
|
88
113
|
* @param {object} [options] The persistence options
|
|
89
114
|
* @returns Promise
|
|
90
115
|
*/
|
|
91
|
-
validateAndSaveRole(role: Role, options?:
|
|
116
|
+
validateAndSaveRole(role: Role, options?: WriteOptions): Promise<Role>;
|
|
92
117
|
/**
|
|
93
118
|
* Given a Role object, checks if its controllers and actions exist.
|
|
94
119
|
*
|
|
@@ -101,7 +126,22 @@ declare class RoleRepository extends ObjectRepository<any> {
|
|
|
101
126
|
* @param {Role} role
|
|
102
127
|
* @param {Force} force
|
|
103
128
|
*/
|
|
104
|
-
checkRolePluginsRights(role: Role, { force, forceWarn }?:
|
|
129
|
+
checkRolePluginsRights(role: Role, { force, forceWarn, }?: {
|
|
130
|
+
force?: boolean;
|
|
131
|
+
forceWarn?: boolean;
|
|
132
|
+
}): void;
|
|
133
|
+
/**
|
|
134
|
+
* Verifies that a plugin controller referenced by a role exists. Extracted
|
|
135
|
+
* from `checkRolePluginsRights` verbatim.
|
|
136
|
+
*
|
|
137
|
+
* @returns whether the caller should keep inspecting that controller
|
|
138
|
+
*/
|
|
139
|
+
private _checkPluginController;
|
|
140
|
+
/**
|
|
141
|
+
* Verifies every action a role grants on a plugin controller. Extracted from
|
|
142
|
+
* `checkRolePluginsRights` verbatim.
|
|
143
|
+
*/
|
|
144
|
+
private _checkPluginActions;
|
|
105
145
|
/**
|
|
106
146
|
* Fetching roles and check for each of them for invalid plugin rights.
|
|
107
147
|
* If there are some, Kuzzle will log a warning.
|
|
@@ -114,24 +154,22 @@ declare class RoleRepository extends ObjectRepository<any> {
|
|
|
114
154
|
* @param {object} [options]
|
|
115
155
|
* @returns Promise
|
|
116
156
|
*/
|
|
117
|
-
deleteById(id: string, options?:
|
|
157
|
+
deleteById(id: string, options?: JSONObject): Promise<void>;
|
|
118
158
|
/**
|
|
119
159
|
* @override
|
|
120
160
|
*/
|
|
121
|
-
|
|
122
|
-
refresh?: string;
|
|
123
|
-
}): Promise<void>;
|
|
161
|
+
delete(role: Role, { refresh }?: WriteOptions): Promise<void>;
|
|
124
162
|
/**
|
|
125
163
|
* From a Role object, returns an object ready to be persisted
|
|
126
164
|
*
|
|
127
165
|
* @param {Role} role
|
|
128
166
|
* @returns {object}
|
|
129
167
|
*/
|
|
130
|
-
serializeToDatabase(role: Role):
|
|
168
|
+
serializeToDatabase(role: Role): JSONObject;
|
|
131
169
|
/**
|
|
132
170
|
* @override
|
|
133
171
|
*/
|
|
134
|
-
|
|
172
|
+
truncate(opts: JSONObject): Promise<number>;
|
|
135
173
|
/**
|
|
136
174
|
* Invalidate the cache entries for the given role. If none is provided,
|
|
137
175
|
* the entire cache is emptied.
|
|
@@ -139,5 +177,4 @@ declare class RoleRepository extends ObjectRepository<any> {
|
|
|
139
177
|
*/
|
|
140
178
|
invalidate(roleId?: string): void;
|
|
141
179
|
}
|
|
142
|
-
|
|
143
|
-
import { Role } from "../../model/security/role";
|
|
180
|
+
export = RoleRepository;
|
|
@@ -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,32 +19,58 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
25
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
26
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
27
|
+
}
|
|
28
|
+
Object.defineProperty(o, k2, desc);
|
|
29
|
+
}) : (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
o[k2] = m[k];
|
|
32
|
+
}));
|
|
33
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
34
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
35
|
+
}) : function(o, v) {
|
|
36
|
+
o["default"] = v;
|
|
37
|
+
});
|
|
38
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
+
};
|
|
48
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
49
|
+
const kuzzleStateEnum_1 = __importDefault(require("../../kuzzle/kuzzleStateEnum"));
|
|
50
|
+
const role_1 = require("../../model/security/role");
|
|
51
|
+
const ObjectRepository_1 = require("../shared/ObjectRepository");
|
|
52
|
+
const kerror = __importStar(require("../../kerror"));
|
|
53
|
+
const didYouMean_1 = __importDefault(require("../../util/didYouMean"));
|
|
54
|
+
const cacheDbEnum_1 = require("../cache/cacheDbEnum");
|
|
55
|
+
require("../../types/Global");
|
|
29
56
|
const roleRightsError = kerror.wrap("security", "role");
|
|
30
57
|
/**
|
|
31
58
|
* @class RoleRepository
|
|
32
59
|
* @extends ObjectRepository
|
|
33
60
|
*/
|
|
34
|
-
class RoleRepository extends ObjectRepository {
|
|
61
|
+
class RoleRepository extends ObjectRepository_1.ObjectRepository {
|
|
35
62
|
/**
|
|
36
63
|
* @constructor
|
|
37
64
|
* @param {SecurityModule} securityModule
|
|
38
65
|
*/
|
|
39
66
|
constructor(securityModule) {
|
|
40
67
|
super({
|
|
41
|
-
cache: cacheDbEnum.INTERNAL,
|
|
68
|
+
cache: cacheDbEnum_1.cacheDbEnum.INTERNAL,
|
|
42
69
|
store: global.kuzzle.internalIndex,
|
|
43
70
|
});
|
|
44
71
|
this.module = securityModule;
|
|
45
72
|
this.collection = "roles";
|
|
46
|
-
this.ObjectConstructor = Role;
|
|
73
|
+
this.ObjectConstructor = role_1.Role;
|
|
47
74
|
this.roles = new Map();
|
|
48
75
|
this.logger = global.kuzzle.log.child("core:security:roleRepository");
|
|
49
76
|
}
|
|
@@ -142,7 +169,7 @@ class RoleRepository extends ObjectRepository {
|
|
|
142
169
|
}
|
|
143
170
|
roles.push(role);
|
|
144
171
|
}
|
|
145
|
-
return
|
|
172
|
+
return bluebird_1.default.all(roles);
|
|
146
173
|
}
|
|
147
174
|
/**
|
|
148
175
|
* Creates a new role, or create/replace a role
|
|
@@ -152,7 +179,7 @@ class RoleRepository extends ObjectRepository {
|
|
|
152
179
|
* @param {Object} [opts]
|
|
153
180
|
* @returns {Role}
|
|
154
181
|
*/
|
|
155
|
-
async _createOrReplace(id, content, { force = false, method, refresh = "false", userId = null } = {}) {
|
|
182
|
+
async _createOrReplace(id, content, { force = false, method, refresh = "false", userId = null, } = {}) {
|
|
156
183
|
const dto = {
|
|
157
184
|
...content,
|
|
158
185
|
// Always last, in case content contains these keys
|
|
@@ -232,11 +259,12 @@ class RoleRepository extends ObjectRepository {
|
|
|
232
259
|
* @throws {NotFoundError} If the corresponding role doesn't exist
|
|
233
260
|
*/
|
|
234
261
|
async load(id) {
|
|
235
|
-
|
|
236
|
-
|
|
262
|
+
const cached = this.roles.get(id);
|
|
263
|
+
if (cached !== undefined) {
|
|
264
|
+
return cached;
|
|
237
265
|
}
|
|
238
266
|
const role = await this.loadOneFromDatabase(id);
|
|
239
|
-
|
|
267
|
+
this.roles.set(role._id, role);
|
|
240
268
|
return role;
|
|
241
269
|
}
|
|
242
270
|
/**
|
|
@@ -244,10 +272,16 @@ class RoleRepository extends ObjectRepository {
|
|
|
244
272
|
*/
|
|
245
273
|
async loadOneFromDatabase(id) {
|
|
246
274
|
try {
|
|
247
|
-
|
|
275
|
+
const role = await super.loadOneFromDatabase(id);
|
|
276
|
+
// The base resolves `null` for a document with no `_id`; a role always
|
|
277
|
+
// has one, and its absence is the same "not found" as a 404.
|
|
278
|
+
if (role === null) {
|
|
279
|
+
throw kerror.get("security", "role", "not_found", id);
|
|
280
|
+
}
|
|
281
|
+
return role;
|
|
248
282
|
}
|
|
249
283
|
catch (err) {
|
|
250
|
-
if (err.status === 404) {
|
|
284
|
+
if (err instanceof Error && "status" in err && err.status === 404) {
|
|
251
285
|
throw kerror.get("security", "role", "not_found", id);
|
|
252
286
|
}
|
|
253
287
|
throw err;
|
|
@@ -289,7 +323,7 @@ class RoleRepository extends ObjectRepository {
|
|
|
289
323
|
this.checkRolePluginsRights(role, options);
|
|
290
324
|
await this.persistToDatabase(role, options);
|
|
291
325
|
const updatedRole = await this.loadOneFromDatabase(role._id);
|
|
292
|
-
|
|
326
|
+
this.roles.set(role._id, updatedRole);
|
|
293
327
|
return updatedRole;
|
|
294
328
|
}
|
|
295
329
|
/**
|
|
@@ -303,8 +337,12 @@ class RoleRepository extends ObjectRepository {
|
|
|
303
337
|
!global.kuzzle.funnel.isNativeController(roleController)) {
|
|
304
338
|
return;
|
|
305
339
|
}
|
|
340
|
+
const roleControllerRights = role.controllers[roleController];
|
|
341
|
+
if (roleControllerRights === undefined) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
306
344
|
if (roleController === "*") {
|
|
307
|
-
Object.keys(
|
|
345
|
+
Object.keys(roleControllerRights.actions ?? {}).forEach((action) => {
|
|
308
346
|
if (action !== "*") {
|
|
309
347
|
throw roleRightsError.get("unknown_action", role._id, action, "*");
|
|
310
348
|
}
|
|
@@ -312,10 +350,16 @@ class RoleRepository extends ObjectRepository {
|
|
|
312
350
|
}
|
|
313
351
|
else {
|
|
314
352
|
const controller = global.kuzzle.funnel.controllers.get(roleController);
|
|
315
|
-
const actions = Object.keys(
|
|
353
|
+
const actions = Object.keys(roleControllerRights.actions ?? {});
|
|
316
354
|
actions.forEach((action) => {
|
|
317
|
-
if (action !== "*" &&
|
|
318
|
-
|
|
355
|
+
if (action !== "*" &&
|
|
356
|
+
controller !== undefined &&
|
|
357
|
+
!controller._isAction(action)) {
|
|
358
|
+
throw roleRightsError.get("unknown_action", role._id, action, roleController,
|
|
359
|
+
// `_actions` is a Set. didyoumean@1.2.1 walks `list.length`,
|
|
360
|
+
// which a Set does not have, so this suggestion had always been
|
|
361
|
+
// empty — the new declaration for the module is what said so.
|
|
362
|
+
(0, didYouMean_1.default)(action, Array.from(controller?._actions ?? [])));
|
|
319
363
|
}
|
|
320
364
|
});
|
|
321
365
|
}
|
|
@@ -327,38 +371,59 @@ class RoleRepository extends ObjectRepository {
|
|
|
327
371
|
* @param {Role} role
|
|
328
372
|
* @param {Force} force
|
|
329
373
|
*/
|
|
330
|
-
checkRolePluginsRights(role, { force = false, forceWarn = false } = {}) {
|
|
331
|
-
const plugins = global.kuzzle.pluginsManager;
|
|
374
|
+
checkRolePluginsRights(role, { force = false, forceWarn = false, } = {}) {
|
|
332
375
|
for (const roleController of Object.keys(role.controllers)) {
|
|
333
376
|
if (roleController === "*" ||
|
|
334
377
|
global.kuzzle.funnel.isNativeController(roleController)) {
|
|
335
378
|
return;
|
|
336
379
|
}
|
|
337
|
-
if (!
|
|
338
|
-
if (!force) {
|
|
339
|
-
throw roleRightsError.get("unknown_controller", role._id, roleController, didYouMean(roleController, plugins.getControllerNames()));
|
|
340
|
-
}
|
|
341
|
-
// Do not print any warning if Kuzzle is not started or if warn is not forced.
|
|
342
|
-
// We need this to load rights without displaying warning at startup
|
|
343
|
-
// because plugins controllers are loaded after default roles
|
|
344
|
-
// then we need to display non-existing controllers with the sanity check
|
|
345
|
-
// made after plugins controllers loading.
|
|
346
|
-
if (global.kuzzle.state === kuzzleStateEnum.RUNNING || forceWarn) {
|
|
347
|
-
this.logger.warn(`The role "${role._id}" gives access to the non-existing controller "${roleController}".`);
|
|
348
|
-
}
|
|
380
|
+
if (!this._checkPluginController(role, roleController, { force, forceWarn })) {
|
|
349
381
|
return;
|
|
350
382
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
383
|
+
this._checkPluginActions(role, roleController, { force, forceWarn });
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Verifies that a plugin controller referenced by a role exists. Extracted
|
|
388
|
+
* from `checkRolePluginsRights` verbatim.
|
|
389
|
+
*
|
|
390
|
+
* @returns whether the caller should keep inspecting that controller
|
|
391
|
+
*/
|
|
392
|
+
_checkPluginController(role, roleController, { force, forceWarn }) {
|
|
393
|
+
const plugins = global.kuzzle.pluginsManager;
|
|
394
|
+
if (plugins.isController(roleController)) {
|
|
395
|
+
return true;
|
|
396
|
+
}
|
|
397
|
+
if (!force) {
|
|
398
|
+
throw roleRightsError.get("unknown_controller", role._id, roleController, (0, didYouMean_1.default)(roleController, plugins.getControllerNames()));
|
|
399
|
+
}
|
|
400
|
+
// Do not print any warning if Kuzzle is not started or if warn is not forced.
|
|
401
|
+
// We need this to load rights without displaying warning at startup
|
|
402
|
+
// because plugins controllers are loaded after default roles
|
|
403
|
+
// then we need to display non-existing controllers with the sanity check
|
|
404
|
+
// made after plugins controllers loading.
|
|
405
|
+
if (global.kuzzle.state === kuzzleStateEnum_1.default.RUNNING || forceWarn) {
|
|
406
|
+
this.logger.warn(`The role "${role._id}" gives access to the non-existing controller "${roleController}".`);
|
|
407
|
+
}
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Verifies every action a role grants on a plugin controller. Extracted from
|
|
412
|
+
* `checkRolePluginsRights` verbatim.
|
|
413
|
+
*/
|
|
414
|
+
_checkPluginActions(role, roleController, { force, forceWarn }) {
|
|
415
|
+
const plugins = global.kuzzle.pluginsManager;
|
|
416
|
+
const roleActions = Object.keys(role.controllers[roleController]?.actions ?? {});
|
|
417
|
+
for (const action of roleActions) {
|
|
418
|
+
if (action === "*" || plugins.isAction(roleController, action)) {
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
if (!force) {
|
|
422
|
+
throw roleRightsError.get("unknown_action", role._id, action, roleController, (0, didYouMean_1.default)(action, plugins.getActions(roleController)));
|
|
423
|
+
}
|
|
424
|
+
// see the other comment
|
|
425
|
+
if (global.kuzzle.state === kuzzleStateEnum_1.default.RUNNING || forceWarn) {
|
|
426
|
+
this.logger.warn(`The role "${role._id}" gives access to the non-existing action "${action}" for the controller "${roleController}".`);
|
|
362
427
|
}
|
|
363
428
|
}
|
|
364
429
|
}
|
|
@@ -387,7 +452,7 @@ class RoleRepository extends ObjectRepository {
|
|
|
387
452
|
* @override
|
|
388
453
|
*/
|
|
389
454
|
async delete(role, { refresh = "false" } = {}) {
|
|
390
|
-
if (["admin", "default", "anonymous"].
|
|
455
|
+
if (["admin", "default", "anonymous"].includes(role._id)) {
|
|
391
456
|
throw kerror.get("security", "role", "cannot_delete");
|
|
392
457
|
}
|
|
393
458
|
const query = { term: { "policies.roleId": role._id } };
|
|
@@ -409,11 +474,11 @@ class RoleRepository extends ObjectRepository {
|
|
|
409
474
|
*/
|
|
410
475
|
serializeToDatabase(role) {
|
|
411
476
|
const serializedRole = {};
|
|
412
|
-
Object.
|
|
477
|
+
for (const [key, value] of Object.entries(role)) {
|
|
413
478
|
if (key !== "_id" && key !== "restrictedTo") {
|
|
414
|
-
serializedRole[key] =
|
|
479
|
+
serializedRole[key] = value;
|
|
415
480
|
}
|
|
416
|
-
}
|
|
481
|
+
}
|
|
417
482
|
return serializedRole;
|
|
418
483
|
}
|
|
419
484
|
/**
|
|
@@ -421,7 +486,11 @@ class RoleRepository extends ObjectRepository {
|
|
|
421
486
|
*/
|
|
422
487
|
async truncate(opts) {
|
|
423
488
|
try {
|
|
424
|
-
await
|
|
489
|
+
// `return await`, not `await` then fall through: the base answers the
|
|
490
|
+
// number of deleted roles and this override used to drop it, which is
|
|
491
|
+
// why `admin:resetSecurity` reported `deletedRoles: undefined` next to
|
|
492
|
+
// two real counts.
|
|
493
|
+
return await super.truncate(opts);
|
|
425
494
|
}
|
|
426
495
|
finally {
|
|
427
496
|
this.invalidate();
|