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,24 +19,59 @@
|
|
|
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
|
-
|
|
22
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
25
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
26
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
27
|
+
}
|
|
28
|
+
Object.defineProperty(o, k2, desc);
|
|
29
|
+
}) : (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
o[k2] = m[k];
|
|
32
|
+
}));
|
|
33
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
34
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
35
|
+
}) : function(o, v) {
|
|
36
|
+
o["default"] = v;
|
|
37
|
+
});
|
|
38
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
+
};
|
|
48
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
49
|
+
const long_1 = __importDefault(require("long"));
|
|
50
|
+
const protobuf = __importStar(require("protobufjs"));
|
|
51
|
+
const zeromq_1 = require("zeromq");
|
|
26
52
|
const STATE = Object.freeze({
|
|
27
53
|
READY: 1,
|
|
28
54
|
SENDING: 2,
|
|
29
55
|
});
|
|
56
|
+
/**
|
|
57
|
+
* Test-only fault injection: when set to N > 0, every Nth **heartbeat** this
|
|
58
|
+
* node publishes is recorded as sent but never handed to the socket, so that
|
|
59
|
+
* the functional suites exercise the retransmission path. Unset in production.
|
|
60
|
+
*
|
|
61
|
+
* Heartbeats only: a loss is noticed when the sender's *next* message arrives,
|
|
62
|
+
* up to one heartbeat later, so dropping a state message (a new collection,
|
|
63
|
+
* say) would let a scenario read another node before the gap is filled — a
|
|
64
|
+
* timing artefact of the injection, not a retransmission failure.
|
|
65
|
+
*/
|
|
66
|
+
const DROP_HEARTBEAT_EVERY_ENV = "KUZZLE_TEST_CLUSTER_DROP_HEARTBEAT_EVERY";
|
|
30
67
|
// Handles messages publication to other nodes
|
|
31
68
|
class ClusterPublisher {
|
|
32
69
|
/**
|
|
33
|
-
* @
|
|
34
|
-
* @param {ClusterNode} node
|
|
70
|
+
* @param node the cluster node this publisher belongs to
|
|
35
71
|
*/
|
|
36
72
|
constructor(node) {
|
|
37
73
|
this.node = node;
|
|
38
|
-
this.lastMessageId = new
|
|
74
|
+
this.lastMessageId = new long_1.default(0, 0, true);
|
|
39
75
|
this.socket = null;
|
|
40
76
|
this.protoroot = null;
|
|
41
77
|
// Only one call to socket.send can be performed at any given time, and it
|
|
@@ -46,17 +82,23 @@ class ClusterPublisher {
|
|
|
46
82
|
// by bufferizing requests to send
|
|
47
83
|
this.state = STATE.READY;
|
|
48
84
|
this.buffer = [];
|
|
85
|
+
this.history = [];
|
|
86
|
+
this.historyBytes = 0;
|
|
87
|
+
const dropEvery = Number.parseInt(process.env[DROP_HEARTBEAT_EVERY_ENV] ?? "", 10);
|
|
88
|
+
this.dropHeartbeatEvery =
|
|
89
|
+
Number.isInteger(dropEvery) && dropEvery > 0 ? dropEvery : 0;
|
|
90
|
+
this.heartbeatsSent = 0;
|
|
49
91
|
}
|
|
50
92
|
async init() {
|
|
51
|
-
this.socket = new Publisher();
|
|
93
|
+
this.socket = new zeromq_1.Publisher();
|
|
52
94
|
await this.socket.bind(`tcp://*:${this.node.config.ports.sync}`);
|
|
53
95
|
this.protoroot = await protobuf.load(`${__dirname}/protobuf/sync.proto`);
|
|
54
96
|
}
|
|
55
97
|
/**
|
|
56
98
|
* Publishes an event telling them that this node has created a new room
|
|
57
99
|
*
|
|
58
|
-
* @param
|
|
59
|
-
* @return
|
|
100
|
+
* @param normalized - Obtained with Koncorde.normalize()
|
|
101
|
+
* @return ID of the message sent to other nodes
|
|
60
102
|
*/
|
|
61
103
|
sendNewRealtimeRoom(normalized) {
|
|
62
104
|
const payload = {
|
|
@@ -70,16 +112,16 @@ class ClusterPublisher {
|
|
|
70
112
|
* Publishes an event telling telling them that this node
|
|
71
113
|
* no longer has subscribers on the provided realtime room.
|
|
72
114
|
*
|
|
73
|
-
* @param
|
|
74
|
-
* @return
|
|
115
|
+
* @param roomId
|
|
116
|
+
* @return ID of the message sent to other nodes
|
|
75
117
|
*/
|
|
76
118
|
sendRemoveRealtimeRoom(roomId) {
|
|
77
119
|
return this.send("RemoveRealtimeRoom", { roomId });
|
|
78
120
|
}
|
|
79
121
|
/**
|
|
80
122
|
* Publishes an event telling that a room has one less subscriber
|
|
81
|
-
* @param
|
|
82
|
-
* @return
|
|
123
|
+
* @param roomId
|
|
124
|
+
* @return ID of the message sent to other nodes
|
|
83
125
|
*/
|
|
84
126
|
sendUnsubscription(roomId) {
|
|
85
127
|
return this.send("Unsubscription", { roomId });
|
|
@@ -88,8 +130,8 @@ class ClusterPublisher {
|
|
|
88
130
|
* Publishes an event telling that a new subscription has been made
|
|
89
131
|
* made to an existing room
|
|
90
132
|
*
|
|
91
|
-
* @param
|
|
92
|
-
* @return
|
|
133
|
+
* @param roomId
|
|
134
|
+
* @return Id of the message sent to other nodes
|
|
93
135
|
*/
|
|
94
136
|
sendSubscription(roomId) {
|
|
95
137
|
return this.send("Subscription", { roomId });
|
|
@@ -98,9 +140,9 @@ class ClusterPublisher {
|
|
|
98
140
|
* Publishes an event telling that a document notification must be
|
|
99
141
|
* propagated
|
|
100
142
|
*
|
|
101
|
-
* @param
|
|
102
|
-
* @param
|
|
103
|
-
* @return
|
|
143
|
+
* @param rooms - Koncorde rooms
|
|
144
|
+
* @param notification
|
|
145
|
+
* @return Id of the message sent to other nodes
|
|
104
146
|
*/
|
|
105
147
|
sendDocumentNotification(rooms, notification) {
|
|
106
148
|
return this.send("DocumentNotification", {
|
|
@@ -122,9 +164,9 @@ class ClusterPublisher {
|
|
|
122
164
|
* Publishes an event telling that a user notification must be
|
|
123
165
|
* propagated
|
|
124
166
|
*
|
|
125
|
-
* @param
|
|
126
|
-
* @param
|
|
127
|
-
* @return
|
|
167
|
+
* @param room - Koncorde room
|
|
168
|
+
* @param notification
|
|
169
|
+
* @return Id of the message sent to other nodes
|
|
128
170
|
*/
|
|
129
171
|
sendUserNotification(room, notification) {
|
|
130
172
|
return this.send("UserNotification", {
|
|
@@ -145,10 +187,10 @@ class ClusterPublisher {
|
|
|
145
187
|
* Publishes an event telling that a new authentication strategy has been
|
|
146
188
|
* dynamically added
|
|
147
189
|
*
|
|
148
|
-
* @param
|
|
149
|
-
* @param
|
|
150
|
-
* @param
|
|
151
|
-
* @return
|
|
190
|
+
* @param strategyName
|
|
191
|
+
* @param pluginName
|
|
192
|
+
* @param strategy
|
|
193
|
+
* @return Id of the message sent to other nodes
|
|
152
194
|
*/
|
|
153
195
|
sendNewAuthStrategy(strategyName, pluginName, strategy) {
|
|
154
196
|
return this.send("NewAuthStrategy", {
|
|
@@ -161,10 +203,9 @@ class ClusterPublisher {
|
|
|
161
203
|
* Publishes an event telling that a new authentication strategy has been
|
|
162
204
|
* dynamically added
|
|
163
205
|
*
|
|
164
|
-
* @param
|
|
165
|
-
* @param
|
|
166
|
-
* @
|
|
167
|
-
* @return {Long} Id of the message sent to other nodes
|
|
206
|
+
* @param strategyName
|
|
207
|
+
* @param pluginName
|
|
208
|
+
* @return Id of the message sent to other nodes
|
|
168
209
|
*/
|
|
169
210
|
sendRemoveAuthStrategy(strategyName, pluginName) {
|
|
170
211
|
return this.send("RemoveAuthStrategy", {
|
|
@@ -175,8 +216,8 @@ class ClusterPublisher {
|
|
|
175
216
|
/**
|
|
176
217
|
* Publishes an event telling other nodes to create an info dump
|
|
177
218
|
*
|
|
178
|
-
* @param
|
|
179
|
-
* @returns
|
|
219
|
+
* @param suffix - dump directory suffix name
|
|
220
|
+
* @returns ID of the message sent
|
|
180
221
|
*/
|
|
181
222
|
sendDumpRequest(suffix) {
|
|
182
223
|
return this.send("DumpRequest", { suffix });
|
|
@@ -184,9 +225,9 @@ class ClusterPublisher {
|
|
|
184
225
|
/**
|
|
185
226
|
* Publishes an event about a new index being added
|
|
186
227
|
*
|
|
187
|
-
* @param
|
|
188
|
-
* @param
|
|
189
|
-
* @returns
|
|
228
|
+
* @param scope
|
|
229
|
+
* @param index
|
|
230
|
+
* @returns ID of the message sent
|
|
190
231
|
*/
|
|
191
232
|
sendAddIndex(scope, index) {
|
|
192
233
|
return this.send("AddIndex", { index, scope });
|
|
@@ -194,10 +235,10 @@ class ClusterPublisher {
|
|
|
194
235
|
/**
|
|
195
236
|
* Publishes an event about a new collection being added
|
|
196
237
|
*
|
|
197
|
-
* @param
|
|
198
|
-
* @param
|
|
199
|
-
* @param
|
|
200
|
-
* @returns
|
|
238
|
+
* @param scope
|
|
239
|
+
* @param index
|
|
240
|
+
* @param collection
|
|
241
|
+
* @returns ID of the message sent
|
|
201
242
|
*/
|
|
202
243
|
sendAddCollection(scope, index, collection) {
|
|
203
244
|
return this.send("AddCollection", { collection, index, scope });
|
|
@@ -205,9 +246,9 @@ class ClusterPublisher {
|
|
|
205
246
|
/**
|
|
206
247
|
* Publishes an event about indexes been removed
|
|
207
248
|
*
|
|
208
|
-
* @param
|
|
209
|
-
* @param
|
|
210
|
-
* @returns
|
|
249
|
+
* @param scope
|
|
250
|
+
* @param indexes
|
|
251
|
+
* @returns ID of the message sent
|
|
211
252
|
*/
|
|
212
253
|
sendRemoveIndexes(scope, indexes) {
|
|
213
254
|
return this.send("RemoveIndexes", { indexes, scope });
|
|
@@ -215,10 +256,10 @@ class ClusterPublisher {
|
|
|
215
256
|
/**
|
|
216
257
|
* Publishes an event about a collection been removed
|
|
217
258
|
*
|
|
218
|
-
* @param
|
|
219
|
-
* @param
|
|
220
|
-
* @param
|
|
221
|
-
* @returns
|
|
259
|
+
* @param scope
|
|
260
|
+
* @param index
|
|
261
|
+
* @param collection
|
|
262
|
+
* @returns ID of the message sent
|
|
222
263
|
*/
|
|
223
264
|
sendRemoveCollection(scope, index, collection) {
|
|
224
265
|
return this.send("RemoveCollection", { collection, index, scope });
|
|
@@ -226,9 +267,9 @@ class ClusterPublisher {
|
|
|
226
267
|
/**
|
|
227
268
|
* Publishes an event about a cluster-wide event emission
|
|
228
269
|
*
|
|
229
|
-
* @param
|
|
230
|
-
* @param
|
|
231
|
-
* @returns
|
|
270
|
+
* @param event name
|
|
271
|
+
* @param payload - event payload
|
|
272
|
+
* @returns ID of the message sent
|
|
232
273
|
*/
|
|
233
274
|
sendClusterWideEvent(event, payload) {
|
|
234
275
|
return this.send("ClusterWideEvent", {
|
|
@@ -239,18 +280,18 @@ class ClusterPublisher {
|
|
|
239
280
|
/**
|
|
240
281
|
* Publishes an event about shutdown
|
|
241
282
|
*
|
|
242
|
-
* @param
|
|
283
|
+
* @param nodeId - node ID
|
|
243
284
|
*
|
|
244
|
-
* @returns
|
|
285
|
+
* @returns ID of the message sent
|
|
245
286
|
*/
|
|
246
287
|
sendNodeShutdown(nodeId) {
|
|
247
288
|
return this.send("NodeShutdown", { nodeId });
|
|
248
289
|
}
|
|
249
290
|
/**
|
|
250
291
|
* Publishes an event about the node being in debug mode
|
|
251
|
-
* @param
|
|
292
|
+
* @param evictionPrevented
|
|
252
293
|
*
|
|
253
|
-
* @returns
|
|
294
|
+
* @returns ID of the message sent
|
|
254
295
|
*/
|
|
255
296
|
sendNodePreventEviction(evictionPrevented) {
|
|
256
297
|
return this.send("NodePreventEviction", { evictionPrevented });
|
|
@@ -258,11 +299,11 @@ class ClusterPublisher {
|
|
|
258
299
|
/**
|
|
259
300
|
* Publishes an event about a node being evicted
|
|
260
301
|
*
|
|
261
|
-
* @param
|
|
262
|
-
* @param
|
|
263
|
-
* @param
|
|
302
|
+
* @param evictor node ID of the evictor
|
|
303
|
+
* @param nodeId - node ID of the node being evicted
|
|
304
|
+
* @param reason - reason of the eviction
|
|
264
305
|
*
|
|
265
|
-
* @returns
|
|
306
|
+
* @returns ID of the message sent
|
|
266
307
|
*/
|
|
267
308
|
sendNodeEvicted(evictor, nodeId, reason) {
|
|
268
309
|
return this.send("NodeEvicted", { evictor, nodeId, reason });
|
|
@@ -270,9 +311,9 @@ class ClusterPublisher {
|
|
|
270
311
|
/**
|
|
271
312
|
* Publishes an event about heartbeat
|
|
272
313
|
*
|
|
273
|
-
* @param
|
|
314
|
+
* @param address node sync address
|
|
274
315
|
*
|
|
275
|
-
* @returns
|
|
316
|
+
* @returns ID of the message sent
|
|
276
317
|
*/
|
|
277
318
|
sendHeartbeat(address) {
|
|
278
319
|
return this.send("Heartbeat", { address });
|
|
@@ -282,19 +323,29 @@ class ClusterPublisher {
|
|
|
282
323
|
* Returns immediately, but the message to be sent migh be bufferized and send
|
|
283
324
|
* later.
|
|
284
325
|
*
|
|
285
|
-
* @param
|
|
286
|
-
* @param
|
|
287
|
-
* @returns
|
|
326
|
+
* @param topic name
|
|
327
|
+
* @param data
|
|
328
|
+
* @returns ID of the message sent
|
|
288
329
|
* @throws If the topic's protobuf type cannot be found
|
|
289
330
|
*/
|
|
290
331
|
send(topic, data) {
|
|
291
|
-
|
|
292
|
-
|
|
332
|
+
// `socket` and `protoroot` are both filled by `init()` and nulled by
|
|
333
|
+
// `dispose()`, together: one guard answers for both, where the old one
|
|
334
|
+
// answered for the socket and left `protoroot` to be taken on trust.
|
|
335
|
+
if (this.socket === null || this.protoroot === null) {
|
|
336
|
+
return long_1.default.NEG_ONE;
|
|
293
337
|
}
|
|
294
338
|
this.lastMessageId = this.lastMessageId.add(1);
|
|
295
|
-
const payload =
|
|
339
|
+
const payload = { messageId: this.lastMessageId, ...data };
|
|
296
340
|
const type = this.protoroot.lookupType(topic);
|
|
297
341
|
const buffer = type.encode(type.create(payload)).finish();
|
|
342
|
+
this.remember(this.lastMessageId, topic, buffer);
|
|
343
|
+
if (this.dropHeartbeatEvery > 0 && topic === "Heartbeat") {
|
|
344
|
+
this.heartbeatsSent++;
|
|
345
|
+
if (this.heartbeatsSent % this.dropHeartbeatEvery === 0) {
|
|
346
|
+
return this.lastMessageId;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
298
349
|
// DO NOT AWAIT: bufferSend is built to bufferize payloads to be sent, and
|
|
299
350
|
// it makes sure that they are sent in order and serially (0mq publisher
|
|
300
351
|
// sockets can only send 1 message at a time, otherwise it throws with a
|
|
@@ -306,13 +357,53 @@ class ClusterPublisher {
|
|
|
306
357
|
this.bufferSend(topic, buffer);
|
|
307
358
|
return this.lastMessageId;
|
|
308
359
|
}
|
|
360
|
+
/**
|
|
361
|
+
* The messages sent with ids `from` to `to`, both included, in order — or
|
|
362
|
+
* `null` if any of them is no longer kept (or never was).
|
|
363
|
+
*/
|
|
364
|
+
replay(from, to) {
|
|
365
|
+
const oldest = this.history[0];
|
|
366
|
+
const newest = this.history.at(-1);
|
|
367
|
+
if (oldest === undefined ||
|
|
368
|
+
newest === undefined ||
|
|
369
|
+
from.greaterThan(to) ||
|
|
370
|
+
from.lessThan(oldest.messageId) ||
|
|
371
|
+
to.greaterThan(newest.messageId)) {
|
|
372
|
+
return null;
|
|
373
|
+
}
|
|
374
|
+
// Ids are contiguous, so offsets are plain differences; both are bounded
|
|
375
|
+
// by the history's length, far below 2^53.
|
|
376
|
+
const start = from.subtract(oldest.messageId).toNumber();
|
|
377
|
+
const end = to.subtract(oldest.messageId).toNumber();
|
|
378
|
+
return this.history
|
|
379
|
+
.slice(start, end + 1)
|
|
380
|
+
.map(({ data, topic }) => ({ data, topic }));
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Keeps a sent message for `replay()`, then trims the oldest ones until
|
|
384
|
+
* both of `cluster.retransmitBuffer`'s bounds hold. A bound of 0 keeps
|
|
385
|
+
* nothing: retransmission is disabled.
|
|
386
|
+
*/
|
|
387
|
+
remember(messageId, topic, data) {
|
|
388
|
+
// Always loaded; optional in the public type (see IKuzzleConfiguration).
|
|
389
|
+
const { bytes, messages } = this.node.config.retransmitBuffer;
|
|
390
|
+
if (messages <= 0 || bytes <= 0) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
this.history.push({ data, messageId, topic });
|
|
394
|
+
this.historyBytes += data.byteLength;
|
|
395
|
+
while (this.history.length > messages ||
|
|
396
|
+
(this.historyBytes > bytes && this.history.length > 0)) {
|
|
397
|
+
const dropped = this.history.shift();
|
|
398
|
+
this.historyBytes -= dropped?.data.byteLength ?? 0;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
309
401
|
/**
|
|
310
402
|
* Sends the provided message, and then sends all pending ones waiting in
|
|
311
403
|
* the buffer, in order
|
|
312
404
|
*
|
|
313
|
-
* @param
|
|
314
|
-
* @param
|
|
315
|
-
* @return {void}
|
|
405
|
+
* @param topic
|
|
406
|
+
* @param data
|
|
316
407
|
*/
|
|
317
408
|
async bufferSend(topic, data) {
|
|
318
409
|
this.buffer.push({ data, topic });
|
|
@@ -323,8 +414,19 @@ class ClusterPublisher {
|
|
|
323
414
|
do {
|
|
324
415
|
const _buffer = this.buffer;
|
|
325
416
|
this.buffer = [];
|
|
326
|
-
|
|
327
|
-
|
|
417
|
+
// `_buffer` is a local snapshot — `this.buffer` is reassigned to a new
|
|
418
|
+
// array above, never mutated in place — so iterating it directly is the
|
|
419
|
+
// same traversal as the index loop this replaces, without the
|
|
420
|
+
// `noUncheckedIndexedAccess` noise.
|
|
421
|
+
for (const payload of _buffer) {
|
|
422
|
+
// `dispose()` can null the socket while this loop awaits. Before, that
|
|
423
|
+
// surfaced as a TypeError on the next iteration; there is nothing left
|
|
424
|
+
// to flush once the socket is gone.
|
|
425
|
+
if (this.socket === null) {
|
|
426
|
+
this.buffer = [];
|
|
427
|
+
this.state = STATE.READY;
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
328
430
|
// This method will never return a rejected promise
|
|
329
431
|
// http://zeromq.github.io/zeromq.js/classes/publisher.html#send
|
|
330
432
|
await this.socket.send([payload.topic, payload.data]);
|
|
@@ -335,7 +437,7 @@ class ClusterPublisher {
|
|
|
335
437
|
async dispose() {
|
|
336
438
|
// waits for the buffer to be empty before closing
|
|
337
439
|
while (this.state !== STATE.READY) {
|
|
338
|
-
await
|
|
440
|
+
await bluebird_1.default.delay(100);
|
|
339
441
|
}
|
|
340
442
|
if (this.socket !== null) {
|
|
341
443
|
this.socket.close();
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { NormalizedFilter } from "koncorde";
|
|
2
|
-
import { JSONObject } from "
|
|
3
|
-
import { RoomList } from "../types";
|
|
4
|
-
import
|
|
2
|
+
import type { JSONObject } from "../types/JSONObject";
|
|
3
|
+
import type { RoomList } from "../types";
|
|
4
|
+
import type { FullStateAuthStrategy } from "./protobuf/commandMessages";
|
|
5
|
+
import type Long from "long";
|
|
5
6
|
import "../types/Global";
|
|
6
7
|
export type SerializedRoomSubscriptions = {
|
|
7
8
|
nodeId: string;
|
|
@@ -26,13 +27,13 @@ export default class State {
|
|
|
26
27
|
*
|
|
27
28
|
* Map<roomId, RoomState>
|
|
28
29
|
*/
|
|
29
|
-
private realtime;
|
|
30
|
+
private readonly realtime;
|
|
30
31
|
/**
|
|
31
32
|
* State of authentication strategies
|
|
32
33
|
*
|
|
33
34
|
* Map<strategyName, strategyDefinition>
|
|
34
35
|
*/
|
|
35
|
-
private strategies;
|
|
36
|
+
private readonly strategies;
|
|
36
37
|
/**
|
|
37
38
|
* Adds a new realtime room to the state
|
|
38
39
|
*
|
|
@@ -70,10 +71,10 @@ export default class State {
|
|
|
70
71
|
* Adds a new dynamic strategy to the full state
|
|
71
72
|
*
|
|
72
73
|
*/
|
|
73
|
-
addAuthStrategy(strategyObject:
|
|
74
|
+
addAuthStrategy(strategyObject: FullStateAuthStrategy): void;
|
|
74
75
|
removeAuthStrategy(strategyName: string): void;
|
|
75
76
|
serialize(): {
|
|
76
|
-
authStrategies:
|
|
77
|
+
authStrategies: FullStateAuthStrategy[];
|
|
77
78
|
rooms: SerializedRoomState[];
|
|
78
79
|
};
|
|
79
80
|
/**
|
|
@@ -86,9 +87,14 @@ export default class State {
|
|
|
86
87
|
*
|
|
87
88
|
* @param serialized POJO object of a full realtime state
|
|
88
89
|
*/
|
|
89
|
-
|
|
90
|
+
/**
|
|
91
|
+
* `Partial`: this reads a full state off the wire, and protobuf leaves an
|
|
92
|
+
* absent field undefined. Both branches below already guard for it; the
|
|
93
|
+
* parameter described what `serialize()` produces, not what arrives.
|
|
94
|
+
*/
|
|
95
|
+
loadFullState(serialized: Partial<SerializedState>): void;
|
|
90
96
|
}
|
|
91
97
|
export type SerializedState = {
|
|
92
|
-
authStrategies:
|
|
98
|
+
authStrategies: FullStateAuthStrategy[];
|
|
93
99
|
rooms: SerializedRoomState[];
|
|
94
100
|
};
|
|
@@ -250,15 +250,15 @@ class State {
|
|
|
250
250
|
return room.countSubscriptions();
|
|
251
251
|
}
|
|
252
252
|
listRealtimeRooms() {
|
|
253
|
+
var _a, _b;
|
|
253
254
|
const list = {};
|
|
254
255
|
for (const room of this.realtime.values()) {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
list[room.index][room.collection][room.id] = room.countSubscriptions();
|
|
256
|
+
// Held in locals rather than re-indexed: the compiler cannot see that the
|
|
257
|
+
// branch above just assigned the entry, so each re-read was a "possibly
|
|
258
|
+
// undefined". Same lookups, one per level instead of three.
|
|
259
|
+
const index = (list[_a = room.index] ?? (list[_a] = {}));
|
|
260
|
+
const collection = (index[_b = room.collection] ?? (index[_b] = {}));
|
|
261
|
+
collection[room.id] = room.countSubscriptions();
|
|
262
262
|
}
|
|
263
263
|
return list;
|
|
264
264
|
}
|
|
@@ -312,6 +312,11 @@ class State {
|
|
|
312
312
|
*
|
|
313
313
|
* @param serialized POJO object of a full realtime state
|
|
314
314
|
*/
|
|
315
|
+
/**
|
|
316
|
+
* `Partial`: this reads a full state off the wire, and protobuf leaves an
|
|
317
|
+
* absent field undefined. Both branches below already guard for it; the
|
|
318
|
+
* parameter described what `serialize()` produces, not what arrives.
|
|
319
|
+
*/
|
|
315
320
|
loadFullState(serialized) {
|
|
316
321
|
if (serialized.rooms) {
|
|
317
322
|
for (const state of serialized.rooms) {
|
|
@@ -329,5 +334,4 @@ class State {
|
|
|
329
334
|
}
|
|
330
335
|
}
|
|
331
336
|
exports.default = State;
|
|
332
|
-
module.exports = State;
|
|
333
337
|
//# sourceMappingURL=state.js.map
|