/**
 * Copyright (C) 2024 Hedera Hashgraph, LLC
 *
 * Licensed under the Apache License, Version 2.0 (the ""License"");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an ""AS IS"" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
import * as x509 from '@peculiar/x509';
import { type AccountId } from '@hashgraph/sdk';
import type { IP, NodeAlias, NodeId, PodName } from '../types/aliases.js';
import { GrpcProxyTlsEnums } from './enumerations.js';
import { type ContextClusterStructure } from '../types/config_types.js';
import type { Namespace } from './config/remote/types.js';
export declare class Templates {
    static renderNetworkPodName(nodeAlias: NodeAlias): PodName;
    private static renderNetworkSvcName;
    private static nodeAliasFromNetworkSvcName;
    private static renderNetworkHeadlessSvcName;
    static renderGossipPemPrivateKeyFile(nodeAlias: NodeAlias): string;
    static renderGossipPemPublicKeyFile(nodeAlias: NodeAlias): string;
    static renderTLSPemPrivateKeyFile(nodeAlias: NodeAlias): string;
    static renderTLSPemPublicKeyFile(nodeAlias: NodeAlias): string;
    static renderNodeFriendlyName(prefix: string, nodeAlias: NodeAlias, suffix?: string): string;
    private static extractNodeAliasFromPodName;
    static prepareReleasePrefix(tag: string): string;
    /**
     * renders the name to be used to store the new account key as a Kubernetes secret
     * @param accountId
     * @returns the name of the Kubernetes secret to store the account key
     */
    static renderAccountKeySecretName(accountId: AccountId | string): string;
    /**
     * renders the label selector to be used to fetch the new account key from the Kubernetes secret
     * @param accountId
     * @returns the label selector of the Kubernetes secret to retrieve the account key   */
    static renderAccountKeySecretLabelSelector(accountId: AccountId | string): string;
    /**
     * renders the label object to be used to store the new account key in the Kubernetes secret
     * @param accountId
     * @returns the label object to be used to store the new account key in the Kubernetes secret
     */
    static renderAccountKeySecretLabelObject(accountId: AccountId | string): {
        'solo.hedera.com/account-id': string;
    };
    static renderDistinguishedName(nodeAlias: NodeAlias, state?: string, locality?: string, org?: string, orgUnit?: string, country?: string): x509.Name;
    static renderStagingDir(cacheDir: string, releaseTagOverride: string): string;
    static installationPath(dep: string, osPlatform?: NodeJS.Platform | string, installationDir?: string): string;
    static renderFullyQualifiedNetworkPodName(namespace: string, nodeAlias: NodeAlias): string;
    static renderFullyQualifiedNetworkSvcName(namespace: string, nodeAlias: NodeAlias): string;
    private static nodeAliasFromFullyQualifiedNetworkSvcName;
    static nodeIdFromNodeAlias(nodeAlias: NodeAlias): NodeId;
    static renderGossipKeySecretName(nodeAlias: NodeAlias): string;
    static renderGossipKeySecretLabelObject(nodeAlias: NodeAlias): {
        'solo.hedera.com/node-name': string;
    };
    /**
     * Creates the secret name based on the node alias type
     *
     * @param nodeAlias - node alias
     * @param type - whether is for gRPC or gRPC Web ( Haproxy or Envoy )
     *
     * @returns the appropriate secret name
     */
    static renderGrpcTlsCertificatesSecretName(nodeAlias: NodeAlias, type: GrpcProxyTlsEnums): string;
    /**
     * Creates the secret labels based on the node alias type
     *
     * @param nodeAlias - node alias
     * @param type - whether is for gRPC or gRPC Web ( Haproxy or Envoy )
     *
     * @returns the appropriate secret labels
     */
    static renderGrpcTlsCertificatesSecretLabelObject(nodeAlias: NodeAlias, type: GrpcProxyTlsEnums): {
        'haproxy-proxy-secret': `node${number}`;
        'envoy-proxy-secret'?: undefined;
    } | {
        'envoy-proxy-secret': `node${number}`;
        'haproxy-proxy-secret'?: undefined;
    };
    /**
     * Parsed and validates the unparsed value of flag clusterMappings
     *
     * @param unparsed - value of flag clusterMappings
     */
    static parseContextCluster(unparsed: string): ContextClusterStructure;
    static renderEnvoyProxyName(nodeAlias: NodeAlias): string;
    static renderHaProxyName(nodeAlias: NodeAlias): string;
    static renderFullyQualifiedHaProxyName(nodeAlias: NodeAlias, namespace: Namespace): string;
    static parseNodeAliasToIpMapping(unparsed: string): Record<NodeAlias, IP>;
}
