import type { ZephyrDependency } from 'zephyr-edge-contract';
import { type Snapshot, type ZeBuildAsset, type ZeBuildAssetsMap, type ZephyrBuildTarget, type ZephyrBuildStats, type ZephyrPluginOptions } from 'zephyr-edge-contract';
import type { ZePackageJson } from '../lib/build-context/ze-package-json.type.js';
import { type ZeGitInfo } from '../lib/build-context/ze-util-get-git-info.js';
import { type ResolvedZephyrConfig } from '../lib/build-context/zephyr-config.js';
import { type ZeLogger } from '../lib/logging/ze-log-event.js';
import type { ZeApplicationConfig } from '../lib/node-persist/upload-provider-options.js';
import { type ZeResolvedDependency } from './resolve_remote_dependency.js';
import type { ZephyrEngineBuilderTypes, ZephyrEngineOptions } from './zephyr-engine.types.js';
export { ApplicationContext, ApplicationContextRegistry } from './application-context.js';
export { BuildParticipantFailedError, BuildSession, BuildSessionAbortedError, BuildSessionAssetCollisionError, BuildSessionNotReadyError, BuildSessionRollbackError, BuildSessionStateError, } from './build-session.js';
export type { ApplicationContextOptions, ApplicationContextRegistryLocator, BeginBuildOptions, BuildContribution, BuildParticipant, BuildParticipantRole, BuildSessionIdentity, BuildSessionFailureCallback, BuildSessionLifecycleCallback, BuildSessionPublication, BuildSessionReadiness, BuildSessionStatus, PublishedBuildContribution, ZephyrEngineBuilderTypes, ZephyrEngineOptions, } from './zephyr-engine.types.js';
export interface ZeApplicationProperties {
    org: string;
    project: string;
    name: string;
    version: string;
}
/** @deprecated Prefer `ZephyrBuildTarget` from `zephyr-edge-contract`. */
export type Platform = ZephyrBuildTarget | undefined;
export type DeferredZephyrEngine = {
    zephyr_engine_defer: Promise<ZephyrEngine>;
    zephyr_defer_create(options: ZephyrEngineOptions): void;
};
export interface ZeDependencyPair {
    name: string;
    version: string;
}
export interface BuildProperties {
    output: string;
    baseHref?: string;
}
export declare function is_zephyr_dependency_pair(dep: ZeDependencyPair | undefined | null): dep is ZeDependencyPair;
export declare function is_zephyr_resolved_dependency(dep: ZeResolvedDependency | null): dep is ZeResolvedDependency;
export interface ZeUser {
    username: string;
    email: string;
    user_uuid: string;
    jwt: string;
}
export interface ZephyrBuildHooks {
    onDeployComplete?: (deploymentInfo: DeploymentInfo) => void | Promise<void>;
}
export interface DeploymentInfo {
    url: string;
    snapshotId: string | null;
    snapshot: Snapshot;
    federatedDependencies: ZeResolvedDependency[];
    buildStats: ZephyrBuildStats;
}
/**
 * IMPORTANT: do NOT add methods to this class, keep it lean! IMPORTANT: use `await
 * ZephyrEngine.create(context)` to create an instance ZephyrEngine instance represents
 * current state of a build if there are methods - they should call pure functions from
 * ./internal
 */
export declare class ZephyrEngine {
    npmProperties: ZePackageJson;
    gitProperties: ZeGitInfo;
    zephyrConfig: ResolvedZephyrConfig;
    application_uid: string;
    application_configuration: Promise<ZeApplicationConfig>;
    applicationProperties: ZeApplicationProperties;
    logger: Promise<ZeLogger>;
    env: {
        isCI: boolean;
        target: Platform;
        env?: string | undefined;
        ssr?: boolean;
    };
    buildProperties: BuildProperties;
    builder: ZephyrEngineBuilderTypes;
    federated_dependencies: ZeResolvedDependency[] | null;
    build_start_time: number | null;
    build_id: Promise<string> | null;
    snapshotId: Promise<string> | null;
    hash_list: Promise<{
        hash_set: Set<string>;
    }> | null;
    resolved_hash_list: {
        hash_set: Set<string>;
    } | null;
    version_url: string | null;
    target_urls: string[] | null;
    build_stats_time: number | null;
    snapshot_with_envs: Snapshot | null;
    ze_env_vars: Record<string, string> | null;
    ze_env_vars_hash: string | null;
    worker_version: string | null;
    /** Whether this engine still owns state that must be finished or rolled back. */
    get hasActiveBuild(): boolean;
    get zephyr_dependencies(): Record<string, ZephyrDependency>;
    /** This is intentionally PRIVATE use `await ZephyrEngine.create(context)` */
    private constructor();
    static defer_create(): DeferredZephyrEngine;
    /** Create one initialized engine and allocate its first logical build generation. */
    static create(options: ZephyrEngineOptions): Promise<ZephyrEngine>;
    /**
     * Accept two argument to resolve remote dependencies:
     *
     * @param dependencyPair, Includes name and versions (the url includes localhost),
     * @param platform, Atm this is React Native specific to resolve correct platform `ios`
     *   or `android`
     */
    resolve_remote_dependencies(deps: ZeDependencyPair[], defaultLibraryType?: string): Promise<ZeResolvedDependency[] | null>;
    start_new_build(): Promise<void>;
    build_finished(): Promise<void>;
    /** Discard every value owned by a failed/aborted logical build generation. */
    build_failed(): void;
    /**
     * Upload one sealed logical build. This method does not finish or reset the build;
     * callers must invoke build_finished explicitly (normally as
     * ApplicationContext.finish).
     */
    upload_assets(props: {
        assetsMap: ZeBuildAssetsMap;
        buildStats: ZephyrBuildStats;
        mfConfig?: Pick<ZephyrPluginOptions, 'mfConfig'>['mfConfig'];
        mfConfigs?: Pick<ZephyrPluginOptions, 'mfConfigs'>['mfConfigs'];
        snapshotType?: 'csr' | 'ssr';
        entrypoint?: string;
        hooks?: ZephyrBuildHooks;
    }): Promise<void>;
}
export interface UploadOptions {
    snapshot: Snapshot;
    assets: {
        assetsMap: ZeBuildAssetsMap;
        missingAssets: ZeBuildAsset[];
    };
    getDashData: (zephyr_engine?: ZephyrEngine) => ZephyrBuildStats;
}
export interface ZephyrDependencies {
    [key: string]: string;
}
export declare function readPackageJson(root: string, zephyrConfig?: ResolvedZephyrConfig): {
    zephyrDependencies?: ZephyrDependencies;
};
//# sourceMappingURL=index.d.ts.map