import { AccountMeta, AccountSignerMeta, Address, Codec, Decoder, Encoder, Instruction, InstructionWithAccounts, InstructionWithData, ReadonlyAccount, ReadonlySignerAccount, ReadonlyUint8Array, TransactionSigner, WritableAccount, WritableSignerAccount } from '@solana/kit';
import { WAVEBREAK_PROGRAM_ADDRESS } from '../programs';
import { PermissionMessage, PermissionMessageArgs, PermissionSignature, PermissionSignatureArgs } from '../types';
export declare const PERMISSION_CONSUME_CPI_DISCRIMINATOR = 1;
export declare function getPermissionConsumeCpiDiscriminatorBytes(): ReadonlyUint8Array;
export type PermissionConsumeCpiInstruction<TProgram extends string = typeof WAVEBREAK_PROGRAM_ADDRESS, TAccountConsumer extends string | AccountMeta<string> = string, TAccountConsumerProgramAuthority extends string | AccountMeta<string> = string, TAccountPermissionConfig extends string | AccountMeta<string> = string, TAccountConsumedPermission extends string | AccountMeta<string> = string, TAccountSystemProgram extends string | AccountMeta<string> = "11111111111111111111111111111111", TRemainingAccounts extends readonly AccountMeta<string>[] = []> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[
    TAccountConsumer extends string ? WritableSignerAccount<TAccountConsumer> & AccountSignerMeta<TAccountConsumer> : TAccountConsumer,
    TAccountConsumerProgramAuthority extends string ? ReadonlySignerAccount<TAccountConsumerProgramAuthority> & AccountSignerMeta<TAccountConsumerProgramAuthority> : TAccountConsumerProgramAuthority,
    TAccountPermissionConfig extends string ? ReadonlyAccount<TAccountPermissionConfig> : TAccountPermissionConfig,
    TAccountConsumedPermission extends string ? WritableAccount<TAccountConsumedPermission> : TAccountConsumedPermission,
    TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram,
    ...TRemainingAccounts
]>;
export type PermissionConsumeCpiInstructionData = {
    discriminator: number;
    permissionMessage: PermissionMessage;
    permissionSignature: PermissionSignature;
    consumerProgramAuthoritySeeds: Array<ReadonlyUint8Array>;
};
export type PermissionConsumeCpiInstructionDataArgs = {
    permissionMessage: PermissionMessageArgs;
    permissionSignature: PermissionSignatureArgs;
    consumerProgramAuthoritySeeds: Array<ReadonlyUint8Array>;
};
export declare function getPermissionConsumeCpiInstructionDataEncoder(): Encoder<PermissionConsumeCpiInstructionDataArgs>;
export declare function getPermissionConsumeCpiInstructionDataDecoder(): Decoder<PermissionConsumeCpiInstructionData>;
export declare function getPermissionConsumeCpiInstructionDataCodec(): Codec<PermissionConsumeCpiInstructionDataArgs, PermissionConsumeCpiInstructionData>;
export type PermissionConsumeCpiInput<TAccountConsumer extends string = string, TAccountConsumerProgramAuthority extends string = string, TAccountPermissionConfig extends string = string, TAccountConsumedPermission extends string = string, TAccountSystemProgram extends string = string> = {
    consumer: TransactionSigner<TAccountConsumer>;
    consumerProgramAuthority: TransactionSigner<TAccountConsumerProgramAuthority>;
    permissionConfig: Address<TAccountPermissionConfig>;
    consumedPermission: Address<TAccountConsumedPermission>;
    systemProgram?: Address<TAccountSystemProgram>;
    permissionMessage: PermissionConsumeCpiInstructionDataArgs["permissionMessage"];
    permissionSignature: PermissionConsumeCpiInstructionDataArgs["permissionSignature"];
    consumerProgramAuthoritySeeds: PermissionConsumeCpiInstructionDataArgs["consumerProgramAuthoritySeeds"];
};
export declare function getPermissionConsumeCpiInstruction<TAccountConsumer extends string, TAccountConsumerProgramAuthority extends string, TAccountPermissionConfig extends string, TAccountConsumedPermission extends string, TAccountSystemProgram extends string, TProgramAddress extends Address = typeof WAVEBREAK_PROGRAM_ADDRESS>(input: PermissionConsumeCpiInput<TAccountConsumer, TAccountConsumerProgramAuthority, TAccountPermissionConfig, TAccountConsumedPermission, TAccountSystemProgram>, config?: {
    programAddress?: TProgramAddress;
}): PermissionConsumeCpiInstruction<TProgramAddress, TAccountConsumer, TAccountConsumerProgramAuthority, TAccountPermissionConfig, TAccountConsumedPermission, TAccountSystemProgram>;
export type ParsedPermissionConsumeCpiInstruction<TProgram extends string = typeof WAVEBREAK_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[]> = {
    programAddress: Address<TProgram>;
    accounts: {
        consumer: TAccountMetas[0];
        consumerProgramAuthority: TAccountMetas[1];
        permissionConfig: TAccountMetas[2];
        consumedPermission: TAccountMetas[3];
        systemProgram: TAccountMetas[4];
    };
    data: PermissionConsumeCpiInstructionData;
};
export declare function parsePermissionConsumeCpiInstruction<TProgram extends string, TAccountMetas extends readonly AccountMeta[]>(instruction: Instruction<TProgram> & InstructionWithAccounts<TAccountMetas> & InstructionWithData<ReadonlyUint8Array>): ParsedPermissionConsumeCpiInstruction<TProgram, TAccountMetas>;
