type Key = string;
type Identities = "a" | "s" | "c" | "t" | "d" | "v" | "j" | "n" | "l" | "u" | "r";
type PrefixWith<T, P extends string> = {
    [K in keyof T & string as `${P}:${K}`]: T[K];
};
type PrefixIdUnion<T> = {
    [P in Identities]: PrefixWith<T, P>;
}[Identities];
type Wrap<T> = T | PrefixIdUnion<T>;
type Miniscript = Wrap<{
    pk: Key;
}> | Wrap<{
    pkh: Key;
}> | Wrap<{
    wpkh: Key;
}> | Wrap<{
    multi: [number, ...Key[]];
}> | Wrap<{
    sortedmulti: [number, ...Key[]];
}> | Wrap<{
    multi_a: [number, ...Key[]];
}> | Wrap<{
    sortedmulti_a: [number, ...Key[]];
}> | Wrap<{
    tr: Key | [Key, Miniscript];
}> | Wrap<{
    sh: Miniscript;
}> | Wrap<{
    wsh: Miniscript;
}> | Wrap<{
    and_v: [Miniscript, Miniscript];
}> | Wrap<{
    and_b: [Miniscript, Miniscript];
}> | Wrap<{
    andor: [Miniscript, Miniscript, Miniscript];
}> | Wrap<{
    or_b: [Miniscript, Miniscript];
}> | Wrap<{
    or_c: [Miniscript, Miniscript];
}> | Wrap<{
    or_d: [Miniscript, Miniscript];
}> | Wrap<{
    or_i: [Miniscript, Miniscript];
}> | Wrap<{
    thresh: [number, ...Miniscript[]];
}> | Wrap<{
    sha256: string;
}> | Wrap<{
    ripemd160: string;
}> | Wrap<{
    hash256: string;
}> | Wrap<{
    hash160: string;
}> | Wrap<{
    older: number;
}> | Wrap<{
    after: number;
}> | Wrap<{
    payload_drop: string;
}>;
type TapTree = [TapTree, TapTree] | Miniscript;
type Descriptor = {
    sh: Miniscript | {
        wsh: Miniscript;
    };
} | {
    wsh: Miniscript;
} | {
    pk: Key;
} | {
    pkh: Key;
} | {
    wpkh: Key;
} | {
    combo: Key;
} | {
    tr: [Key, TapTree];
} | {
    addr: string;
} | {
    raw: string;
} | {
    rawtr: string;
};
export type TapTreeNode = TapTree;
export type MiniscriptNode = Miniscript;
export type DescriptorNode = Descriptor;
/** Format a Miniscript or Descriptor node as a descriptor string (without checksum) */
export declare function formatNode(n: MiniscriptNode | DescriptorNode): string;
export {};
