import { Address, Codec, Decoder, Encoder, IAccountMeta, IAccountSignerMeta, IInstruction, IInstructionWithAccounts, IInstructionWithData, ReadonlyAccount, TransactionSigner, WritableAccount, WritableSignerAccount } from '@solana/kit';
import { WAVEBREAK_PROGRAM_ADDRESS } from '../programs';
import { PermissionSigner, PermissionSignerArgs } from '../types';
export declare const PERMISSION_CONFIG_INITIALIZE_DISCRIMINATOR = 2;
export declare function getPermissionConfigInitializeDiscriminatorBytes(): import('@solana/kit').ReadonlyUint8Array;
export type PermissionConfigInitializeInstruction<TProgram extends string = typeof WAVEBREAK_PROGRAM_ADDRESS, TAccountAuthority extends string | IAccountMeta<string> = string, TAccountPermissionConfig extends string | IAccountMeta<string> = string, TAccountAuthorityConfig extends string | IAccountMeta<string> = string, TAccountSystemProgram extends string | IAccountMeta<string> = "11111111111111111111111111111111", TRemainingAccounts extends readonly IAccountMeta<string>[] = []> = IInstruction<TProgram> & IInstructionWithData<Uint8Array> & IInstructionWithAccounts<[
    TAccountAuthority extends string ? WritableSignerAccount<TAccountAuthority> & IAccountSignerMeta<TAccountAuthority> : TAccountAuthority,
    TAccountPermissionConfig extends string ? WritableAccount<TAccountPermissionConfig> : TAccountPermissionConfig,
    TAccountAuthorityConfig extends string ? ReadonlyAccount<TAccountAuthorityConfig> : TAccountAuthorityConfig,
    TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram,
    ...TRemainingAccounts
]>;
export type PermissionConfigInitializeInstructionData = {
    discriminator: number;
    permissionAuthority: PermissionSigner;
    consumerProgram: Address;
};
export type PermissionConfigInitializeInstructionDataArgs = {
    permissionAuthority: PermissionSignerArgs;
    consumerProgram: Address;
};
export declare function getPermissionConfigInitializeInstructionDataEncoder(): Encoder<PermissionConfigInitializeInstructionDataArgs>;
export declare function getPermissionConfigInitializeInstructionDataDecoder(): Decoder<PermissionConfigInitializeInstructionData>;
export declare function getPermissionConfigInitializeInstructionDataCodec(): Codec<PermissionConfigInitializeInstructionDataArgs, PermissionConfigInitializeInstructionData>;
export type PermissionConfigInitializeInput<TAccountAuthority extends string = string, TAccountPermissionConfig extends string = string, TAccountAuthorityConfig extends string = string, TAccountSystemProgram extends string = string> = {
    authority: TransactionSigner<TAccountAuthority>;
    permissionConfig: Address<TAccountPermissionConfig>;
    authorityConfig: Address<TAccountAuthorityConfig>;
    systemProgram?: Address<TAccountSystemProgram>;
    permissionAuthority: PermissionConfigInitializeInstructionDataArgs["permissionAuthority"];
    consumerProgram: PermissionConfigInitializeInstructionDataArgs["consumerProgram"];
};
export declare function getPermissionConfigInitializeInstruction<TAccountAuthority extends string, TAccountPermissionConfig extends string, TAccountAuthorityConfig extends string, TAccountSystemProgram extends string, TProgramAddress extends Address = typeof WAVEBREAK_PROGRAM_ADDRESS>(input: PermissionConfigInitializeInput<TAccountAuthority, TAccountPermissionConfig, TAccountAuthorityConfig, TAccountSystemProgram>, config?: {
    programAddress?: TProgramAddress;
}): PermissionConfigInitializeInstruction<TProgramAddress, TAccountAuthority, TAccountPermissionConfig, TAccountAuthorityConfig, TAccountSystemProgram>;
export type ParsedPermissionConfigInitializeInstruction<TProgram extends string = typeof WAVEBREAK_PROGRAM_ADDRESS, TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[]> = {
    programAddress: Address<TProgram>;
    accounts: {
        authority: TAccountMetas[0];
        permissionConfig: TAccountMetas[1];
        authorityConfig: TAccountMetas[2];
        systemProgram: TAccountMetas[3];
    };
    data: PermissionConfigInitializeInstructionData;
};
export declare function parsePermissionConfigInitializeInstruction<TProgram extends string, TAccountMetas extends readonly IAccountMeta[]>(instruction: IInstruction<TProgram> & IInstructionWithAccounts<TAccountMetas> & IInstructionWithData<Uint8Array>): ParsedPermissionConfigInitializeInstruction<TProgram, TAccountMetas>;
