import { ChainId, UserOperation } from "@biconomy/core-types";
import { Signer } from "ethers";
import { SessionKeyManagerModule } from "../SessionKeyManagerModule";
import { ISessionStorage } from "../interfaces/ISessionStorage";
import { WalletClientSigner } from "@alchemy/aa-core";
export type ModuleVersion = "V1_0_0";
export interface BaseValidationModuleConfig {
    entryPointAddress?: string;
}
export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModuleConfig {
    moduleAddress?: string;
    version?: ModuleVersion;
    signer: Signer | WalletClientSigner;
}
export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfig {
    moduleAddress?: string;
    version?: ModuleVersion;
    nodeClientUrl?: string;
    smartAccountAddress: string;
    storageType?: StorageType;
    sessionStorageClient?: ISessionStorage;
}
export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig {
    moduleAddress?: string;
    version?: ModuleVersion;
    sessionKeyManagerModule?: SessionKeyManagerModule;
    sessionManagerModuleAddress?: string;
    nodeClientUrl?: string;
    smartAccountAddress: string;
    storageType?: StorageType;
}
export declare enum StorageType {
    LOCAL_STORAGE = 0
}
export type SessionParams = {
    sessionID?: string;
    sessionSigner: Signer;
    sessionValidationModule?: string;
    additionalSessionData?: string;
};
export type ModuleInfo = {
    sessionID?: string;
    sessionSigner?: Signer;
    sessionValidationModule?: string;
    additionalSessionData?: string;
    batchSessionParams?: SessionParams[];
};
export interface SendUserOpParams extends ModuleInfo {
    simulationType?: SimulationType;
}
export type SimulationType = "validation" | "validation_and_execution";
export type CreateSessionDataResponse = {
    data: string;
    sessionIDInfo: Array<string>;
};
export interface CreateSessionDataParams {
    validUntil: number;
    validAfter: number;
    sessionValidationModule: string;
    sessionPublicKey: string;
    sessionKeyData: string;
    preferredSessionId?: string;
}
export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig {
    moduleAddress?: string;
    version?: ModuleVersion;
    signer: Signer | WalletClientSigner;
}
export type MultiChainUserOpDto = {
    validUntil?: number;
    validAfter?: number;
    chainId: ChainId;
    userOp: Partial<UserOperation>;
};
export interface BaseSessionKeyData {
    sessionKey: string;
}
export interface ERC20SessionKeyData extends BaseSessionKeyData {
    token: string;
    recipient: string;
    maxAmount: string;
}
export interface SessionValidationModuleConfig {
    moduleAddress: string;
}
