kuzzle 2.56.0 → 2.57.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/copy-binaries.js +71 -4
- package/dist/bin/start-kuzzle-server +191 -97
- package/dist/index.d.ts +31 -1
- package/dist/index.js +45 -2
- package/dist/lib/api/controllers/adminController.d.ts +4 -3
- package/dist/lib/api/controllers/adminController.js +1 -2
- package/dist/lib/api/controllers/authController.d.ts +37 -16
- package/dist/lib/api/controllers/authController.js +88 -39
- package/dist/lib/api/controllers/baseController.d.ts +10 -5
- package/dist/lib/api/controllers/baseController.js +36 -15
- package/dist/lib/api/controllers/bulkController.d.ts +11 -7
- package/dist/lib/api/controllers/bulkController.js +28 -5
- package/dist/lib/api/controllers/clusterController.d.ts +2 -2
- package/dist/lib/api/controllers/clusterController.js +3 -3
- package/dist/lib/api/controllers/collectionController.d.ts +57 -21
- package/dist/lib/api/controllers/collectionController.js +40 -11
- package/dist/lib/api/controllers/debugController.d.ts +1 -1
- package/dist/lib/api/controllers/documentController.d.ts +137 -28
- package/dist/lib/api/controllers/documentController.js +156 -125
- package/dist/lib/api/controllers/index.d.ts +27 -12
- package/dist/lib/api/controllers/index.js +28 -13
- package/dist/lib/api/controllers/indexController.d.ts +17 -10
- package/dist/lib/api/controllers/indexController.js +13 -11
- package/dist/lib/api/controllers/memoryStorageController.d.ts +2 -5
- package/dist/lib/api/controllers/memoryStorageController.js +199 -127
- package/dist/lib/api/controllers/realtimeController.d.ts +19 -9
- package/dist/lib/api/controllers/realtimeController.js +8 -4
- package/dist/lib/api/controllers/securityController.d.ts +42 -29
- package/dist/lib/api/controllers/securityController.js +35 -19
- package/dist/lib/api/controllers/serverController.d.ts +114 -19
- package/dist/lib/api/controllers/serverController.js +69 -29
- package/dist/lib/api/documentExtractor.d.ts +9 -7
- package/dist/lib/api/documentExtractor.js +105 -41
- package/dist/lib/api/funnel.d.ts +131 -29
- package/dist/lib/api/funnel.js +436 -225
- package/dist/lib/api/httpRoutes.d.ts +16 -11
- package/dist/lib/api/httpRoutes.js +272 -2
- package/dist/lib/api/openapi/OpenApiManager.d.ts +1 -1
- package/dist/lib/api/openapi/openApiGenerator.d.ts +1 -1
- package/dist/lib/api/rateLimiter.d.ts +15 -5
- package/dist/lib/api/rateLimiter.js +42 -14
- package/dist/lib/api/request/kuzzleRequest.d.ts +83 -12
- package/dist/lib/api/request/kuzzleRequest.js +88 -23
- package/dist/lib/api/request/requestContext.d.ts +20 -5
- package/dist/lib/api/request/requestContext.js +14 -4
- package/dist/lib/api/request/requestInput.d.ts +37 -6
- package/dist/lib/api/request/requestInput.js +22 -9
- package/dist/lib/api/request/requestResponse.d.ts +45 -9
- package/dist/lib/api/request/requestResponse.js +34 -3
- package/dist/lib/cluster/command.d.ts +131 -37
- package/dist/lib/cluster/command.js +243 -71
- package/dist/lib/cluster/idCardHandler.d.ts +18 -5
- package/dist/lib/cluster/idCardHandler.js +52 -19
- package/dist/lib/cluster/index.d.ts +8 -2
- package/dist/lib/cluster/index.js +6 -2
- package/dist/lib/cluster/node.d.ts +127 -49
- package/dist/lib/cluster/node.js +412 -179
- package/dist/lib/cluster/protobuf/command.proto +18 -0
- package/dist/lib/cluster/protobuf/commandMessages.d.ts +104 -0
- package/dist/lib/cluster/protobuf/commandMessages.js +30 -0
- package/dist/lib/cluster/protobuf/syncMessages.d.ts +184 -0
- package/dist/lib/cluster/protobuf/syncMessages.js +23 -0
- package/dist/lib/cluster/publisher.d.ts +118 -78
- package/dist/lib/cluster/publisher.js +174 -72
- package/dist/lib/cluster/state.d.ts +15 -9
- package/dist/lib/cluster/state.js +12 -8
- package/dist/lib/cluster/subscriber.d.ts +185 -131
- package/dist/lib/cluster/subscriber.js +357 -95
- package/dist/lib/cluster/workers/IDCardRenewer.d.ts +39 -8
- package/dist/lib/cluster/workers/IDCardRenewer.js +88 -23
- package/dist/lib/config/default.config.d.ts +2 -2
- package/dist/lib/config/default.config.js +10 -3
- package/dist/lib/config/documentEventAliases.d.ts +1 -1
- package/dist/lib/config/index.d.ts +2 -5
- package/dist/lib/config/index.js +30 -17
- package/dist/lib/core/auth/formatProcessing.d.ts +3 -3
- package/dist/lib/core/auth/passportResponse.d.ts +1 -1
- package/dist/lib/core/auth/passportWrapper.d.ts +1 -1
- package/dist/lib/core/auth/passportWrapper.js +14 -13
- package/dist/lib/core/auth/tokenManager.d.ts +24 -3
- package/dist/lib/core/auth/tokenManager.js +47 -19
- package/dist/lib/core/backend/applicationManager.d.ts +2 -2
- package/dist/lib/core/backend/backend.d.ts +16 -5
- package/dist/lib/core/backend/backend.js +14 -6
- package/dist/lib/core/backend/backendCluster.d.ts +1 -1
- package/dist/lib/core/backend/backendConfig.d.ts +17 -5
- package/dist/lib/core/backend/backendConfig.js +1 -0
- package/dist/lib/core/backend/backendController.d.ts +1 -1
- package/dist/lib/core/backend/backendController.js +8 -1
- package/dist/lib/core/backend/backendErrors.d.ts +15 -8
- package/dist/lib/core/backend/backendErrors.js +5 -0
- package/dist/lib/core/backend/backendHook.d.ts +1 -1
- package/dist/lib/core/backend/backendImport.d.ts +1 -1
- package/dist/lib/core/backend/backendOpenApi.d.ts +3 -2
- package/dist/lib/core/backend/backendPipe.d.ts +1 -1
- package/dist/lib/core/backend/backendPipe.js +9 -1
- package/dist/lib/core/backend/backendPlugin.d.ts +2 -2
- package/dist/lib/core/backend/backendSubscription.d.ts +2 -2
- package/dist/lib/core/backend/backendVault.d.ts +1 -1
- package/dist/lib/core/backend/backendVault.js +8 -1
- package/dist/lib/core/cache/cacheEngine.d.ts +7 -4
- package/dist/lib/core/cache/cacheEngine.js +25 -8
- package/dist/lib/core/debug/kuzzleDebugger.d.ts +2 -1
- package/dist/lib/core/debug/kuzzleDebugger.js +31 -17
- package/dist/lib/core/network/accessLogger.d.ts +33 -18
- package/dist/lib/core/network/accessLogger.js +135 -73
- package/dist/lib/core/network/clientConnection.d.ts +13 -11
- package/dist/lib/core/network/clientConnection.js +33 -9
- package/dist/lib/core/network/context.d.ts +17 -22
- package/dist/lib/core/network/context.js +43 -26
- package/dist/lib/core/network/entryPoint.d.ts +38 -16
- package/dist/lib/core/network/entryPoint.js +119 -48
- package/dist/lib/core/network/httpRouter/index.d.ts +20 -50
- package/dist/lib/core/network/httpRouter/index.js +61 -75
- package/dist/lib/core/network/httpRouter/routeHandler.d.ts +17 -32
- package/dist/lib/core/network/httpRouter/routeHandler.js +26 -36
- package/dist/lib/core/network/httpRouter/routePart.d.ts +9 -18
- package/dist/lib/core/network/httpRouter/routePart.js +61 -43
- package/dist/lib/core/network/httpRouter/routeTypes.d.ts +3 -0
- package/dist/lib/core/network/httpRouter/routeTypes.js +23 -0
- package/dist/lib/core/network/networkEntryPoint.d.ts +20 -0
- package/dist/lib/core/network/networkEntryPoint.js +23 -0
- package/dist/lib/core/network/protocolManifest.d.ts +5 -4
- package/dist/lib/core/network/protocolManifest.js +6 -3
- package/dist/lib/core/network/protocols/httpMessage.d.ts +25 -18
- package/dist/lib/core/network/protocols/httpMessage.js +14 -11
- package/dist/lib/core/network/protocols/httpwsProtocol.d.ts +84 -93
- package/dist/lib/core/network/protocols/httpwsProtocol.js +284 -129
- package/dist/lib/core/network/protocols/internalProtocol.d.ts +26 -15
- package/dist/lib/core/network/protocols/internalProtocol.js +17 -16
- package/dist/lib/core/network/protocols/mqttProtocol.d.ts +56 -32
- package/dist/lib/core/network/protocols/mqttProtocol.js +91 -44
- package/dist/lib/core/network/protocols/protocol.d.ts +85 -21
- package/dist/lib/core/network/protocols/protocol.js +83 -27
- package/dist/lib/core/network/router.d.ts +13 -22
- package/dist/lib/core/network/router.js +59 -46
- package/dist/lib/core/plugin/plugin.d.ts +57 -51
- package/dist/lib/core/plugin/plugin.js +218 -103
- package/dist/lib/core/plugin/pluginContext.d.ts +54 -11
- package/dist/lib/core/plugin/pluginContext.js +99 -58
- package/dist/lib/core/plugin/pluginManifest.d.ts +6 -2
- package/dist/lib/core/plugin/pluginManifest.js +18 -11
- package/dist/lib/core/plugin/pluginRepository.d.ts +35 -44
- package/dist/lib/core/plugin/pluginRepository.js +35 -50
- package/dist/lib/core/plugin/pluginsManager.d.ts +128 -46
- package/dist/lib/core/plugin/pluginsManager.js +468 -231
- package/dist/lib/core/plugin/privilegedContext.d.ts +4 -9
- package/dist/lib/core/plugin/privilegedContext.js +5 -10
- package/dist/lib/core/realtime/actionEnum.d.ts +12 -21
- package/dist/lib/core/realtime/actionEnum.js +6 -7
- package/dist/lib/core/realtime/channel.d.ts +11 -5
- package/dist/lib/core/realtime/channel.js +17 -2
- package/dist/lib/core/realtime/connectionRooms.d.ts +2 -2
- package/dist/lib/core/realtime/hotelClerk.d.ts +12 -6
- package/dist/lib/core/realtime/hotelClerk.js +29 -11
- package/dist/lib/core/realtime/index.d.ts +8 -3
- package/dist/lib/core/realtime/index.js +12 -5
- package/dist/lib/core/realtime/notification/document.d.ts +54 -25
- package/dist/lib/core/realtime/notification/document.js +10 -13
- package/dist/lib/core/realtime/notification/index.d.ts +9 -3
- package/dist/lib/core/realtime/notification/index.js +10 -4
- package/dist/lib/core/realtime/notification/server.d.ts +7 -10
- package/dist/lib/core/realtime/notification/server.js +4 -7
- package/dist/lib/core/realtime/notification/user.d.ts +45 -21
- package/dist/lib/core/realtime/notification/user.js +8 -9
- package/dist/lib/core/realtime/notifier.d.ts +52 -40
- package/dist/lib/core/realtime/notifier.js +60 -25
- package/dist/lib/core/realtime/room.d.ts +1 -1
- package/dist/lib/core/realtime/subscription.d.ts +11 -6
- package/dist/lib/core/realtime/subscription.js +5 -1
- package/dist/lib/core/security/index.d.ts +14 -6
- package/dist/lib/core/security/index.js +27 -13
- package/dist/lib/core/security/profileRepository.d.ts +24 -19
- package/dist/lib/core/security/profileRepository.js +23 -10
- package/dist/lib/core/security/roleRepository.d.ts +60 -23
- package/dist/lib/core/security/roleRepository.js +122 -53
- package/dist/lib/core/security/securityLoader.d.ts +33 -18
- package/dist/lib/core/security/securityLoader.js +43 -16
- package/dist/lib/core/security/tokenRepository.d.ts +21 -7
- package/dist/lib/core/security/tokenRepository.js +50 -23
- package/dist/lib/core/security/userRepository.d.ts +44 -21
- package/dist/lib/core/security/userRepository.js +59 -19
- package/dist/lib/core/shared/KoncordeWrapper.d.ts +1 -1
- package/dist/lib/core/shared/ObjectRepository.d.ts +80 -18
- package/dist/lib/core/shared/ObjectRepository.js +57 -29
- package/dist/lib/core/shared/abstractManifest.d.ts +21 -8
- package/dist/lib/core/shared/abstractManifest.js +57 -17
- package/dist/lib/core/shared/sdk/embeddedSdk.d.ts +3 -1
- package/dist/lib/core/shared/sdk/embeddedSdk.js +8 -7
- package/dist/lib/core/shared/sdk/funnelProtocol.d.ts +2 -1
- package/dist/lib/core/shared/sdk/funnelProtocol.js +12 -3
- package/dist/lib/core/shared/sdk/impersonatedSdk.d.ts +11 -5
- package/dist/lib/core/shared/sdk/impersonatedSdk.js +22 -9
- package/dist/lib/core/shared/store.d.ts +45 -29
- package/dist/lib/core/shared/store.js +48 -27
- package/dist/lib/core/statistics/statistics.d.ts +1 -1
- package/dist/lib/core/storage/clientAdapter.d.ts +39 -21
- package/dist/lib/core/storage/clientAdapter.js +88 -48
- package/dist/lib/core/storage/indexCache.d.ts +8 -0
- package/dist/lib/core/storage/indexCache.js +16 -7
- package/dist/lib/core/storage/storageEngine.d.ts +7 -6
- package/dist/lib/core/storage/storageEngine.js +11 -8
- package/dist/lib/core/validation/baseType.d.ts +22 -22
- package/dist/lib/core/validation/baseType.js +11 -26
- package/dist/lib/core/validation/specification.d.ts +148 -0
- package/dist/lib/core/validation/specification.js +34 -0
- package/dist/lib/core/validation/typeOptions.d.ts +62 -0
- package/dist/lib/core/validation/typeOptions.js +23 -0
- package/dist/lib/core/validation/types/anything.d.ts +3 -6
- package/dist/lib/core/validation/types/anything.js +7 -7
- package/dist/lib/core/validation/types/boolean.d.ts +5 -12
- package/dist/lib/core/validation/types/boolean.js +7 -12
- package/dist/lib/core/validation/types/date.d.ts +19 -11
- package/dist/lib/core/validation/types/date.js +212 -161
- package/dist/lib/core/validation/types/email.d.ts +7 -11
- package/dist/lib/core/validation/types/email.js +13 -17
- package/dist/lib/core/validation/types/enum.d.ts +7 -11
- package/dist/lib/core/validation/types/enum.js +39 -20
- package/dist/lib/core/validation/types/geoPoint.d.ts +5 -13
- package/dist/lib/core/validation/types/geoPoint.js +10 -15
- package/dist/lib/core/validation/types/geoShape.d.ts +22 -21
- package/dist/lib/core/validation/types/geoShape.js +113 -129
- package/dist/lib/core/validation/types/geoShapeUtils.d.ts +15 -0
- package/dist/lib/core/validation/types/geoShapeUtils.js +75 -0
- package/dist/lib/core/validation/types/integer.d.ts +7 -5
- package/dist/lib/core/validation/types/integer.js +7 -13
- package/dist/lib/core/validation/types/ipAddress.d.ts +7 -11
- package/dist/lib/core/validation/types/ipAddress.js +13 -17
- package/dist/lib/core/validation/types/numeric.d.ts +7 -11
- package/dist/lib/core/validation/types/numeric.js +22 -29
- package/dist/lib/core/validation/types/object.d.ts +8 -15
- package/dist/lib/core/validation/types/object.js +12 -21
- package/dist/lib/core/validation/types/string.d.ts +7 -11
- package/dist/lib/core/validation/types/string.js +22 -29
- package/dist/lib/core/validation/types/url.d.ts +7 -11
- package/dist/lib/core/validation/types/url.js +14 -18
- package/dist/lib/core/validation/validation.d.ts +119 -80
- package/dist/lib/core/validation/validation.js +470 -412
- package/dist/lib/core/validation/validationUtils.d.ts +31 -0
- package/dist/lib/core/validation/validationUtils.js +190 -0
- package/dist/lib/kerror/codes/4-plugin.json +0 -12
- package/dist/lib/kerror/codes/index.d.ts +12 -2
- package/dist/lib/kerror/codes/index.js +5 -4
- package/dist/lib/kerror/errors/badRequestError.d.ts +1 -1
- package/dist/lib/kerror/errors/badRequestError.js +1 -1
- package/dist/lib/kerror/errors/externalServiceError.d.ts +1 -1
- package/dist/lib/kerror/errors/externalServiceError.js +1 -1
- package/dist/lib/kerror/errors/forbiddenError.d.ts +1 -1
- package/dist/lib/kerror/errors/forbiddenError.js +1 -1
- package/dist/lib/kerror/errors/gatewayTimeoutError.d.ts +1 -1
- package/dist/lib/kerror/errors/gatewayTimeoutError.js +1 -1
- package/dist/lib/kerror/errors/internalError.d.ts +1 -1
- package/dist/lib/kerror/errors/internalError.js +1 -1
- package/dist/lib/kerror/errors/kuzzleError.d.ts +32 -3
- package/dist/lib/kerror/errors/kuzzleError.js +21 -7
- package/dist/lib/kerror/errors/multipleErrorsError.d.ts +2 -2
- package/dist/lib/kerror/errors/multipleErrorsError.js +2 -2
- package/dist/lib/kerror/errors/notFoundError.d.ts +1 -1
- package/dist/lib/kerror/errors/notFoundError.js +1 -1
- package/dist/lib/kerror/errors/partialError.d.ts +8 -2
- package/dist/lib/kerror/errors/partialError.js +22 -9
- package/dist/lib/kerror/errors/pluginImplementationError.d.ts +9 -1
- package/dist/lib/kerror/errors/pluginImplementationError.js +9 -3
- package/dist/lib/kerror/errors/preconditionError.d.ts +1 -1
- package/dist/lib/kerror/errors/preconditionError.js +1 -1
- package/dist/lib/kerror/errors/serviceUnavailableError.d.ts +1 -1
- package/dist/lib/kerror/errors/serviceUnavailableError.js +1 -1
- package/dist/lib/kerror/errors/sizeLimitError.d.ts +1 -1
- package/dist/lib/kerror/errors/sizeLimitError.js +1 -1
- package/dist/lib/kerror/errors/tooManyRequestsError.d.ts +1 -1
- package/dist/lib/kerror/errors/tooManyRequestsError.js +1 -1
- package/dist/lib/kerror/errors/unauthorizedError.d.ts +1 -1
- package/dist/lib/kerror/errors/unauthorizedError.js +1 -1
- package/dist/lib/kerror/index.d.ts +19 -13
- package/dist/lib/kerror/index.js +60 -19
- package/dist/lib/kuzzle/Logger.d.ts +2 -2
- package/dist/lib/kuzzle/dumpGenerator.d.ts +12 -8
- package/dist/lib/kuzzle/dumpGenerator.js +130 -62
- package/dist/lib/kuzzle/event/KuzzleEventEmitter.d.ts +18 -9
- package/dist/lib/kuzzle/event/KuzzleEventEmitter.js +45 -18
- package/dist/lib/kuzzle/event/pipeRunner.d.ts +37 -16
- package/dist/lib/kuzzle/event/pipeRunner.js +73 -26
- package/dist/lib/kuzzle/event/waterfall.d.ts +11 -1
- package/dist/lib/kuzzle/event/waterfall.js +38 -13
- package/dist/lib/kuzzle/internalIndexHandler.d.ts +11 -174
- package/dist/lib/kuzzle/internalIndexHandler.js +58 -29
- package/dist/lib/kuzzle/kuzzle.d.ts +25 -10
- package/dist/lib/kuzzle/kuzzle.js +74 -17
- package/dist/lib/kuzzle/kuzzleStateEnum.d.ts +16 -12
- package/dist/lib/kuzzle/kuzzleStateEnum.js +5 -7
- package/dist/lib/kuzzle/vault.d.ts +5 -1
- package/dist/lib/kuzzle/vault.js +29 -17
- package/dist/lib/model/security/profile.d.ts +34 -5
- package/dist/lib/model/security/profile.js +6 -5
- package/dist/lib/model/security/rights.d.ts +12 -4
- package/dist/lib/model/security/rights.js +7 -6
- package/dist/lib/model/security/role.d.ts +8 -4
- package/dist/lib/model/security/role.js +12 -6
- package/dist/lib/model/security/token.d.ts +8 -0
- package/dist/lib/model/security/user.d.ts +8 -2
- package/dist/lib/model/security/user.js +7 -4
- package/dist/lib/model/storage/apiKey.d.ts +55 -26
- package/dist/lib/model/storage/apiKey.js +97 -24
- package/dist/lib/model/storage/baseModel.d.ts +77 -66
- package/dist/lib/model/storage/baseModel.js +21 -34
- package/dist/lib/service/cache/redis.d.ts +53 -36
- package/dist/lib/service/cache/redis.js +148 -71
- package/dist/lib/service/service.d.ts +14 -19
- package/dist/lib/service/service.js +41 -22
- package/dist/lib/service/storage/7/elasticsearch.d.ts +136 -93
- package/dist/lib/service/storage/7/elasticsearch.js +218 -165
- package/dist/lib/service/storage/7/esWrapper.d.ts +30 -13
- package/dist/lib/service/storage/7/esWrapper.js +58 -37
- package/dist/lib/service/storage/8/elasticsearch.d.ts +153 -119
- package/dist/lib/service/storage/8/elasticsearch.js +286 -213
- package/dist/lib/service/storage/8/esWrapper.d.ts +30 -13
- package/dist/lib/service/storage/8/esWrapper.js +59 -38
- package/dist/lib/service/storage/commons/queryTranslator.d.ts +3 -3
- package/dist/lib/service/storage/commons/queryTranslator.js +71 -35
- package/dist/lib/types/ApiRoute.d.ts +12 -0
- package/dist/lib/types/ApiRoute.js +23 -0
- package/dist/lib/types/ClientConnection.d.ts +1 -1
- package/dist/lib/types/EventHandler.d.ts +10 -0
- package/dist/lib/types/Global.d.ts +8 -3
- package/dist/lib/types/HttpMessage.d.ts +2 -2
- package/dist/lib/types/HttpStream.d.ts +1 -1
- package/dist/lib/types/HttpStream.js +3 -1
- package/dist/lib/types/JSONObject.d.ts +9 -0
- package/dist/lib/types/JSONObject.js +23 -0
- package/dist/lib/types/Kuzzle.d.ts +5 -3
- package/dist/lib/types/KuzzleDocument.d.ts +1 -1
- package/dist/lib/types/KuzzleWebSocket.d.ts +24 -0
- package/dist/lib/types/KuzzleWebSocket.js +23 -0
- package/dist/lib/types/OpenApiDefinition.d.ts +1 -1
- package/dist/lib/types/Plugin.d.ts +33 -8
- package/dist/lib/types/PluginInstance.d.ts +67 -0
- package/dist/lib/types/PluginInstance.js +23 -0
- package/dist/lib/types/Policy.d.ts +1 -1
- package/dist/lib/types/Target.d.ts +8 -0
- package/dist/lib/types/Token.d.ts +14 -2
- package/dist/lib/types/config/HttpConfiguration.d.ts +5 -0
- package/dist/lib/types/config/KuzzleConfiguration.d.ts +102 -1
- package/dist/lib/types/config/PluginsConfiguration.d.ts +3 -2
- package/dist/lib/types/config/SecurityConfiguration.d.ts +6 -2
- package/dist/lib/types/config/ServerConfiguration.d.ts +2 -2
- package/dist/lib/types/config/ServicesConfiguration.d.ts +1 -1
- package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.d.ts +131 -0
- package/dist/lib/types/config/cache/BaseCacheRedisConfiguration.js +3 -0
- package/dist/lib/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +2 -106
- package/dist/lib/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +2 -26
- package/dist/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +3 -0
- package/dist/lib/types/controllers/Controller.d.ts +12 -3
- package/dist/lib/types/controllers/ControllerDefinition.d.ts +2 -2
- package/dist/lib/types/controllers/{adminControlller.type.js → adminController.type.js} +1 -1
- package/dist/lib/types/controllers/authController.type.d.ts +2 -2
- package/dist/lib/types/core/auth/formatProcessing.type.d.ts +7 -1
- package/dist/lib/types/errors/ErrorDomains.d.ts +1 -1
- package/dist/lib/types/events/EventGenericDocument.d.ts +10 -9
- package/dist/lib/types/events/EventProtocol.d.ts +4 -4
- package/dist/lib/types/index.d.ts +7 -0
- package/dist/lib/types/index.js +7 -0
- package/dist/lib/types/shared/StoreCollectionsDefinition.d.ts +1 -1
- package/dist/lib/types/storage/7/Elasticsearch.d.ts +62 -13
- package/dist/lib/types/storage/8/Elasticsearch.d.ts +62 -13
- package/dist/lib/util/Inflector.d.ts +4 -1
- package/dist/lib/util/Inflector.js +0 -3
- package/dist/lib/util/assertType.d.ts +24 -27
- package/dist/lib/util/assertType.js +28 -39
- package/dist/lib/util/async.js +19 -6
- package/dist/lib/util/asyncStore.js +1 -1
- package/dist/lib/util/bufferedPassThrough.d.ts +9 -0
- package/dist/lib/util/bufferedPassThrough.js +27 -13
- package/dist/lib/util/bytes.d.ts +1 -1
- package/dist/lib/util/bytes.js +6 -2
- package/dist/lib/util/debug.d.ts +3 -1
- package/dist/lib/util/debug.js +42 -10
- package/dist/lib/util/deprecate.d.ts +9 -1
- package/dist/lib/util/deprecate.js +10 -6
- package/dist/lib/util/didYouMean.d.ts +2 -1
- package/dist/lib/util/didYouMean.js +8 -4
- package/dist/lib/util/distributedLock.d.ts +56 -0
- package/dist/lib/util/distributedLock.js +166 -0
- package/dist/lib/util/dump-collection.d.ts +1 -1
- package/dist/lib/util/dump-collection.js +4 -5
- package/dist/lib/util/extractFields.d.ts +15 -11
- package/dist/lib/util/extractFields.js +8 -9
- package/dist/lib/util/koncordeCompat.d.ts +2 -2
- package/dist/lib/util/koncordeCompat.js +33 -0
- package/dist/lib/util/memoize.d.ts +7 -6
- package/dist/lib/util/memoize.js +3 -3
- package/dist/lib/util/mutex.d.ts +22 -2
- package/dist/lib/util/mutex.js +39 -1
- package/dist/lib/util/name-generator.js +14 -2
- package/dist/lib/util/promback.d.ts +20 -11
- package/dist/lib/util/promback.js +14 -7
- package/dist/lib/util/requestAssertions.d.ts +30 -10
- package/dist/lib/util/requestAssertions.js +125 -121
- package/dist/lib/util/safeObject.d.ts +3 -3
- package/dist/lib/util/safeObject.js +7 -3
- package/dist/lib/util/stackTrace.d.ts +13 -5
- package/dist/lib/util/stackTrace.js +17 -12
- package/dist/lib/util/thrown.d.ts +13 -0
- package/dist/lib/util/thrown.js +46 -0
- package/dist/package.json +26 -19
- package/package.json +26 -19
- package/dist/lib/util/wildcard.d.ts +0 -1
- package/dist/lib/util/wildcard.js +0 -46
- /package/dist/lib/types/controllers/{adminControlller.type.d.ts → adminController.type.d.ts} +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*
|
|
2
3
|
* Kuzzle, a backend software, self-hostable and ready to use
|
|
3
4
|
* to power modern apps
|
|
@@ -18,26 +19,81 @@
|
|
|
18
19
|
* See the License for the specific language governing permissions and
|
|
19
20
|
* limitations under the License.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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 node_fs_1 = __importDefault(require("node:fs"));
|
|
49
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
50
|
+
const semver = __importStar(require("semver"));
|
|
51
|
+
const default_config_1 = __importDefault(require("../../config/default.config"));
|
|
52
|
+
const kerror = __importStar(require("../../kerror"));
|
|
53
|
+
const errorCodes = __importStar(require("../../kerror/codes"));
|
|
54
|
+
const safeObject_1 = require("../../util/safeObject");
|
|
55
|
+
const pluginManifest_1 = __importDefault(require("./pluginManifest"));
|
|
56
|
+
const pluginContext_1 = require("./pluginContext");
|
|
57
|
+
const privilegedContext_1 = __importDefault(require("./privilegedContext"));
|
|
32
58
|
const assertionError = kerror.wrap("plugin", "assert");
|
|
33
59
|
const runtimeError = kerror.wrap("plugin", "runtime");
|
|
34
60
|
const PLUGIN_NAME_REGEX = /^[a-z-\d]+$/;
|
|
35
|
-
const HTTP_VERBS = [
|
|
61
|
+
const HTTP_VERBS = new Set([
|
|
62
|
+
"get",
|
|
63
|
+
"head",
|
|
64
|
+
"post",
|
|
65
|
+
"put",
|
|
66
|
+
"delete",
|
|
67
|
+
"patch",
|
|
68
|
+
"options",
|
|
69
|
+
]);
|
|
70
|
+
/**
|
|
71
|
+
* Kuzzle's own wrapper around a plugin: its name, config, context and manifest,
|
|
72
|
+
* plus the assertions a plugin must satisfy before it is loaded.
|
|
73
|
+
*
|
|
74
|
+
* Not to be confused with `lib/types/Plugin.ts`'s `Plugin`, which is the
|
|
75
|
+
* abstract class a plugin author extends. This one wraps an instance of that.
|
|
76
|
+
*/
|
|
36
77
|
class Plugin {
|
|
37
|
-
constructor(instance, { name, application = false, deprecationWarning = true } = {}) {
|
|
78
|
+
constructor(instance, { name, application = false, deprecationWarning = true, } = {}) {
|
|
79
|
+
/**
|
|
80
|
+
* Set by `PluginsManager` once the plugin's own `init` has resolved.
|
|
81
|
+
*
|
|
82
|
+
* The JavaScript declared a `_initCalled` in the constructor and never read
|
|
83
|
+
* it: what the manager actually sets, and what the specs assert, is this
|
|
84
|
+
* public `initCalled`, created ad hoc on the object. The dead field is gone
|
|
85
|
+
* and the live one is declared.
|
|
86
|
+
*/
|
|
87
|
+
this.initCalled = false;
|
|
88
|
+
/**
|
|
89
|
+
* Set from the outside by `Backend`, which reads it from the git tree — the
|
|
90
|
+
* wrapper has no way to derive it. `info()` reports it for an application.
|
|
91
|
+
*/
|
|
92
|
+
this.commit = null;
|
|
93
|
+
/** Set from the outside by `Backend`, like `commit`. */
|
|
94
|
+
this.openApi = null;
|
|
38
95
|
this._instance = instance;
|
|
39
96
|
this._application = application;
|
|
40
|
-
this._initCalled = false;
|
|
41
97
|
this._config = {};
|
|
42
98
|
this._context = null;
|
|
43
99
|
this._version = instance.version || "";
|
|
@@ -50,27 +106,31 @@ class Plugin {
|
|
|
50
106
|
}
|
|
51
107
|
init(name) {
|
|
52
108
|
this.name = name;
|
|
53
|
-
|
|
54
|
-
|
|
109
|
+
const configured = global.kuzzle.config.plugins[this.name];
|
|
110
|
+
if (configured) {
|
|
111
|
+
// structuredClone is not equivalent: a plugin's configuration is user
|
|
112
|
+
// data that has been through JSON, and swapping clone semantics in a
|
|
113
|
+
// conversion is out of scope.
|
|
114
|
+
this.config = JSON.parse(JSON.stringify(configured)); // NOSONAR
|
|
55
115
|
}
|
|
56
116
|
// check plugin privileged prerequisites
|
|
57
117
|
// user need to acknowledge privileged mode in plugin configuration
|
|
58
118
|
if (this.config.privileged) {
|
|
59
|
-
if (!this.manifest
|
|
119
|
+
if (!this.manifest?.privileged) {
|
|
60
120
|
throw assertionError.get("privileged_not_supported", this.name);
|
|
61
121
|
}
|
|
62
122
|
}
|
|
63
|
-
else if (this.manifest
|
|
123
|
+
else if (this.manifest?.privileged) {
|
|
64
124
|
throw assertionError.get("privileged_not_set", this.name);
|
|
65
125
|
}
|
|
66
|
-
if (this.manifest
|
|
126
|
+
if (this.manifest?.kuzzleVersion) {
|
|
67
127
|
if (!semver.satisfies(global.kuzzle.config.version, this.manifest.kuzzleVersion, { includePrerelease: true })) {
|
|
68
128
|
throw kerror.get("plugin", "manifest", "version_mismatch", this.name, global.kuzzle.config.version, this.manifest.kuzzleVersion);
|
|
69
129
|
}
|
|
70
130
|
}
|
|
71
131
|
this._context = this.config.privileged
|
|
72
|
-
? new
|
|
73
|
-
: new PluginContext(this.name);
|
|
132
|
+
? new privilegedContext_1.default(this.name)
|
|
133
|
+
: new pluginContext_1.PluginContext(this.name);
|
|
74
134
|
}
|
|
75
135
|
info() {
|
|
76
136
|
/* eslint-disable sort-keys */
|
|
@@ -80,8 +140,8 @@ class Plugin {
|
|
|
80
140
|
version: this.version,
|
|
81
141
|
commit: this.commit,
|
|
82
142
|
controllers: this.instance.api,
|
|
83
|
-
pipes: Object.keys(this.instance.pipes),
|
|
84
|
-
hooks: Object.keys(this.instance.hooks),
|
|
143
|
+
pipes: Object.keys(this.instance.pipes ?? {}),
|
|
144
|
+
hooks: Object.keys(this.instance.hooks ?? {}),
|
|
85
145
|
};
|
|
86
146
|
}
|
|
87
147
|
const description = {
|
|
@@ -95,23 +155,23 @@ class Plugin {
|
|
|
95
155
|
imports: {},
|
|
96
156
|
};
|
|
97
157
|
/* eslint-enable sort-keys */
|
|
98
|
-
if (has(this.instance, "imports")) {
|
|
99
|
-
description.imports = Object.keys(this.instance.imports);
|
|
158
|
+
if ((0, safeObject_1.has)(this.instance, "imports")) {
|
|
159
|
+
description.imports = Object.keys(this.instance.imports ?? {});
|
|
100
160
|
}
|
|
101
|
-
if (has(this.instance, "hooks")) {
|
|
102
|
-
description.hooks = Object.keys(this.instance.hooks);
|
|
161
|
+
if ((0, safeObject_1.has)(this.instance, "hooks")) {
|
|
162
|
+
description.hooks = Object.keys(this.instance.hooks ?? {});
|
|
103
163
|
}
|
|
104
|
-
if (has(this.instance, "pipes")) {
|
|
105
|
-
description.pipes = Object.keys(this.instance.pipes);
|
|
164
|
+
if ((0, safeObject_1.has)(this.instance, "pipes")) {
|
|
165
|
+
description.pipes = Object.keys(this.instance.pipes ?? {});
|
|
106
166
|
}
|
|
107
|
-
if (has(this.instance, "controllers")) {
|
|
108
|
-
description.controllers = Object.keys(this.instance.controllers).map((controller) => `${this.name}/${controller}`);
|
|
167
|
+
if ((0, safeObject_1.has)(this.instance, "controllers")) {
|
|
168
|
+
description.controllers = Object.keys(this.instance.controllers ?? {}).map((controller) => `${this.name}/${controller}`);
|
|
109
169
|
}
|
|
110
|
-
if (has(this.instance, "routes")) {
|
|
111
|
-
description.routes = this.instance.routes;
|
|
170
|
+
if ((0, safeObject_1.has)(this.instance, "routes")) {
|
|
171
|
+
description.routes = this.instance.routes ?? [];
|
|
112
172
|
}
|
|
113
|
-
if (has(this.instance, "strategies")) {
|
|
114
|
-
description.strategies = Object.keys(this.instance.strategies);
|
|
173
|
+
if ((0, safeObject_1.has)(this.instance, "strategies")) {
|
|
174
|
+
description.strategies = Object.keys(this.instance.strategies ?? {});
|
|
115
175
|
}
|
|
116
176
|
return description;
|
|
117
177
|
}
|
|
@@ -155,7 +215,10 @@ class Plugin {
|
|
|
155
215
|
return this._name;
|
|
156
216
|
}
|
|
157
217
|
set name(name) {
|
|
158
|
-
|
|
218
|
+
// `Plugin.checkName` rather than `this.constructor.checkName`: nothing
|
|
219
|
+
// extends this class, and the static-through-instance form is not typable
|
|
220
|
+
// without an assertion.
|
|
221
|
+
if (!Plugin.checkName(name)) {
|
|
159
222
|
this.printDeprecation("Plugin names should be in kebab-case. This behavior will be enforced in futur versions of Kuzzle.");
|
|
160
223
|
}
|
|
161
224
|
this._name = name;
|
|
@@ -168,49 +231,43 @@ class Plugin {
|
|
|
168
231
|
}
|
|
169
232
|
// static methods ============================================================
|
|
170
233
|
static loadFromDirectory(pluginPath) {
|
|
171
|
-
if (!
|
|
234
|
+
if (!node_fs_1.default.statSync(pluginPath).isDirectory()) {
|
|
172
235
|
throw assertionError.get("cannot_load", pluginPath, "Not a directory.");
|
|
173
236
|
}
|
|
174
237
|
let plugin;
|
|
175
|
-
|
|
238
|
+
// Captured before the instantiation that may fail, because the catch
|
|
239
|
+
// below names it — the class itself used to be held in a `let` seeded with
|
|
240
|
+
// `null`, which is what the error path would have read on a failed require.
|
|
241
|
+
let pluginClassName;
|
|
176
242
|
try {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
243
|
+
// A plugin is loaded from disk at runtime: the path is only known then,
|
|
244
|
+
// so this require is the feature, not an unconverted import.
|
|
245
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
246
|
+
const PluginClass = require(pluginPath);
|
|
247
|
+
pluginClassName = PluginClass.name;
|
|
248
|
+
plugin = new Plugin(new PluginClass());
|
|
180
249
|
}
|
|
181
250
|
catch (error) {
|
|
182
|
-
|
|
183
|
-
|
|
251
|
+
const cause = error instanceof Error ? error : new Error(String(error));
|
|
252
|
+
if (/not a constructor/i.exec(cause.message)) {
|
|
253
|
+
throw assertionError.get("not_a_constructor", pluginClassName);
|
|
184
254
|
}
|
|
185
|
-
throw runtimeError.getFrom(
|
|
255
|
+
throw runtimeError.getFrom(cause, "unexpected_error", cause.message);
|
|
186
256
|
}
|
|
187
257
|
// load manifest
|
|
188
|
-
plugin.manifest = new
|
|
258
|
+
plugin.manifest = new pluginManifest_1.default(pluginPath);
|
|
189
259
|
plugin.manifest.load();
|
|
190
|
-
|
|
260
|
+
const manifest = plugin.manifest;
|
|
261
|
+
// `load()` above throws `missing_name` rather than leave it unset.
|
|
262
|
+
plugin.name = manifest.name ?? "";
|
|
191
263
|
// load plugin version if exists
|
|
192
|
-
const packageJsonPath =
|
|
193
|
-
if (
|
|
264
|
+
const packageJsonPath = node_path_1.default.join(pluginPath, "package.json");
|
|
265
|
+
if (node_fs_1.default.existsSync(packageJsonPath) && !plugin.version) {
|
|
266
|
+
// Same as the plugin's own module above: a path known only at runtime.
|
|
267
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
194
268
|
plugin.version = require(packageJsonPath).version;
|
|
195
269
|
}
|
|
196
|
-
|
|
197
|
-
if (plugin.manifest.raw.errors) {
|
|
198
|
-
try {
|
|
199
|
-
// we use the manifest name instead of the lowerCased plugin name
|
|
200
|
-
// to ensure to match the plugin original name in the configuration
|
|
201
|
-
const config = global.kuzzle.config[plugin.manifest.name];
|
|
202
|
-
const pluginCode = config && config._pluginCode ? config._pluginCode : 0x00;
|
|
203
|
-
errorCodes.loadPluginsErrors(plugin.manifest.raw, pluginCode);
|
|
204
|
-
global.kuzzle.log.info(`${plugin.logPrefix} Custom errors successfully loaded.`);
|
|
205
|
-
}
|
|
206
|
-
catch (err) {
|
|
207
|
-
if (err.message.match(/Error configuration file/i) ||
|
|
208
|
-
err instanceof SyntaxError) {
|
|
209
|
-
throw kerror.getFrom(err, "plugin", "manifest", "invalid_errors", plugin.manifest.name, err.message);
|
|
210
|
-
}
|
|
211
|
-
throw err;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
270
|
+
loadPluginErrors(plugin);
|
|
214
271
|
// check if the plugin exposes a "init" method
|
|
215
272
|
if (typeof plugin.instance.init !== "function") {
|
|
216
273
|
throw assertionError.get("init_not_found", plugin.name);
|
|
@@ -224,51 +281,109 @@ class Plugin {
|
|
|
224
281
|
if (typeof name !== "string") {
|
|
225
282
|
throw assertionError.get("invalid_controller_definition", "Controller name must be a string");
|
|
226
283
|
}
|
|
227
|
-
if (!isPlainObject(definition)) {
|
|
284
|
+
if (!(0, safeObject_1.isPlainObject)(definition)) {
|
|
228
285
|
throw assertionError.get("invalid_controller_definition", name, "Controller definition must be an object");
|
|
229
286
|
}
|
|
230
|
-
if (!isPlainObject(definition.actions)) {
|
|
287
|
+
if (!(0, safeObject_1.isPlainObject)(definition.actions)) {
|
|
231
288
|
throw assertionError.get("invalid_controller_definition", name, 'Controller definition "actions" property must be an object');
|
|
232
289
|
}
|
|
233
290
|
for (const [action, actionDefinition] of Object.entries(definition.actions)) {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
291
|
+
checkActionDefinition(name, action, actionDefinition, application);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Checks one action of a controller definition. Lifted verbatim out of
|
|
297
|
+
* `Plugin.checkControllerDefinition`, whose cognitive complexity the
|
|
298
|
+
* `.js` → `.ts` rename re-scored as new code.
|
|
299
|
+
*/
|
|
300
|
+
/**
|
|
301
|
+
* Loads a plugin's custom error definitions, if its manifest declares any.
|
|
302
|
+
* Lifted verbatim out of `Plugin.loadFromDirectory` for the same gate reason.
|
|
303
|
+
*/
|
|
304
|
+
function loadPluginErrors(plugin) {
|
|
305
|
+
// A plugin loaded from a directory always has one: `loadFromDirectory`
|
|
306
|
+
// builds it two lines before calling this.
|
|
307
|
+
const manifest = plugin.manifest;
|
|
308
|
+
if (manifest?.raw?.errors) {
|
|
309
|
+
try {
|
|
310
|
+
// we use the manifest name instead of the lowerCased plugin name
|
|
311
|
+
// to ensure to match the plugin original name in the configuration
|
|
312
|
+
// A plugin's section is keyed by its own name, which no declared
|
|
313
|
+
// configuration shape can carry — `get` is the prototype-safe read the
|
|
314
|
+
// rest of the codebase uses for exactly this.
|
|
315
|
+
const config = (0, safeObject_1.get)(global.kuzzle.config, manifest.name ?? "");
|
|
316
|
+
const configuredCode = (0, safeObject_1.isPlainObject)(config)
|
|
317
|
+
? config._pluginCode
|
|
318
|
+
: undefined;
|
|
319
|
+
const pluginCode = typeof configuredCode === "number" ? configuredCode : 0x00;
|
|
320
|
+
// The two properties `loadPluginsErrors` reads, named explicitly:
|
|
321
|
+
// `raw` is a JSONObject and cannot be narrowed to the shape it wants
|
|
322
|
+
// without an assertion. Same values, same call.
|
|
323
|
+
errorCodes.loadPluginsErrors({
|
|
324
|
+
errors: manifest.raw.errors,
|
|
325
|
+
name: manifest.raw.name,
|
|
326
|
+
}, pluginCode);
|
|
327
|
+
global.kuzzle.log.info(`${plugin.logPrefix} Custom errors successfully loaded.`);
|
|
328
|
+
}
|
|
329
|
+
catch (err) {
|
|
330
|
+
const cause = err instanceof Error ? err : new Error(String(err));
|
|
331
|
+
if (/Error configuration file/i.exec(cause.message) ||
|
|
332
|
+
err instanceof SyntaxError) {
|
|
333
|
+
throw kerror.getFrom(cause, "plugin", "manifest", "invalid_errors", manifest.name, cause.message);
|
|
269
334
|
}
|
|
335
|
+
throw err;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
function checkActionDefinition(name, action, actionDefinition, application) {
|
|
340
|
+
// Parenthesised: `!a?.b ?? c` parses as `(!a?.b) ?? c`, and `!x` is never
|
|
341
|
+
// nullish, so the fallback was dead code. It happens to be equivalent
|
|
342
|
+
// today only because the packaged default is `false` — it would not be if
|
|
343
|
+
// that default ever became `true`.
|
|
344
|
+
if (!(global.app.config.content.controllers?.definition
|
|
345
|
+
?.allowAdditionalActionProperties ??
|
|
346
|
+
default_config_1.default.controllers.definition.allowAdditionalActionProperties)) {
|
|
347
|
+
const actionProperties = Object.keys(actionDefinition).filter((prop) => prop !== "handler" && prop !== "http");
|
|
348
|
+
if (actionProperties.length > 0) {
|
|
349
|
+
throw assertionError.get("invalid_controller_definition", name, `action "${action}" has invalid properties: ${actionProperties.join(", ")}`);
|
|
270
350
|
}
|
|
271
351
|
}
|
|
352
|
+
if (typeof action !== "string") {
|
|
353
|
+
throw assertionError.get("invalid_controller_definition", name, "action names must be strings");
|
|
354
|
+
}
|
|
355
|
+
if (typeof actionDefinition.handler !== "function") {
|
|
356
|
+
throw assertionError.get("invalid_controller_definition", name, `action "${action}" handler must be a function`);
|
|
357
|
+
}
|
|
358
|
+
if (actionDefinition.http) {
|
|
359
|
+
if (!Array.isArray(actionDefinition.http)) {
|
|
360
|
+
throw assertionError.get("invalid_controller_definition", name, `action "${action}" http definition must be an array`);
|
|
361
|
+
}
|
|
362
|
+
for (const route of actionDefinition.http) {
|
|
363
|
+
checkHttpRoute(route, action, name, application);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Checks one HTTP route of an action definition. Second half of the same
|
|
369
|
+
* gate-driven split as `checkActionDefinition`.
|
|
370
|
+
*/
|
|
371
|
+
function checkHttpRoute(route, action, name, application) {
|
|
372
|
+
if (typeof route.verb !== "string" || route.verb.length === 0) {
|
|
373
|
+
throw assertionError.get("invalid_controller_definition", name, `action "${action}" http "verb" property must be a non-empty string`);
|
|
374
|
+
}
|
|
375
|
+
if (!HTTP_VERBS.has(route.verb.toLowerCase())) {
|
|
376
|
+
throw assertionError.get("invalid_controller_definition", name, `action "${action}" http verb "${route.verb}" is not a valid http verb`);
|
|
377
|
+
}
|
|
378
|
+
checkHttpRouteProperties(route, action, name, application);
|
|
379
|
+
const routeProperties = Object.keys(route);
|
|
380
|
+
if (routeProperties.length > 3) {
|
|
381
|
+
routeProperties.splice(routeProperties.indexOf("url"), 1);
|
|
382
|
+
routeProperties.splice(routeProperties.indexOf("path"), 1);
|
|
383
|
+
routeProperties.splice(routeProperties.indexOf("verb"), 1);
|
|
384
|
+
routeProperties.splice(routeProperties.indexOf("openapi"), 1);
|
|
385
|
+
throw assertionError.get("invalid_controller_definition", name, `action "${action}" has invalid http properties: ${routeProperties.join(", ")}`);
|
|
386
|
+
}
|
|
272
387
|
}
|
|
273
388
|
function checkHttpRouteProperties(route, action, name, application) {
|
|
274
389
|
if (typeof route.path !== "string" || route.path.length === 0) {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Koncorde } from "../shared/KoncordeWrapper";
|
|
2
|
-
import { JSONObject } from "
|
|
3
|
-
import { KuzzleRequest, RequestContext, RequestInput } from "
|
|
2
|
+
import type { JSONObject } from "../../types/JSONObject";
|
|
3
|
+
import { KuzzleRequest, RequestContext, RequestInput } from "../../api/request";
|
|
4
4
|
import { Mutex } from "../../util/mutex";
|
|
5
|
-
import { BackendCluster } from "../backend";
|
|
5
|
+
import { BackendCluster } from "../backend/backendCluster";
|
|
6
6
|
import { EmbeddedSDK } from "../shared/sdk/embeddedSdk";
|
|
7
|
-
import { KuzzleLogger } from "kuzzle-logger/dist";
|
|
7
|
+
import type { KuzzleLogger } from "kuzzle-logger/dist";
|
|
8
|
+
import type { Kuzzle } from "../../kuzzle";
|
|
8
9
|
export interface Repository {
|
|
9
10
|
create(document: JSONObject, options: any): Promise<any>;
|
|
10
11
|
createOrReplace(document: JSONObject, options: any): Promise<any>;
|
|
@@ -50,7 +51,11 @@ export declare class PluginContext {
|
|
|
50
51
|
*
|
|
51
52
|
* @deprecated use "accessors.sdk" instead (unless you need the original context)
|
|
52
53
|
*/
|
|
53
|
-
|
|
54
|
+
/**
|
|
55
|
+
* Declared as returning a promise, as v2.56.0 declared it — see
|
|
56
|
+
* {@link PluginExecute}.
|
|
57
|
+
*/
|
|
58
|
+
execute: PluginExecute;
|
|
54
59
|
/**
|
|
55
60
|
* Adds or removes realtime subscriptions from the backend.
|
|
56
61
|
*/
|
|
@@ -88,6 +93,13 @@ export declare class PluginContext {
|
|
|
88
93
|
* Current Kuzzle node unique identifier
|
|
89
94
|
*/
|
|
90
95
|
nodeId: string;
|
|
96
|
+
/**
|
|
97
|
+
* The Kuzzle instance itself.
|
|
98
|
+
*
|
|
99
|
+
* Only present for plugins declared `privileged` in their manifest:
|
|
100
|
+
* `PrivilegedPluginContext` is what sets it.
|
|
101
|
+
*/
|
|
102
|
+
kuzzle?: Kuzzle;
|
|
91
103
|
};
|
|
92
104
|
config: JSONObject;
|
|
93
105
|
constructors: {
|
|
@@ -98,7 +110,7 @@ export declare class PluginContext {
|
|
|
98
110
|
/**
|
|
99
111
|
* @deprecated import directly: `import { Koncorde } from 'kuzzle'`
|
|
100
112
|
*/
|
|
101
|
-
Koncorde: Koncorde;
|
|
113
|
+
Koncorde: typeof Koncorde;
|
|
102
114
|
/**
|
|
103
115
|
* Mutex class
|
|
104
116
|
*/
|
|
@@ -108,17 +120,17 @@ export declare class PluginContext {
|
|
|
108
120
|
*/
|
|
109
121
|
Repository: new (collection: string, objectConstructor: any) => Repository;
|
|
110
122
|
/**
|
|
111
|
-
* Instantiate a new Request from the original one.
|
|
123
|
+
* Instantiate a new Request from the original one, or from raw data.
|
|
112
124
|
*/
|
|
113
|
-
Request:
|
|
125
|
+
Request: PluginRequestConstructor;
|
|
114
126
|
/**
|
|
115
127
|
* @deprecated import directly: `import { RequestContext } from 'kuzzle'`
|
|
116
128
|
*/
|
|
117
|
-
RequestContext: RequestContext;
|
|
129
|
+
RequestContext: typeof RequestContext;
|
|
118
130
|
/**
|
|
119
131
|
* @deprecated import directly: `import { RequestInput } from 'kuzzle'`
|
|
120
132
|
*/
|
|
121
|
-
RequestInput: RequestInput;
|
|
133
|
+
RequestInput: typeof RequestInput;
|
|
122
134
|
/**
|
|
123
135
|
* Constructor for Elasticsearch SDK Client
|
|
124
136
|
*/
|
|
@@ -155,5 +167,36 @@ export declare class PluginContext {
|
|
|
155
167
|
verbose: (message: any) => void;
|
|
156
168
|
warn: (message: any) => void;
|
|
157
169
|
};
|
|
158
|
-
constructor(pluginName:
|
|
170
|
+
constructor(pluginName: string);
|
|
159
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* `context.accessors.execute`, as v2.56.0 declared it.
|
|
174
|
+
*
|
|
175
|
+
* Without a callback (or with `null`), the answer is a promise of the
|
|
176
|
+
* request. With a callback — called as `callback(error, request)` — the
|
|
177
|
+
* answer goes there, and **nothing is returned at runtime** (`null`): the
|
|
178
|
+
* declared promise does not exist in that form, so do not chain on it. It is
|
|
179
|
+
* declared all the same because v2.56.0 declared it so, and code compiled
|
|
180
|
+
* against that (`execute(request, callback).then(...)`) must still compile;
|
|
181
|
+
* a `Promise | null` return made every `await execute(request)` of a
|
|
182
|
+
* `strict` plugin a compile error.
|
|
183
|
+
*/
|
|
184
|
+
export type PluginExecute = (request: KuzzleRequest, callback?: unknown) => Promise<KuzzleRequest>;
|
|
185
|
+
/**
|
|
186
|
+
* Instantiates a new Request object, using the provided one
|
|
187
|
+
* to set the context informations
|
|
188
|
+
*
|
|
189
|
+
* @throws
|
|
190
|
+
* @param {Request} request
|
|
191
|
+
* @param {Object} data
|
|
192
|
+
* @param {Object} [options]
|
|
193
|
+
* @returns {Request}
|
|
194
|
+
*/
|
|
195
|
+
/**
|
|
196
|
+
* `context.constructors.Request`'s two call shapes: from an original request,
|
|
197
|
+
* whose context and input the new one inherits, or from raw request data.
|
|
198
|
+
*/
|
|
199
|
+
export type PluginRequestConstructor = {
|
|
200
|
+
new (request: KuzzleRequest, data?: JSONObject, options?: JSONObject): KuzzleRequest;
|
|
201
|
+
new (data: JSONObject, options?: JSONObject): KuzzleRequest;
|
|
202
|
+
};
|