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
|
@@ -23,7 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
23
23
|
exports.ServiceUnavailableError = void 0;
|
|
24
24
|
const kuzzleError_1 = require("./kuzzleError");
|
|
25
25
|
class ServiceUnavailableError extends kuzzleError_1.KuzzleError {
|
|
26
|
-
constructor(message, id, code) {
|
|
26
|
+
constructor(message = "", id, code) {
|
|
27
27
|
super(message, 503, id, code);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -23,7 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
23
23
|
exports.SizeLimitError = void 0;
|
|
24
24
|
const kuzzleError_1 = require("./kuzzleError");
|
|
25
25
|
class SizeLimitError extends kuzzleError_1.KuzzleError {
|
|
26
|
-
constructor(message, id, code) {
|
|
26
|
+
constructor(message = "", id, code) {
|
|
27
27
|
super(message, 413, id, code);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -23,7 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
23
23
|
exports.TooManyRequestsError = void 0;
|
|
24
24
|
const kuzzleError_1 = require("./kuzzleError");
|
|
25
25
|
class TooManyRequestsError extends kuzzleError_1.KuzzleError {
|
|
26
|
-
constructor(message, id, code) {
|
|
26
|
+
constructor(message = "", id, code) {
|
|
27
27
|
super(message, 429, id, code);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -23,7 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
23
23
|
exports.UnauthorizedError = void 0;
|
|
24
24
|
const kuzzleError_1 = require("./kuzzleError");
|
|
25
25
|
class UnauthorizedError extends kuzzleError_1.KuzzleError {
|
|
26
|
-
constructor(message, id, code) {
|
|
26
|
+
constructor(message = "", id, code) {
|
|
27
27
|
super(message, 401, id, code);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Domains } from "./codes";
|
|
2
2
|
import * as errors from "./errors";
|
|
3
|
-
import { KuzzleError } from "./errors";
|
|
3
|
+
import type { KuzzleError } from "./errors";
|
|
4
4
|
/**
|
|
5
5
|
* Construct and return the corresponding error
|
|
6
6
|
*
|
|
@@ -11,7 +11,7 @@ import { KuzzleError } from "./errors";
|
|
|
11
11
|
* @param placeholders - Placeholders value to inject in error message
|
|
12
12
|
* @param options - Last param can be additional options { message }
|
|
13
13
|
*/
|
|
14
|
-
export declare function rawGet(domains: Domains, domain: string, subdomain: string, error: string, ...placeholders:
|
|
14
|
+
export declare function rawGet(domains: Domains, domain: string, subdomain: string, error: string, ...placeholders: unknown[]): KuzzleError;
|
|
15
15
|
/**
|
|
16
16
|
* Returns a promise rejected with the corresponding error
|
|
17
17
|
*
|
|
@@ -21,7 +21,7 @@ export declare function rawGet(domains: Domains, domain: string, subdomain: stri
|
|
|
21
21
|
* @param error - Error name: (eg: 'index_not_found')
|
|
22
22
|
* @param placeholders - Placeholders value to inject in error message
|
|
23
23
|
*/
|
|
24
|
-
export declare function rawReject(domains: Domains, domain: string, subdomain: string, error: string, ...placeholders:
|
|
24
|
+
export declare function rawReject(domains: Domains, domain: string, subdomain: string, error: string, ...placeholders: unknown[]): Promise<any>;
|
|
25
25
|
/**
|
|
26
26
|
* Construct and return the corresponding error, with its stack
|
|
27
27
|
* trace derivated from a provided source error
|
|
@@ -33,14 +33,20 @@ export declare function rawReject(domains: Domains, domain: string, subdomain: s
|
|
|
33
33
|
* @param error - Error name: (eg: 'index_not_found')
|
|
34
34
|
* @param placeholders - Placeholders value to inject in error message
|
|
35
35
|
*/
|
|
36
|
-
export declare function rawGetFrom(domains: Domains,
|
|
36
|
+
export declare function rawGetFrom(domains: Domains,
|
|
37
|
+
/**
|
|
38
|
+
* Whatever was thrown. `unknown`, not `Error`: the only thing read off it
|
|
39
|
+
* is a stack, if it has one, and `pipeRunner` derives from what a plugin
|
|
40
|
+
* rejected with — which may be a string.
|
|
41
|
+
*/
|
|
42
|
+
source: unknown, domain: string, subdomain: string, error: string, ...placeholders: unknown[]): KuzzleError;
|
|
37
43
|
/**
|
|
38
44
|
* Wrap error functions with the provided domain and subdomain.
|
|
39
45
|
*/
|
|
40
46
|
export declare function rawWrap(domains: Domains, domain: string, subdomain: string): {
|
|
41
|
-
get: (error:
|
|
42
|
-
getFrom: (source:
|
|
43
|
-
reject: (error:
|
|
47
|
+
get: (error: string, ...placeholders: unknown[]) => errors.KuzzleError;
|
|
48
|
+
getFrom: (source: unknown, error: string, ...placeholders: unknown[]) => errors.KuzzleError;
|
|
49
|
+
reject: (error: string, ...placeholders: unknown[]) => Promise<any>;
|
|
44
50
|
};
|
|
45
51
|
/**
|
|
46
52
|
* Construct and return the corresponding error
|
|
@@ -51,7 +57,7 @@ export declare function rawWrap(domains: Domains, domain: string, subdomain: str
|
|
|
51
57
|
* @param placeholders - Placeholders value to inject in error message
|
|
52
58
|
* @param options - Last param can be additional options { message }
|
|
53
59
|
*/
|
|
54
|
-
export declare function get(domain: string, subdomain: string, error: string, ...placeholders:
|
|
60
|
+
export declare function get(domain: string, subdomain: string, error: string, ...placeholders: unknown[]): KuzzleError;
|
|
55
61
|
/**
|
|
56
62
|
* Returns a promise rejected with the corresponding error
|
|
57
63
|
*
|
|
@@ -60,7 +66,7 @@ export declare function get(domain: string, subdomain: string, error: string, ..
|
|
|
60
66
|
* @param error - Error name: (eg: 'index_not_found')
|
|
61
67
|
* @param placeholders - Placeholders value to inject in error message
|
|
62
68
|
*/
|
|
63
|
-
export declare function reject(domain: string, subdomain: string, error: string, ...placeholders:
|
|
69
|
+
export declare function reject(domain: string, subdomain: string, error: string, ...placeholders: unknown[]): Promise<any>;
|
|
64
70
|
/**
|
|
65
71
|
* Construct and return the corresponding error, with its stack
|
|
66
72
|
* trace derivated from a provided source error
|
|
@@ -71,12 +77,12 @@ export declare function reject(domain: string, subdomain: string, error: string,
|
|
|
71
77
|
* @param error - Error name: (eg: 'index_not_found')
|
|
72
78
|
* @param placeholders - Placeholders value to inject in error message
|
|
73
79
|
*/
|
|
74
|
-
export declare function getFrom(source:
|
|
80
|
+
export declare function getFrom(source: unknown, domain: string, subdomain: string, error: string, ...placeholders: unknown[]): KuzzleError;
|
|
75
81
|
/**
|
|
76
82
|
* Wrap error functions with the provided domain and subdomain.
|
|
77
83
|
*/
|
|
78
84
|
export declare function wrap(domain: string, subdomain: string): {
|
|
79
|
-
get: (error:
|
|
80
|
-
getFrom: (source:
|
|
81
|
-
reject: (error:
|
|
85
|
+
get: (error: string, ...placeholders: unknown[]) => errors.KuzzleError;
|
|
86
|
+
getFrom: (source: unknown, error: string, ...placeholders: unknown[]) => errors.KuzzleError;
|
|
87
|
+
reject: (error: string, ...placeholders: unknown[]) => Promise<any>;
|
|
82
88
|
};
|
package/dist/lib/kerror/index.js
CHANGED
|
@@ -42,27 +42,41 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
42
42
|
__setModuleDefault(result, mod);
|
|
43
43
|
return result;
|
|
44
44
|
};
|
|
45
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
-
};
|
|
48
45
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
46
|
exports.wrap = exports.getFrom = exports.reject = exports.get = exports.rawWrap = exports.rawGetFrom = exports.rawReject = exports.rawGet = void 0;
|
|
50
47
|
const util_1 = require("util");
|
|
51
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
52
48
|
const codes_1 = require("./codes");
|
|
53
49
|
const errors = __importStar(require("./errors"));
|
|
50
|
+
const lodash_1 = require("lodash");
|
|
54
51
|
/**
|
|
55
52
|
* Gets this file name in the exact same format than the one printed in the
|
|
56
53
|
* stacktraces (used to clean kerror lines from stacktraces)
|
|
54
|
+
*
|
|
55
|
+
* `module` is a CommonJS global. Kuzzle ships as CommonJS, but vitest loads
|
|
56
|
+
* `lib/` as ESM, where `module` is undefined — and reading `.filename` off it
|
|
57
|
+
* threw, which made EVERY vitest spec that reaches an error path crash. The
|
|
58
|
+
* guard degrades gracefully instead: with no filename to match, stack-trace
|
|
59
|
+
* cleaning is skipped, which is cosmetic.
|
|
57
60
|
*/
|
|
58
61
|
let _currentFileName = null;
|
|
59
62
|
function _getCurrentFileName() {
|
|
60
63
|
if (_currentFileName !== null) {
|
|
61
64
|
return _currentFileName;
|
|
62
65
|
}
|
|
63
|
-
_currentFileName =
|
|
66
|
+
_currentFileName =
|
|
67
|
+
typeof module === "undefined" || !module.filename
|
|
68
|
+
? ""
|
|
69
|
+
: module.filename.substring(process.cwd().length + 1);
|
|
64
70
|
return _currentFileName;
|
|
65
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Whether the last placeholder is the options object: an object literal
|
|
74
|
+
* only. A class instance is a placeholder like any other value, so it is
|
|
75
|
+
* formatted into the message rather than taken for options.
|
|
76
|
+
*/
|
|
77
|
+
function isOptions(value) {
|
|
78
|
+
return (0, lodash_1.isPlainObject)(value);
|
|
79
|
+
}
|
|
66
80
|
/**
|
|
67
81
|
* Construct and return the corresponding error
|
|
68
82
|
*
|
|
@@ -76,23 +90,34 @@ function _getCurrentFileName() {
|
|
|
76
90
|
function rawGet(domains, domain, subdomain, error, ...placeholders) {
|
|
77
91
|
let options = {};
|
|
78
92
|
// extract options object from the placeholders
|
|
79
|
-
|
|
80
|
-
|
|
93
|
+
const last = placeholders.at(-1);
|
|
94
|
+
if (isOptions(last)) {
|
|
95
|
+
options = last;
|
|
96
|
+
placeholders.pop();
|
|
81
97
|
}
|
|
82
|
-
|
|
83
|
-
|
|
98
|
+
// Walked rather than fetched through a dotted `_.get` path: the three
|
|
99
|
+
// levels are what the code below reads the codes off, the guard then covers
|
|
100
|
+
// all three at once, and the `as any as ErrorDefinition` that the string
|
|
101
|
+
// path required is gone with it.
|
|
102
|
+
const domainEntry = domains[domain];
|
|
103
|
+
const subdomainEntry = domainEntry?.subDomains[subdomain];
|
|
104
|
+
const kuzzleError = subdomainEntry?.errors[error];
|
|
105
|
+
if (!domainEntry || !subdomainEntry || !kuzzleError) {
|
|
84
106
|
return get("core", "fatal", "unexpected_error", `${domain}.${subdomain}.${error}`);
|
|
85
107
|
}
|
|
86
|
-
let body
|
|
108
|
+
let body;
|
|
87
109
|
if (kuzzleError.class === "PartialError" ||
|
|
88
110
|
kuzzleError.class === "MultipleErrorsError") {
|
|
89
|
-
|
|
111
|
+
const [partials] = placeholders.splice(-1);
|
|
112
|
+
// The documented shape is the list of partial errors. Anything else was
|
|
113
|
+
// handed to the constructor and dropped there — `Array.isArray(body)` is
|
|
114
|
+
// the only thing it does with it — so the check moves to where the type
|
|
115
|
+
// is decided.
|
|
116
|
+
body = Array.isArray(partials) ? partials : undefined;
|
|
90
117
|
}
|
|
91
118
|
const message = options.message || (0, util_1.format)(kuzzleError.message, ...placeholders);
|
|
92
119
|
const id = `${domain}.${subdomain}.${error}`;
|
|
93
|
-
const code = (
|
|
94
|
-
(domains[domain].subDomains[subdomain].code << 16) |
|
|
95
|
-
domains[domain].subDomains[subdomain].errors[error].code;
|
|
120
|
+
const code = (domainEntry.code << 24) | (subdomainEntry.code << 16) | kuzzleError.code;
|
|
96
121
|
let kerror;
|
|
97
122
|
if (kuzzleError.class === "PartialError" ||
|
|
98
123
|
kuzzleError.class === "MultipleErrorsError") {
|
|
@@ -105,7 +130,10 @@ function rawGet(domains, domain, subdomain, error, ...placeholders) {
|
|
|
105
130
|
else {
|
|
106
131
|
kerror = new errors[kuzzleError.class](message, id, code);
|
|
107
132
|
}
|
|
108
|
-
kerror.props = placeholders
|
|
133
|
+
// Not `kerror.props = placeholders`: `props` is declared `string[]`, which
|
|
134
|
+
// is what code compiled against v2.56.0 reads, and a placeholder may be
|
|
135
|
+
// anything. See KuzzleError.props.
|
|
136
|
+
Object.assign(kerror, { props: placeholders });
|
|
109
137
|
if (kuzzleError.class !== "InternalError") {
|
|
110
138
|
cleanStackTrace(kerror);
|
|
111
139
|
}
|
|
@@ -124,6 +152,11 @@ exports.rawGet = rawGet;
|
|
|
124
152
|
* at ControllerManager.add (kuzzle/lib/core/backend/backend.ts:226:34)
|
|
125
153
|
*/
|
|
126
154
|
function cleanStackTrace(error) {
|
|
155
|
+
// `Error.stack` is not guaranteed — `Error.stackTraceLimit = 0` removes it,
|
|
156
|
+
// and there is nothing to trim off an error that has none.
|
|
157
|
+
if (error.stack === undefined) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
127
160
|
// Keep the original error message
|
|
128
161
|
const messageLength = error.message.split("\n").length;
|
|
129
162
|
const currentFileName = _getCurrentFileName();
|
|
@@ -134,8 +167,10 @@ function cleanStackTrace(error) {
|
|
|
134
167
|
if (index < messageLength) {
|
|
135
168
|
return true;
|
|
136
169
|
}
|
|
137
|
-
// filter all lines related to the kerror object
|
|
138
|
-
|
|
170
|
+
// filter all lines related to the kerror object. An empty
|
|
171
|
+
// `currentFileName` (see above) matches everything, so guard it: no
|
|
172
|
+
// filename means no filtering.
|
|
173
|
+
return currentFileName === "" || !line.includes(currentFileName);
|
|
139
174
|
});
|
|
140
175
|
// insert a deletion message in place of the new error instantiation line
|
|
141
176
|
newStack[messageLength] = " [...Kuzzle internal calls deleted...]";
|
|
@@ -165,11 +200,17 @@ exports.rawReject = rawReject;
|
|
|
165
200
|
* @param error - Error name: (eg: 'index_not_found')
|
|
166
201
|
* @param placeholders - Placeholders value to inject in error message
|
|
167
202
|
*/
|
|
168
|
-
function rawGetFrom(domains,
|
|
203
|
+
function rawGetFrom(domains,
|
|
204
|
+
/**
|
|
205
|
+
* Whatever was thrown. `unknown`, not `Error`: the only thing read off it
|
|
206
|
+
* is a stack, if it has one, and `pipeRunner` derives from what a plugin
|
|
207
|
+
* rejected with — which may be a string.
|
|
208
|
+
*/
|
|
209
|
+
source, domain, subdomain, error, ...placeholders) {
|
|
169
210
|
const derivedError = rawGet(domains, domain, subdomain, error, ...placeholders);
|
|
170
211
|
// If a stacktrace is present, we need to modify the first line because it
|
|
171
212
|
// still contains the original error message
|
|
172
|
-
if (derivedError?.stack?.length && source
|
|
213
|
+
if (derivedError?.stack?.length && source instanceof Error && source.stack) {
|
|
173
214
|
const stackArray = source.stack.split("\n");
|
|
174
215
|
stackArray.shift();
|
|
175
216
|
derivedError.stack = [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { KuzzleLogger } from "kuzzle-logger";
|
|
2
|
-
import {
|
|
2
|
+
import type { IKuzzleConfiguration } from "../types/config/KuzzleConfiguration";
|
|
3
3
|
/**
|
|
4
4
|
* The Logger class provides logging functionality for Kuzzle.
|
|
5
5
|
*/
|
|
@@ -11,7 +11,7 @@ export declare class Logger extends KuzzleLogger {
|
|
|
11
11
|
private static basePino;
|
|
12
12
|
private warnedForSillyDeprecation;
|
|
13
13
|
private warnedForVerboseDeprecation;
|
|
14
|
-
constructor(kuzzleConfig:
|
|
14
|
+
constructor(kuzzleConfig: IKuzzleConfiguration, namespace?: string);
|
|
15
15
|
/**
|
|
16
16
|
* Logs a message with the "silly" level.
|
|
17
17
|
*
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
export = DumpGenerator;
|
|
2
1
|
declare class DumpGenerator {
|
|
3
|
-
_dump
|
|
4
|
-
logger
|
|
2
|
+
private _dump;
|
|
3
|
+
private readonly logger;
|
|
4
|
+
constructor();
|
|
5
5
|
/**
|
|
6
6
|
* Create a dump
|
|
7
|
-
*
|
|
8
|
-
* @param {string} suffix
|
|
9
|
-
* @returns {Promise}
|
|
10
7
|
*/
|
|
11
|
-
dump(suffix: string): Promise<
|
|
8
|
+
dump(suffix: string): Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* The directory this dump will be written to, or a `BadRequestError` if the
|
|
11
|
+
* suffix is malformed or would place it outside the configured dump path.
|
|
12
|
+
*/
|
|
13
|
+
private _resolveDumpPath;
|
|
14
|
+
private _generate;
|
|
12
15
|
_cleanUpHistory(): void;
|
|
13
|
-
_listFilesMatching(directory:
|
|
16
|
+
_listFilesMatching(directory: string, start: string): string[];
|
|
14
17
|
}
|
|
18
|
+
export = DumpGenerator;
|
|
@@ -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,17 +19,42 @@
|
|
|
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_os_1 = __importDefault(require("node:os"));
|
|
50
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
51
|
+
const node_zlib_1 = __importDefault(require("node:zlib"));
|
|
52
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
53
|
+
const dumpme_1 = __importDefault(require("dumpme"));
|
|
54
|
+
const moment_1 = __importDefault(require("moment"));
|
|
55
|
+
const package_json_1 = __importDefault(require("../../package.json"));
|
|
56
|
+
const kerror = __importStar(require("../kerror"));
|
|
57
|
+
const errors_1 = require("../kerror/errors");
|
|
32
58
|
class DumpGenerator {
|
|
33
59
|
constructor() {
|
|
34
60
|
this._dump = false;
|
|
@@ -36,49 +62,71 @@ class DumpGenerator {
|
|
|
36
62
|
}
|
|
37
63
|
/**
|
|
38
64
|
* Create a dump
|
|
39
|
-
*
|
|
40
|
-
* @param {string} suffix
|
|
41
|
-
* @returns {Promise}
|
|
42
65
|
*/
|
|
43
66
|
async dump(suffix) {
|
|
44
67
|
if (this._dump) {
|
|
45
68
|
throw kerror.get("api", "process", "action_locked", "dump");
|
|
46
69
|
}
|
|
70
|
+
// The arguments are checked before the lock is taken, and every path out
|
|
71
|
+
// of the generation releases it: a lock held past a failure answers every
|
|
72
|
+
// later dump with `action_locked` about a dump that is not running
|
|
73
|
+
// (TD-81).
|
|
74
|
+
const dumpPath = this._resolveDumpPath(suffix);
|
|
47
75
|
this._dump = true;
|
|
48
|
-
|
|
49
|
-
|
|
76
|
+
try {
|
|
77
|
+
return await this._generate(dumpPath);
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
this._dump = false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The directory this dump will be written to, or a `BadRequestError` if the
|
|
85
|
+
* suffix is malformed or would place it outside the configured dump path.
|
|
86
|
+
*/
|
|
87
|
+
_resolveDumpPath(suffix) {
|
|
88
|
+
const suffixRegex = /^[A-Za-z0-9_-]{0,64}$/;
|
|
89
|
+
if (!suffixRegex.test(suffix)) {
|
|
90
|
+
throw kerror.get("api", "assert", "invalid_argument", "suffix", "at most 64 alphanumeric characters, '-' or '_'");
|
|
91
|
+
}
|
|
92
|
+
const basePath = node_path_1.default.normalize(global.kuzzle.config.dump.path);
|
|
93
|
+
const dumpPath = node_path_1.default.join(basePath, (0, moment_1.default)()
|
|
50
94
|
.format(global.kuzzle.config.dump.dateFormat)
|
|
51
95
|
.concat(`-${suffix}`)
|
|
52
96
|
.substring(0, 200));
|
|
53
|
-
const resolvedPath =
|
|
54
|
-
if (!resolvedPath.startsWith(
|
|
55
|
-
throw new BadRequestError(`Dump path '${dumpPath}' is outside of designated dump directory '${basePath}'`);
|
|
97
|
+
const resolvedPath = node_path_1.default.resolve(dumpPath);
|
|
98
|
+
if (!resolvedPath.startsWith(node_path_1.default.resolve(basePath) + node_path_1.default.sep)) {
|
|
99
|
+
throw new errors_1.BadRequestError(`Dump path '${dumpPath}' is outside of designated dump directory '${basePath}'`);
|
|
56
100
|
}
|
|
101
|
+
return dumpPath;
|
|
102
|
+
}
|
|
103
|
+
async _generate(dumpPath) {
|
|
57
104
|
this.logger.info("=".repeat(79));
|
|
58
105
|
this.logger.info(`Generating dump in ${dumpPath}`);
|
|
59
106
|
this._cleanUpHistory();
|
|
60
107
|
try {
|
|
61
|
-
|
|
108
|
+
node_fs_1.default.mkdirSync(dumpPath, { recursive: true });
|
|
62
109
|
}
|
|
63
110
|
catch (e) {
|
|
64
|
-
const
|
|
111
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
112
|
+
const message = error.message.startsWith("EEXIST")
|
|
65
113
|
? "Dump directory already exists. Skipping.."
|
|
66
|
-
: `Unable to create dump folder: ${
|
|
114
|
+
: `Unable to create dump folder: ${error.message}`;
|
|
67
115
|
this.logger.error(message);
|
|
68
|
-
throw new Error(message);
|
|
116
|
+
throw new Error(message, { cause: e });
|
|
69
117
|
}
|
|
70
118
|
// dump kuzzle information
|
|
71
119
|
this.logger.info("> dumping kuzzle configuration");
|
|
72
|
-
|
|
120
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(dumpPath, "kuzzle.json"), JSON.stringify({
|
|
73
121
|
config: global.kuzzle.config,
|
|
74
|
-
version:
|
|
122
|
+
version: package_json_1.default.version,
|
|
75
123
|
}, null, " ").concat("\n"));
|
|
76
124
|
// dump plugins configuration
|
|
77
125
|
this.logger.info("> dumping plugins configuration");
|
|
78
|
-
|
|
126
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(dumpPath, "plugins.json"), JSON.stringify(global.kuzzle.pluginsManager.getPluginsDescription(), null, " ").concat("\n"));
|
|
79
127
|
// dump Node.js configuration
|
|
80
128
|
this.logger.info("> dumping Node.js configuration");
|
|
81
|
-
|
|
129
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(dumpPath, "nodejs.json"), JSON.stringify({
|
|
82
130
|
argv: process.argv,
|
|
83
131
|
config: process.config,
|
|
84
132
|
env: process.env,
|
|
@@ -88,36 +136,42 @@ class DumpGenerator {
|
|
|
88
136
|
}, null, " ").concat("\n"));
|
|
89
137
|
// dump os configuration
|
|
90
138
|
this.logger.info("> dumping os configuration");
|
|
91
|
-
|
|
92
|
-
cpus:
|
|
93
|
-
loadavg:
|
|
139
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(dumpPath, "os.json"), JSON.stringify({
|
|
140
|
+
cpus: node_os_1.default.cpus(),
|
|
141
|
+
loadavg: node_os_1.default.loadavg(),
|
|
94
142
|
mem: {
|
|
95
|
-
free:
|
|
96
|
-
total:
|
|
143
|
+
free: node_os_1.default.freemem(),
|
|
144
|
+
total: node_os_1.default.totalmem(),
|
|
97
145
|
},
|
|
98
|
-
networkInterfaces:
|
|
99
|
-
platform:
|
|
100
|
-
uptime:
|
|
146
|
+
networkInterfaces: node_os_1.default.networkInterfaces(),
|
|
147
|
+
platform: node_os_1.default.platform(),
|
|
148
|
+
uptime: node_os_1.default.uptime(),
|
|
101
149
|
}, null, " ").concat("\n"));
|
|
102
150
|
// core-dump
|
|
103
151
|
this.logger.info("> generating core-dump");
|
|
104
|
-
|
|
152
|
+
(0, dumpme_1.default)(global.kuzzle.config.dump.gcore || "gcore", `${dumpPath}/core`);
|
|
105
153
|
// Gzip the core
|
|
106
154
|
try {
|
|
107
155
|
const corefiles = this._listFilesMatching(dumpPath, "core");
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
156
|
+
// Read once: the same element is used four times below, twice from
|
|
157
|
+
// inside a callback where the `if` above no longer narrows it.
|
|
158
|
+
const corefile = corefiles[0];
|
|
159
|
+
if (corefile) {
|
|
160
|
+
const readStream = node_fs_1.default.createReadStream(corefile);
|
|
161
|
+
const writeStream = node_fs_1.default.createWriteStream(`${dumpPath}/core.gz`);
|
|
162
|
+
await new bluebird_1.default((resolve) => readStream
|
|
163
|
+
.pipe(node_zlib_1.default.createGzip())
|
|
113
164
|
.pipe(writeStream)
|
|
114
165
|
.on("finish", () => {
|
|
115
166
|
// rm the original core file
|
|
116
167
|
try {
|
|
117
|
-
|
|
168
|
+
node_fs_1.default.unlinkSync(corefile);
|
|
118
169
|
}
|
|
119
|
-
catch
|
|
120
|
-
|
|
170
|
+
catch {
|
|
171
|
+
// The unlink error is deliberately dropped: the core file is a
|
|
172
|
+
// best-effort cleanup and its own path is already in the
|
|
173
|
+
// warning.
|
|
174
|
+
this.logger.warn(`> unable to clean up core file ${corefile}`);
|
|
121
175
|
}
|
|
122
176
|
resolve();
|
|
123
177
|
}));
|
|
@@ -131,30 +185,33 @@ class DumpGenerator {
|
|
|
131
185
|
}
|
|
132
186
|
// copy node binary
|
|
133
187
|
this.logger.info("> copy node binary");
|
|
134
|
-
|
|
188
|
+
node_fs_1.default.copyFileSync(process.execPath, node_path_1.default.join(dumpPath, "node"));
|
|
135
189
|
// dumping Kuzzle's stats
|
|
136
190
|
this.logger.info("> dumping kuzzle's stats");
|
|
137
|
-
|
|
138
|
-
|
|
191
|
+
// `getAllStats()` takes no argument and never has: it forwards to
|
|
192
|
+
// `getStats()` with none. The `Request` the JavaScript built here was
|
|
193
|
+
// constructed and discarded on every dump.
|
|
194
|
+
const statistics = await global.kuzzle.statistics.getAllStats();
|
|
195
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(dumpPath, "statistics.json"), JSON.stringify(statistics.hits, null, " ").concat("\n"));
|
|
139
196
|
this.logger.info("Done.");
|
|
140
197
|
this.logger.info("[ℹ] You can send the folder to the kuzzle core team at support@kuzzle.io");
|
|
141
198
|
this.logger.info("=".repeat(79));
|
|
142
|
-
this._dump = false;
|
|
143
199
|
return dumpPath;
|
|
144
200
|
}
|
|
145
201
|
_cleanUpHistory() {
|
|
146
|
-
const config = global.kuzzle.config.dump, dumpPath =
|
|
202
|
+
const config = global.kuzzle.config.dump, dumpPath = node_path_1.default.normalize(global.kuzzle.config.dump.path);
|
|
147
203
|
try {
|
|
148
|
-
|
|
204
|
+
node_fs_1.default.accessSync(dumpPath, node_fs_1.default.constants.R_OK | node_fs_1.default.constants.W_OK | node_fs_1.default.constants.X_OK);
|
|
149
205
|
}
|
|
150
|
-
catch
|
|
206
|
+
catch {
|
|
207
|
+
// Not readable, writable and traversable: there is no history to clean.
|
|
151
208
|
return;
|
|
152
209
|
}
|
|
153
|
-
const dumps =
|
|
210
|
+
const dumps = node_fs_1.default
|
|
154
211
|
.readdirSync(dumpPath)
|
|
155
212
|
.map((file) => {
|
|
156
213
|
const filepath = `${dumpPath}/${file}`;
|
|
157
|
-
return { path: filepath, stat:
|
|
214
|
+
return { path: filepath, stat: node_fs_1.default.statSync(filepath) };
|
|
158
215
|
})
|
|
159
216
|
.filter((prop) => prop.stat.isDirectory())
|
|
160
217
|
.sort((a, b) => {
|
|
@@ -164,22 +221,33 @@ class DumpGenerator {
|
|
|
164
221
|
return a.stat.birthtime < b.stat.birthtime ? -1 : 1;
|
|
165
222
|
});
|
|
166
223
|
while (dumps.length >= config.history.reports) {
|
|
167
|
-
const
|
|
168
|
-
|
|
224
|
+
const dump = dumps.shift();
|
|
225
|
+
// `shift()` answers both questions at once. It matters: a configured
|
|
226
|
+
// `history.reports` of 0 makes the condition above constant-true, and the
|
|
227
|
+
// old shape then read `.path` off undefined.
|
|
228
|
+
if (dump === undefined) {
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
node_fs_1.default.rmSync(dump.path, { recursive: true });
|
|
169
232
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
233
|
+
// The oldest dumps lose their core file, all but the `coredump` newest.
|
|
234
|
+
// The bound is clamped: `slice` counts a negative end from the end of the
|
|
235
|
+
// list, which would take core files from the dumps it has to keep.
|
|
236
|
+
const withoutCore = Math.max(0, dumps.length - config.history.coredump);
|
|
237
|
+
for (const dump of dumps.slice(0, withoutCore)) {
|
|
238
|
+
const corefiles = this._listFilesMatching(node_path_1.default.normalize(dump.path), "core");
|
|
239
|
+
const corefile = corefiles[0];
|
|
240
|
+
if (corefile) {
|
|
241
|
+
node_fs_1.default.unlinkSync(corefile);
|
|
174
242
|
}
|
|
175
243
|
}
|
|
176
244
|
}
|
|
177
245
|
_listFilesMatching(directory, start) {
|
|
178
|
-
return
|
|
246
|
+
return node_fs_1.default
|
|
179
247
|
.readdirSync(directory)
|
|
180
|
-
.filter((entry) =>
|
|
248
|
+
.filter((entry) => node_fs_1.default.lstatSync(`${directory}/${entry}`).isFile() &&
|
|
181
249
|
entry.startsWith(start))
|
|
182
|
-
.map((file) =>
|
|
250
|
+
.map((file) => node_path_1.default.join(directory, file));
|
|
183
251
|
}
|
|
184
252
|
}
|
|
185
253
|
module.exports = DumpGenerator;
|