import type { ContentTopic, IDecodedMessage, EncoderOptions as WakuEncoderOptions } from "@waku/interfaces";
import { type RLNDecoder, type RLNEncoder } from "./codec.js";
import { RLNCredentialsManager } from "./credentials_manager.js";
import type { DecryptedCredentials, EncryptedCredentials } from "./keystore/index.js";
import { WitnessCalculator } from "./resources/witness_calculator";
import { Zerokit } from "./zerokit.js";
type WakuRLNEncoderOptions = WakuEncoderOptions & {
    credentials: EncryptedCredentials | DecryptedCredentials;
};
export declare class RLNInstance extends RLNCredentialsManager {
    zerokit: Zerokit;
    /**
     * Create an instance of RLN
     * @returns RLNInstance
     */
    static create(): Promise<RLNInstance>;
    private constructor();
    createEncoder(options: WakuRLNEncoderOptions): Promise<RLNEncoder>;
    createDecoder(contentTopic: ContentTopic): RLNDecoder<IDecodedMessage>;
    static loadWitnessCalculator(): Promise<WitnessCalculator>;
    static loadZkey(): Promise<Uint8Array>;
}
export {};
