/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { FileDesignator } from "#bdx/FileDesignator.js";
import { BdxMessageType } from "@matter/types";
import { Flow } from "./flow/Flow.js";
import { PersistedFileDesignator } from "./PersistedFileDesignator.js";
import { BdxInit } from "./schema/BdxInitMessagesSchema.js";
export declare class BdxSessionConfiguration {
    #private;
    constructor(options: BdxSessionConfiguration.Options);
    get isSender(): boolean;
    get initMessage(): BdxInit | undefined;
    get isInitiator(): boolean;
    get fileDesignator(): PersistedFileDesignator;
    get transferFileDesignator(): FileDesignator;
    get transferConfig(): BdxSessionConfiguration.Config;
}
export declare namespace BdxSessionConfiguration {
    interface Config {
        /**
         * Array of preferred transfer driver modes, in order of preference. Use this to configure the proposed behavior.
         * Default is [SenderDrive, ReceiverDrive]
         */
        preferredDriverModes?: Flow.DriverMode[];
        /** Asynchronous transfer is not supported right now because provisional. */
        asynchronousTransferAllowed?: false;
        /** Maximum block size to use for the session. This value is ignored if the transport only supports smaller blocks. */
        maxBlockSize?: number;
        /** Maximum transfer size to use for the session. Defaults to 100MB */
        maxTransferSize?: number;
        /** The start offset of the data to send. When using this, you need to know what you are doing. */
        senderStartOffset?: number;
        /** The maximum length of the data to send. When using this, you need to know what you are doing. */
        senderMaxLength?: number;
    }
    const DefaultConfig: BdxSessionConfiguration.Config;
    interface InitiatorOptions extends BdxSessionConfiguration.Config {
        /** FileDesignator to use for the session. The value is usually pre-determined with the peer. */
        fileDesignator: PersistedFileDesignator;
        /**
         * Optional file designator to use for the transfer. This can be used to separate the file designator used
         * in BDX messages from the persisted file. */
        transferFileDesignator?: FileDesignator;
    }
    interface SenderInitiatorOptions extends InitiatorOptions {
        /** The start offset of the data to send. When using this, you need to know what you are doing. */
        senderStartOffset?: number;
        /** The maximum length of the data to send. When using this, you need to know what you are doing. */
        senderMaxLength?: number;
    }
    interface ReceiverOptions extends BdxSessionConfiguration.Config {
        initMessageType: BdxMessageType;
        initMessage: BdxInit;
        fileDesignator: PersistedFileDesignator;
    }
    interface Options extends BdxSessionConfiguration.Config {
        /** True if the session is initiated as a sender, false for receiver */
        isSender: boolean;
        /**
         * File designator to use for the session and read from or write to. It points to the persisted blob storage.
         */
        fileDesignator: PersistedFileDesignator;
        /**
         * Optional Transfer FileDesignator to use for the transfer, if different from the fileDesignator. This is
         * mainly useful when receiving data where the fileDesignator used in the BDX messages is defined by the file
         * sender and when the persisted file is stored under a different designator.
         */
        transferFileDesignator?: FileDesignator;
        /** The initial message received to start the session */
        initMessage?: BdxInit;
    }
}
//# sourceMappingURL=BdxSessionConfiguration.d.ts.map