import { PublicKey } from "@solana/web3.js";
import { TipLink } from "./index";
import { Themeable } from "./lib/themes";
import { decrypt } from "./crypto";
export { decrypt };
export declare const ON_CHAIN_NAME_CHAR_LIMIT = 32;
export declare const ON_CHAIN_SYMBOL_CHAR_LIMIT = 10;
type ArgT = string | number | boolean | string[] | number[];
export declare class TipLinkClient {
    apiKey: string;
    version: number;
    publicKey?: string;
    id?: number;
    campaigns: CampaignActions;
    mints: MintActions;
    constructor(apiKey: string, version?: number);
    static init(apiKey: string, version?: number): Promise<TipLinkClient>;
    fetch(endpoint: string, args?: Record<string, ArgT> | null, body?: Record<string, unknown> | Array<Record<string, unknown>> | FormData | null, verb?: string): Promise<any>;
}
declare class TipLinkApi {
    client: TipLinkClient;
    constructor(client: TipLinkClient);
}
interface CampaignCreateParams extends Themeable {
    name: string;
    description: string;
    imageUrl: string;
    active: boolean;
}
interface CampaignActionsConstructor {
    client: TipLinkClient;
}
interface CampaignFindParams {
    id: number;
    name: string;
    description: string;
    imageUrl: string;
    active: boolean;
}
interface CampaignAllParams {
    id: number;
    name: string;
    description: string;
    imageUrl: string;
    active: boolean;
    limit: number;
    offset: number;
    sorting: string;
}
interface AnalyticsSummary {
    event_type_counts: Record<string, number>[];
    total: number;
    faucets_info: Record<string, number>[];
    campaign_info: Record<string, number>[];
}
declare enum EventType {
    CREATED = "CREATED",
    ACCESSED = "ACCESSED",
    CLAIMED = "CLAIMED",
    CLAIMED_BACK = "CLAIMED_BACK"
}
interface Analytic {
    public_key: PublicKey;
    event: EventType;
    created_at: Date;
}
declare class CampaignActions extends TipLinkApi {
    constructor(params: CampaignActionsConstructor);
    create(params: CampaignCreateParams): Promise<Campaign>;
    find(params: CampaignFindParams): Promise<Campaign>;
    all(params: CampaignAllParams): Promise<Campaign[]>;
}
interface GetEntriesParams {
    id: number | number[];
    limit: number;
    offset: number;
    sorting: string | string[];
}
interface CampaignConstructorParams extends Themeable {
    client: TipLinkClient;
    id: number;
    name: string;
    description: string;
    imageUrl: string;
    active: boolean;
}
export declare class Campaign extends TipLinkApi {
    id: number;
    name: string;
    description: string;
    imageUrl: string;
    active: boolean;
    themeId?: number;
    encryptionKey?: string;
    encryptionSalt?: string;
    dispensers: DispenserActions;
    constructor(params: CampaignConstructorParams);
    addEntries(tiplinks: TipLink[]): Promise<boolean>;
    hideEntries(tiplinks: TipLink[] | PublicKey[]): Promise<boolean>;
    getEntries(params: GetEntriesParams): Promise<TipLink[] | null>;
    getAnalytic(publicKey: string): Promise<Analytic | null>;
    getAnalytics(): Promise<AnalyticsSummary>;
    share(email: string, admin?: boolean): Promise<boolean>;
}
interface CreateDispenserParams {
    useCaptcha: boolean;
    useFingerprint: boolean;
    unlimitedClaims: boolean;
    active?: boolean;
    includedEntryIds?: number[];
    excludedEntryIds?: number[];
}
interface DispenserActionsConstructorParams {
    client: TipLinkClient;
    campaign: Campaign;
}
interface DispenserFindParams {
    id: number;
    name: string;
    description: string;
    imageUrl: string;
    active: boolean;
}
interface DispenserAllParams {
    id: number;
    name: string;
    description: string;
    imageUrl: string;
    active: boolean;
    limit: number;
    offset: number;
    sorting: string;
}
declare class DispenserActions extends TipLinkApi {
    campaign: Campaign;
    constructor(params: DispenserActionsConstructorParams);
    create(params: CreateDispenserParams): Promise<Dispenser>;
    find(params: DispenserFindParams): Promise<Dispenser>;
    all(params: DispenserAllParams): Promise<Dispenser[]>;
}
interface DispenserConstructorParams {
    client: TipLinkClient;
    campaign: Campaign;
    id: number;
    urlSlug: string;
    useCaptcha: boolean;
    useFingerprint: boolean;
    unlimitedClaims: boolean;
    active: boolean;
}
export declare class Dispenser extends TipLinkApi {
    campaign: Campaign;
    id: number;
    urlSlug: string;
    useCaptcha: boolean;
    useFingerprint: boolean;
    unlimitedClaims: boolean;
    active: boolean;
    url: URL;
    constructor(params: DispenserConstructorParams);
    private getUrl;
    pause(): Promise<boolean>;
    resume(): Promise<boolean>;
    refresh(): Promise<URL>;
    delete(): Promise<boolean>;
}
interface MintActionsConstructor {
    client: TipLinkClient;
}
export declare enum DataHost {
    Arweave = "arweave",
    Shadow = "shadow"
}
interface MintConstructorParams extends Themeable {
    client: TipLinkClient;
    id: number;
    campaign_id: number;
    campaignName: string;
    imageUrl: string;
    externalUrl?: string;
    dataHost: DataHost;
    mintName: string;
    symbol: string;
    mintDescription?: string;
    mintLimit: number;
    attributes?: Record<string, string>[];
    creatorPublicKey: PublicKey;
    collectionId: string;
    treeAddress: string;
    jsonUri: string;
    collectionUri: string;
    royalties: number;
    primaryUrlSlug: string;
    rotatingUrlSlug: string;
    useRotating: boolean;
    rotatingTimeInterval: number;
    totpWindow: number;
    userClaimLimit: number;
    royaltiesDestination?: PublicKey | null;
}
interface MintCreateParams extends Themeable {
    campaignName: string;
    campaignDescription?: string;
    mintName: string;
    mintDescription?: string;
    symbol: string;
    mintLimit: number;
    mintImageUrl: string;
    externalUrl?: string;
    existingCollectionId?: string;
    creatorPublicKey: PublicKey;
    royalties?: number;
    royaltiesDestination?: PublicKey;
    attributes?: Record<string, string>;
    dataHost?: DataHost;
    feeTransactionHash?: string;
}
interface MintFindParams {
    campaign_id: string;
}
interface FeeResponse {
    publicKey: PublicKey;
    feeLamports: number;
}
interface IndividualLinkGetMintActivityParam {
    urlSlug: string;
    destination: never;
}
type GetMintActivityParam = IndividualLinkGetMintActivityParam;
interface MintActivity {
    claim_txn: string;
    timestamp: Date;
    destination: PublicKey;
}
declare class MintActions extends TipLinkApi {
    constructor(params: MintActionsConstructor);
    private transformAttributes;
    private isValidUrl;
    getFees(params: MintCreateParams): Promise<FeeResponse>;
    create(params: MintCreateParams): Promise<Mint>;
    find(params: MintFindParams): Promise<Mint>;
}
export declare class Mint extends TipLinkApi {
    id: number;
    campaign_id: number;
    campaignName: string;
    imageUrl: string;
    externalUrl: string;
    dataHost: DataHost;
    mintName: string;
    symbol: string;
    mintDescription: string;
    mintLimit: number;
    attributes: Record<string, string>[];
    creatorPublicKey: PublicKey;
    collectionId: string;
    treeAddress: string;
    jsonUri: string;
    collectionUri: string;
    royalties: number;
    primaryUrlSlug: string;
    rotatingUrlSlug: string;
    useRotating: boolean;
    rotatingTimeInterval: number;
    totpWindow: number;
    userClaimLimit: number;
    royaltiesDestination?: PublicKey | null;
    constructor(params: MintConstructorParams);
    getMintUrl(): URL;
    getAnalytics(): Promise<AnalyticsSummary>;
    getMintActivity(params: GetMintActivityParam): Promise<MintActivity | null>;
    share(email: string, admin?: boolean): Promise<boolean>;
}
