import * as astro from 'astro';
import * as _devprotocol_clubs_core from '@devprotocol/clubs-core';
import { ClubsGeneralUnit, ClubsPluginCategory } from '@devprotocol/clubs-core';
import { UndefinedOr } from '@devprotocol/util-ts';

type Option = {
    readonly key: 'posts';
    readonly value: readonly Posts[];
};
type TokenURIWithId = {
    readonly id: number;
    readonly image: string;
};
type PostPrimitives = {
    readonly title: string;
    readonly content: string;
    readonly options: readonly PostOption[];
};
type Posts = PostPrimitives & {
    readonly id: string;
    readonly created_by: string;
    readonly created_at: Date;
    readonly updated_at: Date;
    readonly comments: readonly Comment[];
    readonly reactions: Reactions;
    readonly masked?: boolean;
};
type PostOption = {
    readonly key: string;
    readonly value: ClubsGeneralUnit;
};
type CommentPrimitives = {
    readonly content: string;
    readonly options: readonly PostOption[];
};
type Comment = CommentPrimitives & {
    readonly id: string;
    readonly created_by: string;
    readonly created_at: Date;
    readonly updated_at: Date;
};
type OptionsDatabase = {
    readonly id: string;
    readonly slug?: string;
    readonly title?: string;
    readonly database: {
        readonly type: 'encoded:redis';
        readonly key: string;
    } | {
        readonly type: 'documents:redis';
        readonly key: string;
    };
};
/**
 * Reaction is a map of emoji to users who reacted to a post
 * An emoji as the key, and an array of addresses as the users who reacted to the post
 * @example
 * {'🦜': ['0x0', '0x2']}
 */
type Reactions = {
    readonly [emoji: string]: readonly string[];
};
declare enum SlotName {
    PostsEditAfterContentForm = "posts:edit:after:content-form",
    PostsFeedAfterPostContent = "posts:feed:after:post-content"
}
declare enum Event {
    PostCreated = "posts:event::post_created",
    RegisterOnUpdateHandler = "posts:event::register_on_update_handler"
}

declare const getPagePaths: (options: readonly Readonly<{
    readonly key: string;
    readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
}>[], { propertyAddress, adminRolePoints }: Readonly<{
    readonly name: string;
    readonly adminPageVisibility?: boolean | undefined;
    readonly twitterHandle: string;
    readonly description: string;
    readonly url: string;
    readonly propertyAddress: string;
    readonly adminRolePoints: number;
    readonly chainId: number;
    readonly rpcUrl: string;
    readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
    readonly plugins: readonly Readonly<{
        readonly id: string;
        readonly name?: string | undefined;
        readonly enable?: boolean | undefined;
        readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
    }>[];
}>, { getPluginConfigById }: _devprotocol_clubs_core.ClubsFactoryUtils) => Promise<{
    paths: string[];
    component: any;
    props: {
        options: readonly Readonly<{
            readonly key: string;
            readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
        }>[];
        feedId: string;
        propertyAddress: string;
        memberships: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
        adminRolePoints: number;
        emojiAllowList: UndefinedOr<readonly string[]>;
    };
}[]>;
declare const getAdminPaths: (options: readonly Readonly<{
    readonly key: string;
    readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
}>[], config: Readonly<{
    readonly name: string;
    readonly adminPageVisibility?: boolean | undefined;
    readonly twitterHandle: string;
    readonly description: string;
    readonly url: string;
    readonly propertyAddress: string;
    readonly adminRolePoints: number;
    readonly chainId: number;
    readonly rpcUrl: string;
    readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
    readonly plugins: readonly Readonly<{
        readonly id: string;
        readonly name?: string | undefined;
        readonly enable?: boolean | undefined;
        readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
    }>[];
}>) => Promise<({
    paths: string[];
    component: any;
    props: {
        feeds: readonly OptionsDatabase[];
        url: string;
        edit: OptionsDatabase;
    };
} | {
    paths: string[];
    component: any;
    props: {
        options: readonly Readonly<{
            readonly key: string;
            readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
        }>[];
        feeds?: undefined;
        url?: undefined;
    };
} | {
    paths: string[];
    component: any;
    props: {
        feeds: readonly OptionsDatabase[];
        url: string;
        options?: undefined;
    };
})[]>;
declare const meta: {
    id: string;
    displayName: string;
    description: string;
    category: ClubsPluginCategory;
    previewImages: string[];
    readme: any;
    icon: string;
};
declare const getApiPaths: (options: readonly Readonly<{
    readonly key: string;
    readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
}>[], config: Readonly<{
    readonly name: string;
    readonly adminPageVisibility?: boolean | undefined;
    readonly twitterHandle: string;
    readonly description: string;
    readonly url: string;
    readonly propertyAddress: string;
    readonly adminRolePoints: number;
    readonly chainId: number;
    readonly rpcUrl: string;
    readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
    readonly plugins: readonly Readonly<{
        readonly id: string;
        readonly name?: string | undefined;
        readonly enable?: boolean | undefined;
        readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
    }>[];
}>) => Promise<({
    paths: string[];
    method: "POST";
    handler: ({ request }: {
        readonly request: Request;
    }) => Promise<Response>;
} | {
    paths: (string | RegExp)[];
    method: "GET";
    handler: astro.APIRoute;
})[]>;
declare const getSlots: (options: readonly Readonly<{
    readonly key: string;
    readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
}>[], __: Readonly<{
    readonly name: string;
    readonly adminPageVisibility?: boolean | undefined;
    readonly twitterHandle: string;
    readonly description: string;
    readonly url: string;
    readonly propertyAddress: string;
    readonly adminRolePoints: number;
    readonly chainId: number;
    readonly rpcUrl: string;
    readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
    readonly plugins: readonly Readonly<{
        readonly id: string;
        readonly name?: string | undefined;
        readonly enable?: boolean | undefined;
        readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
    }>[];
}>, { paths, factory }: _devprotocol_clubs_core.ClubsSlotsFactoryUtils) => Promise<{
    slot: string;
    component: any;
    props: {
        navigation: {
            display: string;
            path: string;
        };
    };
}[] | {
    slot: string;
    component: any;
    props: {
        createNavigation: {
            label: string;
            link: {
                display: string;
                path: string;
            };
        };
    };
}[]>;
declare const _default: {
    getPagePaths: (options: readonly Readonly<{
        readonly key: string;
        readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
    }>[], { propertyAddress, adminRolePoints }: Readonly<{
        readonly name: string;
        readonly adminPageVisibility?: boolean | undefined;
        readonly twitterHandle: string;
        readonly description: string;
        readonly url: string;
        readonly propertyAddress: string;
        readonly adminRolePoints: number;
        readonly chainId: number;
        readonly rpcUrl: string;
        readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
        readonly plugins: readonly Readonly<{
            readonly id: string;
            readonly name?: string | undefined;
            readonly enable?: boolean | undefined;
            readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
        }>[];
    }>, { getPluginConfigById }: _devprotocol_clubs_core.ClubsFactoryUtils) => Promise<{
        paths: string[];
        component: any;
        props: {
            options: readonly Readonly<{
                readonly key: string;
                readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
            }>[];
            feedId: string;
            propertyAddress: string;
            memberships: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
            adminRolePoints: number;
            emojiAllowList: UndefinedOr<readonly string[]>;
        };
    }[]>;
    getAdminPaths: (options: readonly Readonly<{
        readonly key: string;
        readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
    }>[], config: Readonly<{
        readonly name: string;
        readonly adminPageVisibility?: boolean | undefined;
        readonly twitterHandle: string;
        readonly description: string;
        readonly url: string;
        readonly propertyAddress: string;
        readonly adminRolePoints: number;
        readonly chainId: number;
        readonly rpcUrl: string;
        readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
        readonly plugins: readonly Readonly<{
            readonly id: string;
            readonly name?: string | undefined;
            readonly enable?: boolean | undefined;
            readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
        }>[];
    }>) => Promise<({
        paths: string[];
        component: any;
        props: {
            feeds: readonly OptionsDatabase[];
            url: string;
            edit: OptionsDatabase;
        };
    } | {
        paths: string[];
        component: any;
        props: {
            options: readonly Readonly<{
                readonly key: string;
                readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
            }>[];
            feeds?: undefined;
            url?: undefined;
        };
    } | {
        paths: string[];
        component: any;
        props: {
            feeds: readonly OptionsDatabase[];
            url: string;
            options?: undefined;
        };
    })[]>;
    getApiPaths: (options: readonly Readonly<{
        readonly key: string;
        readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
    }>[], config: Readonly<{
        readonly name: string;
        readonly adminPageVisibility?: boolean | undefined;
        readonly twitterHandle: string;
        readonly description: string;
        readonly url: string;
        readonly propertyAddress: string;
        readonly adminRolePoints: number;
        readonly chainId: number;
        readonly rpcUrl: string;
        readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
        readonly plugins: readonly Readonly<{
            readonly id: string;
            readonly name?: string | undefined;
            readonly enable?: boolean | undefined;
            readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
        }>[];
    }>) => Promise<({
        paths: string[];
        method: "POST";
        handler: ({ request }: {
            readonly request: Request;
        }) => Promise<Response>;
    } | {
        paths: (string | RegExp)[];
        method: "GET";
        handler: astro.APIRoute;
    })[]>;
    getSlots: (options: readonly Readonly<{
        readonly key: string;
        readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
    }>[], __: Readonly<{
        readonly name: string;
        readonly adminPageVisibility?: boolean | undefined;
        readonly twitterHandle: string;
        readonly description: string;
        readonly url: string;
        readonly propertyAddress: string;
        readonly adminRolePoints: number;
        readonly chainId: number;
        readonly rpcUrl: string;
        readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
        readonly plugins: readonly Readonly<{
            readonly id: string;
            readonly name?: string | undefined;
            readonly enable?: boolean | undefined;
            readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
        }>[];
    }>, { paths, factory }: _devprotocol_clubs_core.ClubsSlotsFactoryUtils) => Promise<{
        slot: string;
        component: any;
        props: {
            navigation: {
                display: string;
                path: string;
            };
        };
    }[] | {
        slot: string;
        component: any;
        props: {
            createNavigation: {
                label: string;
                link: {
                    display: string;
                    path: string;
                };
            };
        };
    }[]>;
    meta: {
        id: string;
        displayName: string;
        description: string;
        category: ClubsPluginCategory;
        previewImages: string[];
        readme: any;
        icon: string;
    };
};

export { type Comment, type CommentPrimitives, Event, type Option, type OptionsDatabase, type PostOption, type PostPrimitives, type Posts, type Reactions, SlotName, type TokenURIWithId, _default as default, getAdminPaths, getApiPaths, getPagePaths, getSlots, meta };
