import { AptosConfig } from '../api/aptosConfig.mjs';
import { AccountAuthenticator } from '../transactions/authenticator/account.mjs';
import { UserTransactionResponse, PendingTransactionResponse, HexInput, TransactionResponse } from '../types/index.mjs';
import { AccountAddressInput } from '../core/accountAddress.mjs';
import { PrivateKey } from '../core/crypto/privateKey.mjs';
import { A as Account } from '../Ed25519Account-B1VMJOY2.mjs';
import { InputGenerateSingleSignerRawTransactionData, InputGenerateMultiAgentRawTransactionData, InputGenerateTransactionData, AnyTransactionPayloadInstance, AnyRawTransaction, InputSimulateTransactionData, InputSubmitTransactionData, InputGenerateTransactionOptions } from '../transactions/types.mjs';
import { SimpleTransaction } from '../transactions/instances/simpleTransaction.mjs';
import { MultiAgentTransaction } from '../transactions/instances/multiAgentTransaction.mjs';
import '../utils/apiEndpoints.mjs';
import '../utils/const.mjs';
import '../bcs/deserializer.mjs';
import '../bcs/serializer.mjs';
import '../core/hex.mjs';
import '../core/common.mjs';
import '../core/crypto/ed25519.mjs';
import '../publicKey-B3XRNhHO.mjs';
import '../core/crypto/signature.mjs';
import '../core/crypto/multiEd25519.mjs';
import '../core/crypto/multiKey.mjs';
import '../core/crypto/singleKey.mjs';
import '../types/indexer.mjs';
import '../types/generated/operations.mjs';
import '../types/generated/types.mjs';
import '../transactions/instances/transactionArgument.mjs';
import '../bcs/serializable/moveStructs.mjs';
import '../bcs/serializable/movePrimitives.mjs';
import '../bcs/serializable/fixedBytes.mjs';
import '../transactions/instances/rawTransaction.mjs';
import '../transactions/instances/chainId.mjs';
import '../transactions/instances/transactionPayload.mjs';
import '../transactions/instances/identifier.mjs';
import '../transactions/instances/moduleId.mjs';
import '../transactions/typeTag/index.mjs';

/**
 * This file contains the underlying implementations for exposed submission API surface in
 * the {@link api/transaction}. By moving the methods out into a separate file,
 * other namespaces and processes can access these methods without depending on the entire
 * transaction namespace and without having a dependency cycle error.
 */

/**
 * We are defining function signatures, each with its specific input and output.
 * These are the possible function signature for `generateTransaction` function.
 * When we call `generateTransaction` function with the relevant type properties,
 * Typescript can infer the return type based on the appropriate function overload.
 */
declare function generateTransaction(args: {
    aptosConfig: AptosConfig;
} & InputGenerateSingleSignerRawTransactionData): Promise<SimpleTransaction>;
declare function generateTransaction(args: {
    aptosConfig: AptosConfig;
} & InputGenerateMultiAgentRawTransactionData): Promise<MultiAgentTransaction>;
declare function buildTransactionPayload(args: {
    aptosConfig: AptosConfig;
} & InputGenerateTransactionData): Promise<AnyTransactionPayloadInstance>;
declare function buildRawTransaction(args: {
    aptosConfig: AptosConfig;
} & InputGenerateTransactionData, payload: AnyTransactionPayloadInstance): Promise<AnyRawTransaction>;
/**
 * Builds a signing message that can be signed by external signers
 *
 * Note: Please prefer using `signTransaction` unless signing outside the SDK
 *
 * @param args.transaction AnyRawTransaction, as generated by `generateTransaction()`
 *
 * @return The message to be signed
 */
declare function getSigningMessage(args: {
    transaction: AnyRawTransaction;
}): Uint8Array;
/**
 * Sign a transaction that can later be submitted to chain
 *
 * @param args.signer The signer account to sign the transaction
 * @param args.transaction An instance of a RawTransaction, plus optional secondary/fee payer addresses
 * ```
 * {
 *  rawTransaction: RawTransaction,
 *  secondarySignerAddresses? : Array<AccountAddress>,
 *  feePayerAddress?: AccountAddress
 * }
 * ```
 *
 * @return The signer AccountAuthenticator
 */
declare function signTransaction(args: {
    signer: Account;
    transaction: AnyRawTransaction;
}): AccountAuthenticator;
/**
 * Simulates a transaction before singing it.
 *
 * @param args.signerPublicKey The signer public key
 * @param args.transaction The raw transaction to simulate
 * @param args.secondarySignersPublicKeys optional. For when the transaction is a multi signers transaction
 * @param args.feePayerPublicKey optional. For when the transaction is a fee payer (aka sponsored) transaction
 * @param args.options optional. A config to simulate the transaction with
 */
declare function simulateTransaction(args: {
    aptosConfig: AptosConfig;
} & InputSimulateTransactionData): Promise<Array<UserTransactionResponse>>;
/**
 * Submit transaction to chain
 *
 * @param args.transaction A aptos transaction type
 * @param args.senderAuthenticator The account authenticator of the transaction sender
 * @param args.secondarySignerAuthenticators optional. For when the transaction is a multi signers transaction
 *
 * @return PendingTransactionResponse
 */
declare function submitTransaction(args: {
    aptosConfig: AptosConfig;
} & InputSubmitTransactionData): Promise<PendingTransactionResponse>;
declare function signAndSubmitTransaction(args: {
    aptosConfig: AptosConfig;
    signer: Account;
    transaction: AnyRawTransaction;
}): Promise<PendingTransactionResponse>;
declare function publicPackageTransaction(args: {
    aptosConfig: AptosConfig;
    account: AccountAddressInput;
    metadataBytes: HexInput;
    moduleBytecode: Array<HexInput>;
    options?: InputGenerateTransactionOptions;
}): Promise<SimpleTransaction>;
/**
 * TODO: Need to refactor and move this function out of transactionSubmission
 */
declare function rotateAuthKey(args: {
    aptosConfig: AptosConfig;
    fromAccount: Account;
    toNewPrivateKey: PrivateKey;
}): Promise<TransactionResponse>;

export { buildRawTransaction, buildTransactionPayload, generateTransaction, getSigningMessage, publicPackageTransaction, rotateAuthKey, signAndSubmitTransaction, signTransaction, simulateTransaction, submitTransaction };
