import type { DeployConfig } from '../types/config';
import type { DeployParams, DeployResult, DeployResultWithProposal, UploadFilesWithProposal, UploadFileWithProposal, UploadIndividually, UploadWithBatch } from '../types/deploy';
import type { ProposeChangesParams } from '../types/proposal';
/**
 * Executes all configured pre-deploy hooks defined in the Juno configuration.
 *
 * This function is typically run before uploading or deploying any assets to
 * perform validations, code generation, or other preparatory tasks.
 *
 * @param {Object} options - The function parameters.
 * @param {DeployConfig} options.config - The configuration object containing hook definitions.
 * @returns {Promise<void>} Resolves once all predeploy hooks have been executed.
 */
export declare const preDeploy: ({ config: { predeploy } }: {
    config: DeployConfig;
}) => Promise<void>;
/**
 * Executes all configured post-deploy hooks defined in the Juno configuration.
 *
 * This function is typically run after a successful deployment to perform cleanup,
 * logging, or integration tasks (e.g., sending Slack notifications).
 *
 * @param {Object} options - The function parameters.
 * @param {DeployConfig} options.config - The full configuration object containing hook definitions.
 * @returns {Promise<void>} Resolves once all postdeploy hooks have been executed.
 */
export declare const postDeploy: ({ config: { postdeploy } }: {
    config: DeployConfig;
}) => Promise<void>;
/**
 * Prepares and uploads dapp assets to a satellite.
 *
 * Steps:
 * 1) Resolve source files to upload.
 * 2) Ensure enough memory is available (via internal checks).
 * 3) Upload files using the provided upload function:
 *    - `UploadWithBatch`: one init+commit for all files (batched).
 *    - `UploadIndividually`: init+commit per file (unbatched).
 *
 * Notes:
 * - Chunk uploading logic is identical in both modes; only init/commit differ.
 * - If no files are detected (e.g. unchanged), the deploy is skipped.
 *
 * @param {Object} options
 * @param {DeployParams} options.params - Deployment parameters (paths, config, etc.).
 * @param {UploadIndividually | UploadWithBatch} options.upload - Upload strategy function.
 *   Pass a function that either uploads files **with batch** (single init/commit)
 *   or **individually** (per-file init/commit).
 * @returns {Promise<DeployResult>}
 *   - `{ result: 'skipped' }` when there are no files to upload.
 *   - `{ result: 'deployed', files }` when the upload completes.
 */
export declare const deploy: ({ params, upload }: {
    params: DeployParams;
    upload: UploadIndividually | UploadWithBatch;
}) => Promise<DeployResult>;
/**
 * Prepares and uploads assets through a proposal workflow.
 *
 * Steps:
 * 1) Prepare the list of files to upload.
 * 2) If no files are found, skip.
 * 3) Upload using the selected strategy (batched or per-file).
 * 4) Submit a proposal for the asset upgrade and, if `autoCommit` is true, apply it.
 *
 * Notes:
 * - Chunk uploading is the same across strategies; only init/commit batching differs.
 * - Set `clearAssets` to remove existing assets before upload (proposal field).
 *
 * @param {Object} options
 * @param {Object} options.deploy
 * @param {DeployParams} options.deploy.params - Deployment parameters.
 * @param {UploadIndividually<UploadFileWithProposal> | UploadWithBatch<UploadFilesWithProposal>} options.deploy.upload
 *   Upload strategy function used *within the proposal flow*.
 * @param {Object} options.proposal
 * @param {CdnParameters} options.proposal.cdn - Governance/CDN params.
 * @param {boolean} options.proposal.autoCommit - Apply the proposal automatically after submission.
 * @param {boolean} [options.proposal.clearAssets] - Clear existing assets before upload.
 *
 * @returns {Promise<DeployResultWithProposal>}
 *   - `{ result: 'skipped' }` when there are no files.
 *   - `{ result: 'submitted', files, proposalId }` when proposed but not applied.
 *   - `{ result: 'deployed', files, proposalId }` when proposed and auto-applied.
 */
export declare const deployWithProposal: ({ deploy: { params, upload }, proposal: { clearAssets, ...restProposal } }: {
    deploy: {
        params: DeployParams;
        upload: UploadIndividually<UploadFileWithProposal> | UploadWithBatch<UploadFilesWithProposal>;
    };
    proposal: Pick<ProposeChangesParams, "cdn" | "autoCommit"> & {
        clearAssets?: boolean;
    };
}) => Promise<DeployResultWithProposal>;
