@revenuegrid/churnzerojs
Version:
Typescript wrapper for ChurnZero JScript API
76 lines (75 loc) • 2.88 kB
TypeScript
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 {};