/// <reference types="node" />
import type { AccessTokenInfo, IUser } from "../entities";
import type { AppConfig } from "../interfaces/AppConfig";
import type { KubeEnvironmentVariable } from "../interfaces/EnvironmentVariable";
import type { InputOptions } from "../interfaces/InputOptions";
import type { GitProviderType } from "../interfaces/SystemTypes";
import type { PullOrCloneGitRepoSSHOptions } from "../modules/git/git-interfaces";
export declare function nowStr(): string;
/**
 * Delay/wait a specific miliseconds
 * @param i - waiting time in miliseconds
 * @param exec - callback function
 */
declare const wait: (i?: number, exec?: any) => Promise<unknown>;
/**
 * Wait until a condition is matched
 * @param condition - Condition
 * @param interval - Re-check interval in seconds @default 10
 * @param maxWaitingTime - Max waiting time in seconds @default 30 minutes (30 * 60 = 1.800 seconds)
 */
export declare function waitUntil(condition: Function, interval?: number, maxWaitTime?: number): Promise<boolean>;
declare function logBitbucket(title: any, message: any, delay: any): Promise<void>;
export declare const readJson: (filePath: any) => any;
export type SaveJsonOptions = {
    overwrite?: boolean;
    beautify?: boolean;
};
export declare const saveJson: (data: string | any, filePath: string, options?: SaveJsonOptions) => any;
export declare const showDocs: (filePath: string) => Promise<string>;
/**
 * Create temporary file with provided content
 * @param fileName - File name (include the extension)
 * @param content - Content of the file
 * @returns Path to the file
 */
export declare const createTmpFile: (fileName: string, content: string, options?: {
    recursive?: boolean;
    encoding?: BufferEncoding;
}) => string;
/**
 * Convert string-array-like to array
 * @example "1" -> ["1"] | "123,555,abc,def" -> ["123","555","abc","def"]
 */
export declare const stringToArray: (str: string, options?: {
    /**
     * Convert items to number if it's valid
     * @default false
     * @example "1,a,2" -> [1, "a", 2]
     */
    typeTransform?: boolean;
    /**
     * @default ","
     */
    divider?: string;
}) => (string | number)[];
/**
 * Get full name of the environment, such as: `development`, `production` (instead of `dev`, `prod`)
 * @param {String} env
 * @returns {String}
 */
export declare const getLongEnv: (env: any) => any;
/**
 * @param  {String} filePath
 * @param  {[{keyword:(RegExp|String), replacement:String}]} replacement=[]
 * @return {String} - New content
 */
export declare const replaceInFile: (filePath: any, replacement?: {
    keyword: RegExp | string;
    replacement: string;
}[]) => Promise<string>;
declare function toBase64(str: any): string;
export declare function logVersion(): void;
type ErrorCallback = (e: string) => void;
export type CmdOptions = {
    isDebugging?: boolean;
    onProgress?: (msg: string) => void;
};
export declare const progressCmd: (command: string, options?: CmdOptions) => Promise<string>;
export declare function execCmd(cmd: string, errorMsgOrCallback?: string | ErrorCallback): Promise<string>;
/**
 * Get current CLI version
 */
export declare function currentVersion(): string;
/**
 * Get latest version of the CLI from NPM
 */
export declare function getLatestCliVersion(): Promise<string>;
/**
 * Check if CLI version is latest or not, if not -> return FALSE
 */
export declare function shouldNotifyCliUpdate(): Promise<boolean>;
declare function logBitbucketError(error: any, delay?: number, location?: string, shouldExit?: boolean): Promise<void>;
export declare const parseRepoSlugFromUrl: (url: any) => any;
export declare const deleteFolderRecursive: (dir: string) => Promise<void>;
/**
 * Flatten the object into 1-level-object (with key paths)
 * @example {a: {b: [{c: 1}, {c: 2}]}, e: 3} -> {"a.b[0].c": 1, "a.b[1].c": 2, "e": 3}
 */
export declare function flattenObjectToPost(object?: any, initialPathPrefix?: string): any;
/**
 * Flatten the object into 1-level-object (with key paths)
 * @example {a: {b: [{c: 1}, {c: 2}]}, e: 3} -> {"a.b.0.c": 1, "a.b.1.c": 2, "e": 3}
 */
export declare function flattenObjectPaths(object?: any, initialPathPrefix?: string): any;
type SaveOpts = {
    /**
     * Absolute path to project directory
     */
    directory?: string;
    /**
     * Set to `TRUE` will create new `dx.json` file if not existed.
     */
    create?: boolean;
    ignoreIfNotExisted?: boolean;
};
/**
 * Get object of project configuration from "dx.json"
 * @param  {String} [directory] - Absolute path to project directory
 */
export declare const getAppConfig: (directory?: string) => AppConfig;
/**
 * Save object of project configuration to "dx.json"
 * @param  {Object} appConfig - Object data of the config
 * @param  {SaveOpts} [options] - Save options
 * @param  {String} [options.directory] - Absolute path to project directory @default process.cwd()
 * @param  {Boolean} [options.create] - TRUE will create new file if not existed. @default false
 */
export declare const saveAppConfig: (appConfig: AppConfig, options?: SaveOpts) => AppConfig;
/**
 * Update values of app config ("dx.json")
 * @param updatedData - updated data
 */
export declare const updateAppConfig: (updatedData: AppConfig, options?: SaveOpts) => AppConfig;
/**
 * Get object of project configuration from "../../package.json"
 * @param  {Object} [options] - Options
 * @param  {String} [options.directory] - Absolute path to project directory
 * @param  {Boolean} [options.ignoreIfNotExisted] - TRUE ignore the error if not existed.
 * @return {Object}
 */
export declare const getPackageConfig: (options: SaveOpts) => any;
/**
 * Save object of project configuration to "package.json"
 * @param  {Object} _config - Object data of the config
 * @param  {SaveOpts} [options] - Options
 * @param  {String} [options.directory] - Absolute path to project directory
 * @param  {Boolean} [options.create] - TRUE will create new file if not existed.
 * @param  {Boolean} [options.ignoreIfNotExisted] - TRUE ignore the error if not existed.
 */
export declare const savePackageConfig: (_config: any, options: SaveOpts) => void;
/**
 * Process `npm install` or `yarn install` or `pnpm install` on current directory
 */
export declare const installPackages: () => Promise<any>;
export declare const cloneGitRepo: (repoSSH: string, dir: string, options?: PullOrCloneGitRepoSSHOptions) => Promise<void>;
export declare const pullOrCloneGitRepo: (repoSSH: string, dir: string, branch: string, options?: PullOrCloneGitRepoSSHOptions) => Promise<boolean>;
/**
 * Get current remote SSH & URL
 */
export declare const getCurrentGitRepoData: (dir?: string, options?: {
    isDebugging: boolean;
}) => Promise<{
    repoSSH: any;
    repoURL: any;
    provider: "bitbucket" | "github";
    slug: string;
    fullSlug: string;
    namespace: string;
    gitDomain: string;
    branch: string;
}>;
export declare const getGitProviderFromRepoSSH: (repoSSH: string) => GitProviderType;
export declare const isUsingExpressjsFramework: (options: any) => boolean;
export declare const isUsingNodejsFramework: (options: any) => boolean;
export declare const isUsingDiginextFramework: (options: any) => Promise<boolean>;
export declare const isUsingDiginestAPIFramework: (options: any) => Promise<boolean>;
export declare const isUsingStaticHtmlFramework: (options: any) => Promise<boolean>;
/**
 * Get current using framework of the project.
 * @return {("unknown"|"diginest"|"diginext"|"nodejs"|"expressjs"|"static")}
 */
export declare const getCurrentFramework: (options: any) => string;
export declare const getImageFromYaml: (docs: any) => string;
export declare const getReplicasFromYaml: (docs: any) => number;
/**
 * Completely remove the first / of the string
 * @param {String} input
 * @returns {String}
 */
export declare const trimFirstSlash: (input: any) => any;
/**
 * Convert {Object} to environment variables of Kuberketes container
 * @param {Object} object - Input raw object, **not containing any methods**
 */
export declare const objectToKubeEnvVars: (object: any) => KubeEnvironmentVariable[];
/**
 * Convert {Object} to .env content
 * @param {Object} object - Input raw object, **not containing any methods**
 * @returns {String}
 */
export declare const objectToDotenv: (object: any) => string;
/**
 * Load ENV file (.env.*) and parse to array of K8S container environment variables
 */
export declare const loadEnvFileAsContainerEnvVars: (filePath: string) => KubeEnvironmentVariable[];
/**
 * Grab value of Kube ENV variables by name
 */
export declare const getValueOfKubeEnvVarsByName: (name: string, envVars: KubeEnvironmentVariable[]) => string;
/**
 * Convert K8S container's ENV to .env content
 * @param {[{name,value}]} inputEnvs - Input raw object, **not containing any methods**
 * @returns {String}
 */
export declare const kubeEnvToDotenv: (inputEnvs: KubeEnvironmentVariable[]) => string;
export declare const objectToDeploymentYaml: (deploymentCfg: any) => string;
export declare const strToArray: (str: any, splitter?: string) => any[];
export declare const getDiginextEnvVars: (env: any, projectSlug: any, domains: any) => {
    NEXT_PUBLIC_ENV: string;
    NEXT_PUBLIC_CDN_BASE_PATH: string;
    NEXT_PUBLIC_BASE_PATH: any;
    NEXT_PUBLIC_BASE_URL: string;
    IRON_SESSION_SECRET: string;
};
export declare const objToEnv: (obj?: {}) => string;
export declare const sequentialExec: (array: any, func: any) => Promise<any>;
interface ResolveApplicationFilePathOptions {
    targetDirectory?: string;
    env?: string;
    ignoreIfNotExisted?: boolean;
    msg?: string;
}
/**
 * Resolve a location path of the file within the application.
 */
export declare const resolveFilePath: (fileNamePrefix: string, options: ResolveApplicationFilePathOptions) => string;
/**
 * Resolve a location path of the "Dockerfile".
 */
export declare const resolveDockerfilePath: (options: ResolveApplicationFilePathOptions) => string;
/**
 * Resolve a location path of the DOTENV (`.env.*`) file.
 */
export declare const resolveEnvFilePath: (options: ResolveApplicationFilePathOptions) => string;
/**
 * Execute an command within a Docker container
 * @deprecated
 */
export declare const cliContainerExec: (command: any, options: any) => Promise<string | false>;
declare function logHelp(options?: InputOptions): Promise<void>;
export declare const getIPFromDomain: (domain: any) => Promise<unknown>;
export declare const getClusterIP: (options: any) => Promise<any>;
export declare const getIngress: (ingName: string, namespace?: string, options?: {}) => Promise<any>;
export declare const getIngressEndpoint: (ingName: string, namespace?: string, options?: {}) => Promise<any>;
export declare const getIngressIP: (ingName: string, namespace?: string, index?: number, options?: {}) => Promise<any>;
export declare const getCurrentDeployment: (deployName: string, namespace?: string, options?: {}) => Promise<any>;
export declare const getCurrentImageName: (deployName: string, namespace?: string, options?: {}) => Promise<any>;
export declare const getCurrentContainerEnvs: (deployName: string, namespace?: string, options?: {}) => Promise<any>;
export { logBitbucket, logBitbucketError, logHelp, toBase64, wait };
export declare const extractWorkspaceSlugFromUrl: (url: string) => string;
export declare const extractWorkspaceIdFromUser: (user: IUser) => string;
export declare function getUnexpiredAccessToken(access_token: string): AccessTokenInfo;
export declare const generateWorkspaceApiAccessToken: () => {
    name: `${string}-${string}-${string}-${string}-${string}`;
    value: string;
};
//# sourceMappingURL=utils.d.ts.map