@tiplink/api
Version:
Api for creating and sending TipLinks
274 lines (273 loc) • 7.79 kB
TypeScript
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>;
}