import { Universe } from "@arcana/ca-common";
import Decimal from "decimal.js";
import Long from "long";
import { ChainList } from "../../chains";
import { Intent, IRequestHandler, onAllowanceHookSource, RequestHandlerInput, SimulateReturnType, Step, StepInfo, TokenInfo, UserAssets } from "../../typings";
import { FeeStore } from "../../utils";
declare abstract class BaseRequest implements IRequestHandler {
    readonly input: RequestHandlerInput;
    abstract destinationUniverse: Universe;
    abstract isNative: boolean;
    protected chainList: ChainList;
    protected steps: Step[];
    constructor(input: RequestHandlerInput);
    abstract buildIntent(): Promise<{
        intent: Intent;
        token: TokenInfo;
    } | undefined>;
    abstract process(): Promise<unknown>;
    processIntent(intent: Intent): Promise<void>;
    processRFF(intent: Intent): Promise<{
        id: Long;
        requestHash: `0x${string}`;
        waitForDoubleCheckTx: () => Promise<void>;
    }>;
    abstract simulateTx(): Promise<null | SimulateReturnType>;
    abstract waitForFill(requestHash: `0x${string}`, intentID: Long, waitForDoubleCheckTx: () => Promise<void>): Promise<void>;
    protected createExpectedSteps(intent: Intent, unallowedSources?: onAllowanceHookSource[]): void;
    protected createIntent(input: {
        amount: Decimal;
        assets: UserAssets;
        feeStore: FeeStore;
        gas: Decimal;
        gasInToken: Decimal;
        token: TokenInfo;
    }): Intent;
    protected markStepDone: (step: StepInfo, data?: {
        [k: string]: unknown;
    }) => void;
}
export default BaseRequest;
