UNPKG

@revenuegrid/churnzerojs

Version:

Typescript wrapper for ChurnZero JScript API

76 lines (75 loc) 2.88 kB
declare type int = number; declare type double = number; declare type date = Date; declare type datetime = Date; interface StandardEntityAttributes { account: { Name: string; NextRenewalDate: date; TotalContractAmount: double; IsActive: boolean; BillingAddressLine1: string; BillingAddressLine2: string; BillingAddressCity: string; BillingAddressState: string; BillingAddressZip: string; StartDate: datetime; EndDate: datetime; LicenseCount: int; OwnerUserAccount: string; ParentAccountExternalId: string; }; contact: { FirstName: string; LastName: string; Email: string; }; } declare type EntityType = keyof StandardEntityAttributes; interface Methods { setAppKey(key: string): void; setContact(accountExternalId: string, contactExternalId: string): void; trackEvent(name: string, description?: string, quantity?: number, customFields?: Record<string, any>): void; setAttribute<E extends EntityType, N extends keyof E>(entity: EntityType, name: N, value: E[N]): void; setAttribute<E extends EntityType>(entity: EntityType, attributes: Partial<StandardEntityAttributes[E]>): void; incrementAttribute<E extends EntityType>(entity: E, name: string | number | symbol, value: number): void; stop(): void; setModule(module: string): void; urltracking(enabled: boolean): void; silent(enabled: boolean): void; open(): void; close(): void; } declare type PushArgs = { [P in keyof Methods]: [P, ...Parameters<Methods[P]>]; }[keyof Methods]; interface ChurnZero { push<Args extends PushArgs>(args: Args): void; verify(): void; debug(): void; } export interface ChurnZeroAPI { ChurnZero: ChurnZero; } declare type ExposedMethods = Omit<Methods, 'setAppKey' | 'setContact' | 'stop'>; export interface Config { url: string; apiKey: string; accountId: string; contactId: string; } export declare class Client implements ExposedMethods { private methods; private static embedScript; private constructor(); static connect(config: Config): Promise<Client>; trackEvent(...args: Parameters<Methods['trackEvent']>): void; setAttribute<E extends EntityType>(entity: EntityType, attributes: Partial<StandardEntityAttributes[E]>): void; incrementAttribute<E extends EntityType>(entity: E, name: keyof StandardEntityAttributes[E], value: number): void; setModule(...args: Parameters<Methods['setModule']>): void; urltracking(...args: Parameters<Methods['urltracking']>): void; silent(...args: Parameters<Methods['silent']>): void; open(...args: Parameters<Methods['open']>): void; close(...args: Parameters<Methods['close']>): void; } export {};