@hashgraph/solo
Version:
An opinionated CLI tool to deploy and manage private Hedera Networks.
95 lines • 5.7 kB
JavaScript
// SPDX-License-Identifier: Apache-2.0
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
import { Templates } from './templates.js';
import * as constants from './constants.js';
import * as versions from '../../version.js';
import { inject } from 'tsyringe-neo';
import { InjectTokens } from './dependency-injection/inject-tokens.js';
import { patchInject } from './dependency-injection/container-helper.js';
import { SoloConfigSchema } from '../data/schema/model/solo/solo-config-schema.js';
import { SoloConfig } from '../business/runtime-state/config/solo/solo-config.js';
/**
* Wrapper used to generate `block-nodes.json` file
* for the consensus node used to configure block node connections.
*/
let BlockNodesJsonWrapper = class BlockNodesJsonWrapper {
blockNodeMap;
externalBlockNodeMap;
remoteConfig;
configProvider;
blockNodes;
externalBlockNodes;
tssEnabled;
constructor(blockNodeMap, externalBlockNodeMap, remoteConfig, configProvider) {
this.blockNodeMap = blockNodeMap;
this.externalBlockNodeMap = externalBlockNodeMap;
this.remoteConfig = patchInject(remoteConfig, InjectTokens.RemoteConfigRuntimeState, this.constructor.name);
this.configProvider = patchInject(configProvider, InjectTokens.ConfigProvider, this.constructor.name);
this.blockNodes = this.remoteConfig.configuration.state.blockNodes;
this.externalBlockNodes = this.remoteConfig.configuration.state.externalBlockNodes;
this.tssEnabled = this.remoteConfig.configuration.state.tssEnabled ?? false;
}
toJSON() {
return JSON.stringify(this.buildBlockNodesJsonStructure());
}
buildBlockNodesJsonStructure() {
// Figure out field name for port
const useLegacyPortName = this.remoteConfig.configuration.versions.consensusNode.lessThan(versions.MINIMUM_HIERO_CONSENSUS_NODE_VERSION_FOR_LEGACY_PORT_NAME_FOR_BLOCK_NODES_JSON_FILE);
const blockNodeConnectionData = [];
for (const [id, priority] of this.blockNodeMap) {
const blockNodeComponent = this.blockNodes.find((component) => component.metadata.id === id);
const cluster = this.remoteConfig.configuration.clusters.find((cluster) => cluster.name === blockNodeComponent.metadata.cluster);
const address = Templates.renderSvcFullyQualifiedDomainName(Templates.renderBlockNodeName(blockNodeComponent.metadata.id), blockNodeComponent.metadata.namespace, cluster.dnsBaseDomain);
// Figure out the block node port
const useLegacyPort = this.remoteConfig.configuration.versions.blockNodeChart.lessThan(versions.MINIMUM_HIERO_BLOCK_NODE_VERSION_FOR_NEW_LIVENESS_CHECK_PORT);
const port = useLegacyPort ? constants.BLOCK_NODE_PORT_LEGACY : constants.BLOCK_NODE_PORT;
const soloConfig = new SoloConfig(this.configProvider.config().asObject(SoloConfigSchema));
const tssMessageSizeFields = this.tssEnabled
? {
messageSizeSoftLimitBytes: soloConfig.tss.messageSizeSoftLimitBytes,
messageSizeHardLimitBytes: soloConfig.tss.messageSizeHardLimitBytes,
}
: {};
blockNodeConnectionData.push(useLegacyPortName
? { address, port, priority, ...tssMessageSizeFields }
: { address, streamingPort: port, servicePort: port, priority, ...tssMessageSizeFields });
}
for (const [id, priority] of this.externalBlockNodeMap) {
const blockNodeComponent = this.externalBlockNodes.find((component) => component.id === id);
const address = blockNodeComponent.address;
const port = blockNodeComponent.port;
const soloConfig = new SoloConfig(this.configProvider.config().asObject(SoloConfigSchema));
const tssMessageSizeFields = this.tssEnabled
? {
messageSizeSoftLimitBytes: soloConfig.tss.messageSizeSoftLimitBytes,
messageSizeHardLimitBytes: soloConfig.tss.messageSizeHardLimitBytes,
}
: {};
blockNodeConnectionData.push(useLegacyPortName
? { address, port, priority, ...tssMessageSizeFields }
: { address, streamingPort: port, servicePort: port, priority, ...tssMessageSizeFields });
}
return {
nodes: blockNodeConnectionData,
blockItemBatchSize: constants.BLOCK_ITEM_BATCH_SIZE,
};
}
};
BlockNodesJsonWrapper = __decorate([
__param(2, inject(InjectTokens.RemoteConfigRuntimeState)),
__param(3, inject(InjectTokens.ConfigProvider)),
__metadata("design:paramtypes", [Array, Array, Object, Object])
], BlockNodesJsonWrapper);
export { BlockNodesJsonWrapper };
//# sourceMappingURL=block-nodes-json-wrapper.js.map