import type { A, O } from 'ts-toolbelt';
import type { HexMixed, JsonObject, JsonValue } from '@blake.regalia/belt';
import type { Key as KeplrKey, StdSignDoc } from '@keplr-wallet/types';
import type { HttpsUrl } from '@solar-republic/neutrino';
export declare const XC_CMD_CONNECT = 1;
export declare const XC_CMD_DISCONNECT = 2;
export declare const XC_CMD_SIGN_AMINO_INFERRED = 3;
export declare const XC_CMD_SECRET_ENCRYPT = 4;
export declare const XC_CMD_SECRET_DECRYPT = 5;
export type Serializable = JsonValue<ArrayBuffer | ArrayBufferView | DataView | Date | Error | Map<Serializable, Serializable> | RegExp | Set<Serializable> | String>;
type CommandDef<h_def extends Record<number, {
    req: Serializable;
    res: Serializable;
}>> = h_def;
type WritableSignDoc = O.Writable<StdSignDoc, A.Key, 'deep'>;
export type ComcCommands = CommandDef<{
    [XC_CMD_CONNECT]: {
        req: [
            p_origin: string,
            si_chain: string
        ];
        res: O.Writable<KeplrKey>;
    };
    [XC_CMD_DISCONNECT]: {
        req: [];
        res: [];
    };
    [XC_CMD_SIGN_AMINO_INFERRED]: {
        req: [
            g_doc: WritableSignDoc
        ];
        res: [
            g_signed: WritableSignDoc,
            atu8_signature: Uint8Array
        ];
    };
    [XC_CMD_SECRET_ENCRYPT]: {
        req: [
            sb16_code_hash: HexMixed,
            h_msg: JsonObject
        ];
        res: Uint8Array;
    };
    [XC_CMD_SECRET_DECRYPT]: {
        req: [
            atu8_ciphertext: Uint8Array,
            atu8_nonce: Uint8Array
        ];
        res: Uint8Array;
    };
}>;
export type ComcCommand = keyof ComcCommands;
export interface ComcClient {
    post<xc_cmd extends ComcCommand, g_cmd extends ComcCommands[xc_cmd] = ComcCommands[xc_cmd]>(xc_cmd: xc_cmd, w_arg: g_cmd['req']): Promise<g_cmd['res']>;
}
export declare const comcPortal: (p_host: HttpsUrl, dm_root: Element) => Promise<HTMLIFrameElement>;
export declare const comcClient: (dm_iframe: HTMLIFrameElement) => ComcClient;
export {};
