import type { DataObject } from "./data-type.ts";
export interface CounterInit {
    code: string;
    count: number;
}
export interface Counter extends CounterInit {
    text: string;
}
export interface GenusInit {
    major: number;
    minor?: number;
}
export interface Genus extends GenusInit {
    minor: number;
}
export interface IndexerInit {
    code: string;
    raw?: Uint8Array;
    index?: number;
    ondex?: number;
}
export interface Indexer extends IndexerInit {
    text: string;
}
export interface MatterInit {
    code: string;
    soft?: string;
    raw: Uint8Array;
}
export interface Matter extends MatterInit {
    code: string;
    text: string;
}
export interface MessageVersionInit {
    protocol?: string;
    major?: number;
    minor?: number;
    size?: number;
    /**
     * The serialization kind
     */
    kind?: string;
    /**
     * Use the legacy version string format
     */
    legacy?: boolean;
}
export type MessageVersion = Required<MessageVersionInit>;
export type MatterDigest = "blake3_256" | "blake3_512";
export type MatterSignature = "ed25519" | "secp256k1";
export interface FrameData {
    code: string;
    raw?: Uint8Array;
    count?: number;
    index?: number;
    ondex?: number;
    text?: string;
}
export interface CodeSize {
    hs: number;
    fs: number;
    ss: number;
    os?: number;
    ls?: number;
    xs?: number;
}
export interface ParsingContext {
    code: string;
    version?: number;
}
/**
 * The result of decoding a stream. The frame property will
 * be null if there is not enough data to decode a frame.
 *
 * The n property indicates the number of bytes consumed
 */
export interface DecodeStreamResult {
    /**
     * The decoded frame. This will be null if there is not enough data in the input
     */
    frame: Required<FrameData> | null;
    /**
     * The number of bytes consumed from the input
     */
    n: number;
}
export declare function encode(frame: FrameData, size: CodeSize): string;
export declare function encodeIndexedSignature(alg: MatterSignature, raw: Uint8Array, index: number): string;
export declare function encodeMatter(raw: MatterInit): string;
export declare function encodeMap(data: DataObject): string;
export declare function encodeDate(date: Date): string;
export declare function encodeTag(tag: string): string;
export declare function encodeString(txt: string): string;
export declare function encodeInt(value: number): string;
export declare function encodeNumber(value: number): string;
export declare function encodeSignature(alg: MatterSignature, raw: Uint8Array): string;
export declare function encodeDigest(alg: MatterDigest, raw: Uint8Array): string;
export declare function encodeGenus(genus: GenusInit): string;
export declare function encodeCounter(raw: CounterInit): string;
export declare function encodeAttachmentsV1(count: number): string;
export declare function encodeAttachmentsV2(count: number): string;
export declare function encodeIndexer(frame: IndexerInit): string;
export declare function encodeVersionString(init: MessageVersionInit): string;
export declare function encodeMessage<T extends DataObject>(body: T, init?: MessageVersionInit): string;
export declare function decode(input: string | Uint8Array, context?: ParsingContext): Required<FrameData>;
export declare function decodeStream(input: string | Uint8Array, context?: ParsingContext): DecodeStreamResult;
export declare function decodeGenus(input: string): Genus;
export declare function decodeMatter(input: string | Uint8Array): Matter;
export declare function decodeCounter(input: string | Uint8Array): Counter;
export declare function decodeVersionString(input: string | Uint8Array): Required<MessageVersionInit>;
export declare const encoding: {
    encode: typeof encode;
    encodeIndexedSignature: typeof encodeIndexedSignature;
    encodeMap: typeof encodeMap;
    encodeMatter: typeof encodeMatter;
    encodeDate: typeof encodeDate;
    encodeString: typeof encodeString;
    encodeNumber: typeof encodeNumber;
    encodeSignature: typeof encodeSignature;
    encodeDigest: typeof encodeDigest;
    encodeGenus: typeof encodeGenus;
    encodeCounter: typeof encodeCounter;
    encodeAttachmentsV1: typeof encodeAttachmentsV1;
    encodeAttachmentsV2: typeof encodeAttachmentsV2;
    encodeIndexer: typeof encodeIndexer;
    encodeVersionString: typeof encodeVersionString;
    encodeMessage: typeof encodeMessage;
    decode: typeof decode;
    decodeStream: typeof decodeStream;
    decodeGenus: typeof decodeGenus;
    decodeMatter: typeof decodeMatter;
    decodeCounter: typeof decodeCounter;
    decodeVersionString: typeof decodeVersionString;
};
