import Host from "./Host";
import Operation from "./Operation";
import SuperfluidAgreement from "./SuperfluidAgreement";
import { FlowRateAllowanceParams, FlowRateAllowanceWithPermissionsParams, ICreateFlowByOperatorParams, ICreateFlowParams, IDeleteFlowParams, IFullControlParams, IGetAccountFlowInfoParams, IGetFlowOperatorDataByIDParams, IGetFlowOperatorDataParams, IGetFlowParams, IUpdateFlowByOperatorParams, IUpdateFlowOperatorPermissionsParams, IUpdateFlowParams, IWeb3FlowInfo, IWeb3FlowInfoParams, IWeb3FlowOperatorData, IWeb3FlowOperatorDataParams } from "./interfaces";
import { CFAv1Forwarder, IConstantFlowAgreementV1 } from "./typechain-types";
/**
 * Constant Flow Agreement V1 Helper Class
 * @description A helper class to interact with the CFAV1 contract.
 */
export default class ConstantFlowAgreementV1 extends SuperfluidAgreement {
    readonly host: Host;
    readonly contract: IConstantFlowAgreementV1;
    readonly forwarder: CFAv1Forwarder;
    constructor(hostAddress: string, cfaV1Address: string, cfaV1ForwarderAddress: string);
    /** ### CFA Read Functions ### */
    /**
     * Get the details of a flow.
     * @param superToken the superToken of the agreement
     * @param sender the sender of the flow
     * @param receiver the receiver of the flow
     * @param providerOrSigner a provider or signer object
     * @returns {Promise<IWeb3FlowInfo>} Web3 Flow info object
     */
    getFlow: (params: IGetFlowParams) => Promise<IWeb3FlowInfo>;
    /**
     * Get the flow info of an account (net flow).
     * @param superToken the superToken of the agreement
     * @param account the account we're querying
     * @param providerOrSigner a provider or signer object
     * @returns {Promise<IWeb3FlowInfo>} Web3 Flow info object
     */
    getAccountFlowInfo: (params: IGetAccountFlowInfoParams) => Promise<IWeb3FlowInfo>;
    /**
     * Get the net flow of an account.
     * @param superToken the superToken of the agreement
     * @param account the account we're querying
     * @param providerOrSigner a provider or signer object
     * @returns {Promise<string>} Web3 Flow info object
     */
    getNetFlow: (params: IGetAccountFlowInfoParams) => Promise<string>;
    /**
     * Get flow operator data.
     * @param superToken the superToken of the agreement
     * @param sender the sender
     * @param flowOperator the flowOperator
     * @param providerOrSigner a provider or signer object
     * @returns {Promise<IWeb3FlowOperatorData>} Web3 Flow info object
     */
    getFlowOperatorData: (params: IGetFlowOperatorDataParams) => Promise<IWeb3FlowOperatorData>;
    /**
     * Get flow operator data using the flowOperatorId.
     * @param superToken the superToken of the agreement
     * @param flowOperatorId The keccak256 hash of encoded string "flowOperator", sender and flowOperator
     * @param providerOrSigner a provider or signer object
     * @returns {Promise<IWeb3FlowOperatorData>} Web3 Flow info object
     */
    getFlowOperatorDataByID: (params: IGetFlowOperatorDataByIDParams) => Promise<IWeb3FlowOperatorData>;
    /** ### CFA Write Functions ### */
    /**
     * Create a flow.
     * @param flowRate The specified flow rate.
     * @param sender The sender of the flow
     * @param receiver The receiver of the flow.
     * @param superToken The token to be flowed.
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     * @param shouldUseCallAgreement Whether to use callAgreement, or the CFAv1Forwarder
     * @returns {Operation} An instance of Operation which can be executed or batched.
     */
    createFlow: (params: ICreateFlowParams) => Operation;
    /**
     * Update a flow.
     * @param flowRate The specified flow rate.
     * @param sender The sender of the flow
     * @param receiver The receiver of the flow.
     * @param superToken The token to be flowed.
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     * @returns {Operation} An instance of Operation which can be executed or batched.
     */
    updateFlow: (params: IUpdateFlowParams) => Operation;
    /**
     * Delete a flow.
     * @param superToken The token to be flowed.
     * @param sender The sender of the flow.
     * @param receiver The receiver of the flow.
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     * @returns {Operation} An instance of Operation which can be executed or batched.
     */
    deleteFlow: (params: IDeleteFlowParams) => Operation;
    /** ### CFA ACL Write Functions (byOperator) ### */
    /**
     * Increase the flow rate allowance for an ACL operator.
     * @param superToken The token to be flowed.
     * @param flowOperator The operator of the flow.
     * @param flowRateAllowanceDelta The amount to increase the flow rate allowance by.
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     * @returns {Operation} An instance of Operation which can be executed or batched.
     */
    increaseFlowRateAllowance(params: FlowRateAllowanceParams): Operation;
    /**
     * Decrease the flow rate allowance for an ACL operator.
     * @param superToken The token to be flowed.
     * @param flowOperator The operator of the flow.
     * @param flowRateAllowanceDelta The amount to decrease the flow rate allowance by.
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     * @returns {Operation} An instance of Operation which can be executed or batched.
     */
    decreaseFlowRateAllowance(params: FlowRateAllowanceParams): Operation;
    /**
     * Increase the flow rate allowance and sets permissions for an ACL operator.
     * @param superToken The token to be flowed.
     * @param flowOperator The operator of the flow.
     * @param permissionsDelta The permissions to be add for the operator.
     * @param flowRateAllowanceDelta The amount to increase the flow rate allowance by.
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     * @returns {Operation} An instance of Operation which can be executed or batched.
     */
    increaseFlowRateAllowanceWithPermissions(params: FlowRateAllowanceWithPermissionsParams): Operation;
    /**
     * Decrease the flow rate allowance and sets permissions for an ACL operator.
     * @param superToken The token to be flowed.
     * @param flowOperator The operator of the flow.
     * @param permissionsDelta The permissions to be remove from the operator.
     * @param flowRateAllowanceDelta The amount to decrease the flow rate allowance by.
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     * @returns {Operation} An instance of Operation which can be executed or batched.
     */
    decreaseFlowRateAllowanceWithPermissions(params: FlowRateAllowanceWithPermissionsParams): Operation;
    /**
     * Update permissions for a flow operator as a sender.
     * @param superToken The token to be flowed.
     * @param flowOperator The permission grantee address
     * @param permission The permissions to set.
     * @param flowRateAllowance The flowRateAllowance granted to the flow operator.
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     * @returns {Operation} An instance of Operation which can be executed or batched.
     */
    updateFlowOperatorPermissions(params: IUpdateFlowOperatorPermissionsParams): Operation;
    /**
     * Give flow operator full control - max flow rate and create/update/delete permissions.
     * @param superToken The token to be flowed.
     * @param flowOperator The permission grantee address
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     */
    authorizeFlowOperatorWithFullControl(params: IFullControlParams): Operation;
    /**
     * Revoke flow operator control - set flow rate to 0 with no permissions.
     * @param superToken The token to be flowed.
     * @param flowOperator The permission grantee address
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     */
    revokeFlowOperatorWithFullControl(params: IFullControlParams): Operation;
    /**
     * Create a flow as an operator
     * @param flowRate The specified flow rate.
     * @param sender The sender of the flow.
     * @param receiver The receiver of the flow.
     * @param superToken The token to be flowed.
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     * @returns {Operation} An instance of Operation which can be executed or batched.
     */
    createFlowByOperator: (params: ICreateFlowByOperatorParams) => Operation;
    /**
     * Update a flow as an operator.
     * @param flowRate The specified flow rate.
     * @param sender The sender of the flow.
     * @param receiver The receiver of the flow.
     * @param superToken The token to be flowed.
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     * @returns {Operation} An instance of Operation which can be executed or batched.
     */
    updateFlowByOperator: (params: IUpdateFlowByOperatorParams) => Operation;
    /**
     * Delete a flow as an operator.
     * @param sender The sender of the flow.
     * @param receiver The receiver of the flow.
     * @param superToken The token to be flowed.
     * @param userData Extra user data provided.
     * @param overrides ethers overrides object for more control over the transaction sent.
     * @returns {Operation} An instance of Operation which can be executed or batched.
     */
    deleteFlowByOperator: (params: IDeleteFlowParams) => Operation;
    /** ### Internal Helper Functions ### */
    /**
     * Sanitizes flow info, converting BigNumber to string.
     * @param timestamp last updated timestamp of flow
     * @param flowRate the current flow rate
     * @param deposit the deposit amount
     * @param owedDeposit any owed deposit
     * @returns {IWeb3FlowInfo} sanitized web3 flow info
     */
    _sanitizeFlowInfo: (params: IWeb3FlowInfoParams) => IWeb3FlowInfo;
    /**
     * Sanitizes flow operator data, converting BigNumber to string.
     * @param flowOperatorId The keccak256 hash of encoded string "flowOperator", sender and flowOperator
     * @param permissions the permissions
     * @param flowRateAllowance the flow rate allowance granted to the flow operator
     * @returns {IWeb3FlowOperatorData} sanitized web3 flow info
     */
    _sanitizeFlowOperatorData: (params: IWeb3FlowOperatorDataParams) => IWeb3FlowOperatorData;
}
//# sourceMappingURL=ConstantFlowAgreementV1.d.ts.map