import * as PUPPET from '@juzi/wechaty-puppet';
import { BooleanIndicator, StateSwitchInterface } from 'state-switch';
/**
 * Huan(202111): `puppetMixin` must extend `pluginMixin`
 *  because the `wechaty-redux` plugin need to be installed before
 *  the puppet started
 *
 * Huan(20211128): `puppetMixin` must extend `IoMixin`
 *  because the Io need the puppet instance to be ready when it starts
 */
declare const puppetMixin: <MixinBase extends ((abstract new (...args: any[]) => {
    __wechatifiedContact?: import("../user-modules/contact.js").ContactConstructor | undefined;
    __wechatifiedContactSelf?: import("../user-modules/contact-self.js").ContactSelfConstructor | undefined;
    __wechatifiedDelay?: import("../user-modules/delay.js").DelayConstructor | undefined;
    __wechatifiedFriendship?: import("../user-modules/friendship.js").FriendshipConstructor | undefined;
    __wechatifiedImage?: import("../user-modules/image.js").ImageConstructor | undefined;
    __wechatifiedLocation?: import("../user-modules/location.js").LocationConstructor | undefined;
    __wechatifiedMessage?: import("../user-modules/message.js").MessageConstructor | undefined;
    __wechatifiedMiniProgram?: import("../user-modules/mini-program.js").MiniProgramConstructor | undefined;
    __wechatifiedPost?: import("../user-modules/post.js").PostConstructor | undefined;
    __wechatifiedRoom?: import("../user-modules/room.js").RoomConstructor | undefined;
    __wechatifiedRoomInvitation?: import("../user-modules/room-invitation.js").RoomInvitationConstructor | undefined;
    __wechatifiedTag?: import("../user-modules/tag.js").TagConstructor | undefined;
    __wechatifiedTagGroup?: import("../user-modules/tag-group.js").TagGroupConstructor | undefined;
    __wechatifiedUrlLink?: import("../user-modules/url-link.js").UrlLinkConstructor | undefined;
    __wechatifiedChannel?: import("../user-modules/channel.js").ChannelConstructor | undefined;
    __wechatifiedMoment?: import("../user-modules/moment.js").MomentConstructor | undefined;
    __wechatifiedCallRecord?: import("../user-modules/call.js").CallRecordConstructor | undefined;
    __wechatifiedChatHistory?: import("../user-modules/chat-history.js").ChatHistoryConstructor | undefined;
    __wechatifiedWecom?: import("../user-modules/wecom.js").WecomConstructor | undefined;
    readonly Contact: import("../user-modules/contact.js").ContactConstructor;
    readonly ContactSelf: import("../user-modules/contact-self.js").ContactSelfConstructor;
    readonly Delay: import("../user-modules/delay.js").DelayConstructor;
    readonly Friendship: import("../user-modules/friendship.js").FriendshipConstructor;
    readonly Image: import("../user-modules/image.js").ImageConstructor;
    readonly Location: import("../user-modules/location.js").LocationConstructor;
    readonly Message: import("../user-modules/message.js").MessageConstructor;
    readonly MiniProgram: import("../user-modules/mini-program.js").MiniProgramConstructor;
    readonly Post: import("../user-modules/post.js").PostConstructor;
    readonly Room: import("../user-modules/room.js").RoomConstructor;
    readonly RoomInvitation: import("../user-modules/room-invitation.js").RoomInvitationConstructor;
    readonly Tag: import("../user-modules/tag.js").TagConstructor;
    readonly TagGroup: import("../user-modules/tag-group.js").TagGroupConstructor;
    readonly UrlLink: import("../user-modules/url-link.js").UrlLinkConstructor;
    readonly Channel: import("../user-modules/channel.js").ChannelConstructor;
    readonly Moment: import("../user-modules/moment.js").MomentConstructor;
    readonly CallRecord: import("../user-modules/call.js").CallRecordConstructor;
    readonly ChatHistory: import("../user-modules/chat-history.js").ChatHistoryConstructor;
    readonly Wecom: import("../user-modules/wecom.js").WecomConstructor;
    init(): Promise<void>;
    readonly log: import("brolog/dist/esm/src/logger.js").Loggable;
    readonly id: string;
    __memory?: import("memory-card").MemoryCard | undefined;
    readonly memory: import("memory-card").MemoryCard;
    __options: import("../schemas/wechaty-options.js").WechatyOptions;
    start(): Promise<void>;
    stop(): Promise<void>;
    on(event: "error" | "ready" | "tag" | "login" | "start" | "stop" | "logout" | "room-invite" | "room-join" | "room-leave" | "room-topic" | "room-announce" | "dong" | "friendship" | "heartbeat" | "message" | "post" | "puppet" | "scan" | "contact-tag-add" | "contact-tag-remove" | "contact-name" | "contact-alias" | "contact-phone" | "contact-description" | "contact-corporation" | "room-owner" | "tag-group" | "post-comment" | "post-tap" | "verify-code" | "dirty" | "login-url", listener: (...args: any[]) => any): any;
    addListener<E extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E]): any;
    once<E_1 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_1, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_1]): any;
    prependListener<E_2 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_2, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_2]): any;
    prependOnceListener<E_3 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_3, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_3]): any;
    off<E_4 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_4, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_4]): any;
    removeAllListeners<E_5 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event?: E_5 | undefined): any;
    removeListener<E_6 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_6, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_6]): any;
    emit<E_7 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_7, ...args: import("typed-emitter").Arguments<import("../schemas/wechaty-events.js").WechatyEventListeners[E_7]>): boolean;
    eventNames(): (string | symbol)[];
    rawListeners<E_8 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_8): Function[];
    listeners<E_9 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_9): Function[];
    listenerCount<E_10 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_10): number;
    getMaxListeners(): number;
    setMaxListeners(maxListeners: number): any;
    __events: import("../schemas/wechaty-events.js").WechatyEventListeners;
}) & {
    readonly log: import("brolog/dist/esm/src/logger.js").Loggable;
}) & typeof import("../wechaty/wechaty-skeleton.js").WechatySkeleton & ((abstract new (...args: any[]) => {
    wrapAsync: import("gerror/dist/esm/src/wrap-async-error/wrap-async-error.js").WrapAsync;
    emitError(e: any): void;
    emit(event: any, ...args: any): boolean;
    readonly log: import("brolog/dist/esm/src/logger.js").Loggable;
    readonly id: string;
    __memory?: import("memory-card").MemoryCard | undefined;
    readonly memory: import("memory-card").MemoryCard;
    __options: import("../schemas/wechaty-options.js").WechatyOptions;
    init(): Promise<void>;
    start(): Promise<void>;
    stop(): Promise<void>;
    on(event: "error" | "ready" | "tag" | "login" | "start" | "stop" | "logout" | "room-invite" | "room-join" | "room-leave" | "room-topic" | "room-announce" | "dong" | "friendship" | "heartbeat" | "message" | "post" | "puppet" | "scan" | "contact-tag-add" | "contact-tag-remove" | "contact-name" | "contact-alias" | "contact-phone" | "contact-description" | "contact-corporation" | "room-owner" | "tag-group" | "post-comment" | "post-tap" | "verify-code" | "dirty" | "login-url", listener: (...args: any[]) => any): any;
    addListener<E_11 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_11, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_11]): any;
    once<E_12 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_12, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_12]): any;
    prependListener<E_13 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_13, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_13]): any;
    prependOnceListener<E_14 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_14, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_14]): any;
    off<E_15 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_15, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_15]): any;
    removeAllListeners<E_16 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event?: E_16 | undefined): any;
    removeListener<E_17 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_17, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_17]): any;
    eventNames(): (string | symbol)[];
    rawListeners<E_8 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_8): Function[];
    listeners<E_9 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_9): Function[];
    listenerCount<E_10 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_10): number;
    getMaxListeners(): number;
    setMaxListeners(maxListeners: number): any;
    __events: import("../schemas/wechaty-events.js").WechatyEventListeners;
}) & {
    readonly log: import("brolog/dist/esm/src/logger.js").Loggable;
}) & ((abstract new (...args: any[]) => {
    __io?: import("../io.js").Io | undefined;
    readonly io: import("../io.js").Io;
    __ioToken?: string | undefined;
    start(): Promise<void>;
    stop(): Promise<void>;
    readonly log: import("brolog/dist/esm/src/logger.js").Loggable;
    readonly id: string;
    __memory?: import("memory-card").MemoryCard | undefined;
    readonly memory: import("memory-card").MemoryCard;
    __options: import("../schemas/wechaty-options.js").WechatyOptions;
    init(): Promise<void>;
    on(event: "error" | "ready" | "tag" | "login" | "start" | "stop" | "logout" | "room-invite" | "room-join" | "room-leave" | "room-topic" | "room-announce" | "dong" | "friendship" | "heartbeat" | "message" | "post" | "puppet" | "scan" | "contact-tag-add" | "contact-tag-remove" | "contact-name" | "contact-alias" | "contact-phone" | "contact-description" | "contact-corporation" | "room-owner" | "tag-group" | "post-comment" | "post-tap" | "verify-code" | "dirty" | "login-url", listener: (...args: any[]) => any): any;
    addListener<E_18 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_18, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_18]): any;
    once<E_19 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_19, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_19]): any;
    prependListener<E_20 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_20, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_20]): any;
    prependOnceListener<E_21 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_21, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_21]): any;
    off<E_22 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_22, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_22]): any;
    removeAllListeners<E_23 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event?: E_23 | undefined): any;
    removeListener<E_24 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_24, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_24]): any;
    emit: (<E_7 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_7, ...args: import("typed-emitter").Arguments<import("../schemas/wechaty-events.js").WechatyEventListeners[E_7]>) => boolean) & ((event: any, ...args: any) => boolean);
    eventNames(): (string | symbol)[];
    rawListeners<E_8 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_8): Function[];
    listeners<E_9 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_9): Function[];
    listenerCount<E_10 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_10): number;
    getMaxListeners(): number;
    setMaxListeners(maxListeners: number): any;
    __events: import("../schemas/wechaty-events.js").WechatyEventListeners;
    wrapAsync: import("gerror/dist/esm/src/wrap-async-error/wrap-async-error.js").WrapAsync;
    emitError(e: any): void;
}) & {
    readonly log: import("brolog/dist/esm/src/logger.js").Loggable;
})>(mixinBase: MixinBase) => ((abstract new (...args: any[]) => {
    __puppet?: PUPPET.impls.PuppetInterface | undefined;
    readonly puppet: PUPPET.impls.PuppetInterface;
    readonly __readyState: StateSwitchInterface;
    __loginIndicator: BooleanIndicator;
    __puppetMixinInited: boolean;
    start(): Promise<void>;
    stop(): Promise<void>;
    ready(): Promise<void>;
    init(): Promise<void>;
    __setupPuppetEvents(puppet: PUPPET.impls.PuppetInterface): void;
    __wechatifiedContact?: import("../user-modules/contact.js").ContactConstructor | undefined;
    __wechatifiedContactSelf?: import("../user-modules/contact-self.js").ContactSelfConstructor | undefined;
    __wechatifiedDelay?: import("../user-modules/delay.js").DelayConstructor | undefined;
    __wechatifiedFriendship?: import("../user-modules/friendship.js").FriendshipConstructor | undefined;
    __wechatifiedImage?: import("../user-modules/image.js").ImageConstructor | undefined;
    __wechatifiedLocation?: import("../user-modules/location.js").LocationConstructor | undefined;
    __wechatifiedMessage?: import("../user-modules/message.js").MessageConstructor | undefined;
    __wechatifiedMiniProgram?: import("../user-modules/mini-program.js").MiniProgramConstructor | undefined;
    __wechatifiedPost?: import("../user-modules/post.js").PostConstructor | undefined;
    __wechatifiedRoom?: import("../user-modules/room.js").RoomConstructor | undefined;
    __wechatifiedRoomInvitation?: import("../user-modules/room-invitation.js").RoomInvitationConstructor | undefined;
    __wechatifiedTag?: import("../user-modules/tag.js").TagConstructor | undefined;
    __wechatifiedTagGroup?: import("../user-modules/tag-group.js").TagGroupConstructor | undefined;
    __wechatifiedUrlLink?: import("../user-modules/url-link.js").UrlLinkConstructor | undefined;
    __wechatifiedChannel?: import("../user-modules/channel.js").ChannelConstructor | undefined;
    __wechatifiedMoment?: import("../user-modules/moment.js").MomentConstructor | undefined;
    __wechatifiedCallRecord?: import("../user-modules/call.js").CallRecordConstructor | undefined;
    __wechatifiedChatHistory?: import("../user-modules/chat-history.js").ChatHistoryConstructor | undefined;
    __wechatifiedWecom?: import("../user-modules/wecom.js").WecomConstructor | undefined;
    readonly Contact: import("../user-modules/contact.js").ContactConstructor;
    readonly ContactSelf: import("../user-modules/contact-self.js").ContactSelfConstructor;
    readonly Delay: import("../user-modules/delay.js").DelayConstructor;
    readonly Friendship: import("../user-modules/friendship.js").FriendshipConstructor;
    readonly Image: import("../user-modules/image.js").ImageConstructor;
    readonly Location: import("../user-modules/location.js").LocationConstructor;
    readonly Message: import("../user-modules/message.js").MessageConstructor;
    readonly MiniProgram: import("../user-modules/mini-program.js").MiniProgramConstructor;
    readonly Post: import("../user-modules/post.js").PostConstructor;
    readonly Room: import("../user-modules/room.js").RoomConstructor;
    readonly RoomInvitation: import("../user-modules/room-invitation.js").RoomInvitationConstructor;
    readonly Tag: import("../user-modules/tag.js").TagConstructor;
    readonly TagGroup: import("../user-modules/tag-group.js").TagGroupConstructor;
    readonly UrlLink: import("../user-modules/url-link.js").UrlLinkConstructor;
    readonly Channel: import("../user-modules/channel.js").ChannelConstructor;
    readonly Moment: import("../user-modules/moment.js").MomentConstructor;
    readonly CallRecord: import("../user-modules/call.js").CallRecordConstructor;
    readonly ChatHistory: import("../user-modules/chat-history.js").ChatHistoryConstructor;
    readonly Wecom: import("../user-modules/wecom.js").WecomConstructor;
    readonly log: import("brolog/dist/esm/src/logger.js").Loggable;
    readonly id: string;
    __memory?: import("memory-card").MemoryCard | undefined;
    readonly memory: import("memory-card").MemoryCard;
    __options: import("../schemas/wechaty-options.js").WechatyOptions;
    on(event: "error" | "ready" | "tag" | "login" | "start" | "stop" | "logout" | "room-invite" | "room-join" | "room-leave" | "room-topic" | "room-announce" | "dong" | "friendship" | "heartbeat" | "message" | "post" | "puppet" | "scan" | "contact-tag-add" | "contact-tag-remove" | "contact-name" | "contact-alias" | "contact-phone" | "contact-description" | "contact-corporation" | "room-owner" | "tag-group" | "post-comment" | "post-tap" | "verify-code" | "dirty" | "login-url", listener: (...args: any[]) => any): any;
    addListener<E_25 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_25, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_25]): any;
    once<E_26 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_26, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_26]): any;
    prependListener<E_27 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_27, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_27]): any;
    prependOnceListener<E_28 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_28, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_28]): any;
    off<E_29 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_29, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_29]): any;
    removeAllListeners<E_30 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event?: E_30 | undefined): any;
    removeListener<E_31 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_31, listener: import("../schemas/wechaty-events.js").WechatyEventListeners[E_31]): any;
    emit: (<E_7 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_7, ...args: import("typed-emitter").Arguments<import("../schemas/wechaty-events.js").WechatyEventListeners[E_7]>) => boolean) & ((event: any, ...args: any) => boolean);
    eventNames(): (string | symbol)[];
    rawListeners<E_8 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_8): Function[];
    listeners<E_9 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_9): Function[];
    listenerCount<E_10 extends keyof import("../schemas/wechaty-events.js").WechatyEventListeners>(event: E_10): number;
    getMaxListeners(): number;
    setMaxListeners(maxListeners: number): any;
    __events: import("../schemas/wechaty-events.js").WechatyEventListeners;
    wrapAsync: import("gerror/dist/esm/src/wrap-async-error/wrap-async-error.js").WrapAsync;
    emitError(e: any): void;
    __io?: import("../io.js").Io | undefined;
    readonly io: import("../io.js").Io;
    __ioToken?: string | undefined;
}) & {
    readonly log: import("brolog/dist/esm/src/logger.js").Loggable;
}) & MixinBase;
declare type PuppetMixin = ReturnType<typeof puppetMixin>;
declare type ProtectedPropertyPuppetMixin = '__puppet' | '__readyState' | '__setupPuppetEvents' | '__loginIndicator';
export type { PuppetMixin, ProtectedPropertyPuppetMixin, };
export { puppetMixin, };
//# sourceMappingURL=puppet-mixin.d.ts.map