diff --git a/types/mixpanel-browser/index.d.ts b/types/mixpanel-browser/index.d.ts index 89f7619023..9877637d5b 100644 --- a/types/mixpanel-browser/index.d.ts +++ b/types/mixpanel-browser/index.d.ts @@ -3,6 +3,7 @@ // Definitions by: Carlos López // Ricardo Rodrigues // Kristian Randall +// Dan Wilt // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.2 @@ -12,86 +13,92 @@ export type PushItem = Array; export type Query = string | Element | Element[]; -export interface Dict {[key: string]: any; } - -export interface RequestOptions { - transport?: "xhr" | "sendBeacon"; +export interface Dict { + [key: string]: any; } -export interface XhrHeadersDef {[header: string]: any; } +export interface RequestOptions { + transport?: 'xhr' | 'sendBeacon'; +} + +export interface XhrHeadersDef { + [header: string]: any; +} export interface HasOptedInOutOptions { - persistence_type: Persistence; - cookie_prefix: string; + persistence_type: Persistence; + cookie_prefix: string; } export interface ClearOptOutInOutOptions extends HasOptedInOutOptions { - cookie_expiration: number; - cross_subdomain_cookie: boolean; - secure_cookie: boolean; + cookie_expiration: number; + cross_subdomain_cookie: boolean; + secure_cookie: boolean; } export interface InTrackingOptions extends ClearOptOutInOutOptions { - track: () => void; - track_event_name: string; - track_event_properties: Dict; + track: () => void; + track_event_name: string; + track_event_properties: Dict; } export interface OutTrackingOptions extends ClearOptOutInOutOptions { - delete_user: boolean; + delete_user: boolean; } export interface Config { - api_host: string; - api_method: string; - api_transport: string; - app_host: string; - autotrack: boolean; - cdn: string; - cookie_domain: string; - cross_site_cookie: boolean; - cross_subdomain_cookie: boolean; - persistence: Persistence; - persistence_name: string; - cookie_name: string; - loaded: (mixpanel: Mixpanel) => void; - store_google: boolean; - save_referrer: boolean; - test: boolean; - verbose: boolean; - img: boolean; - track_pageview: boolean; - debug: boolean; - track_links_timeout: number; - cookie_expiration: number; - upgrade: boolean; - disable_persistence: boolean; - disable_cookie: boolean; - disable_notifications: boolean; - secure_cookie: boolean; - ip: boolean; - property_blacklist: string[]; - xhr_headers: XhrHeadersDef; - opt_out_tracking_by_default: boolean; - opt_out_persistence_by_default: boolean; - opt_out_tracking_persistence_type: Persistence; - opt_out_tracking_cookie_prefix: string; - inapp_protocol: string; - inapp_link_new_window: boolean; - ignore_dnt: boolean; - batch_requests: boolean; - batch_size: number; - batch_flush_interval_ms: number; - batch_request_timeout_ms: number; + api_host: string; + api_method: string; + api_transport: string; + app_host: string; + autotrack: boolean; + cdn: string; + cookie_domain: string; + cross_site_cookie: boolean; + cross_subdomain_cookie: boolean; + persistence: Persistence; + persistence_name: string; + cookie_name: string; + loaded: (mixpanel: Mixpanel) => void; + store_google: boolean; + save_referrer: boolean; + test: boolean; + verbose: boolean; + img: boolean; + track_pageview: boolean; + debug: boolean; + track_links_timeout: number; + cookie_expiration: number; + upgrade: boolean; + disable_persistence: boolean; + disable_cookie: boolean; + disable_notifications: boolean; + secure_cookie: boolean; + ip: boolean; + property_blacklist: string[]; + xhr_headers: XhrHeadersDef; + opt_out_tracking_by_default: boolean; + opt_out_persistence_by_default: boolean; + opt_out_tracking_persistence_type: Persistence; + opt_out_tracking_cookie_prefix: string; + inapp_protocol: string; + inapp_link_new_window: boolean; + ignore_dnt: boolean; + batch_requests: boolean; + batch_size: number; + batch_flush_interval_ms: number; + batch_request_timeout_ms: number; } -export type VerboseResponse = { - status: 1; - error: null; -} | { - status: 0; - error: string; -}; +export type VerboseResponse = + | { + status: 1; + error: null; + } + | { + status: 0; + error: string; + }; export type NormalResponse = 1 | 0; @@ -100,55 +107,83 @@ export type Response = VerboseResponse | NormalResponse; export type Callback = (response: Response) => void; export interface People { - set(prop: string, to: any, callback?: Callback): void; - set(prop: Dict, callback?: Callback): void; - set_once(prop: string, to: any, callback?: Callback): void; - set_once(prop: Dict, callback?: Callback): void; - unset(prop: string[] | string, callback?: Callback): void; - increment(prop: string | Dict, callback?: Callback): void; - increment(prop: string, by: number, callback?: Callback): void; - remove(prop: string, value: any, callback?: Callback): void; - remove(prop: Dict, callback?: Callback): void; - append(prop: string, value: any, callback?: Callback): void; - append(prop: Dict, callback?: Callback): void; - union(prop: string, value: any, callback?: Callback): void; - union(prop: Dict, callback?: Callback): void; - track_charge(amount: number, propertiesOrCallback?: Dict | Callback, callback?: Callback): void; - clear_charges(callback?: Callback): void; - delete_user(): void; + set(prop: string, to: any, callback?: Callback): void; + set(prop: Dict, callback?: Callback): void; + set_once(prop: string, to: any, callback?: Callback): void; + set_once(prop: Dict, callback?: Callback): void; + unset(prop: string[] | string, callback?: Callback): void; + increment(prop: string | Dict, callback?: Callback): void; + increment(prop: string, by: number, callback?: Callback): void; + remove(prop: string, value: any, callback?: Callback): void; + remove(prop: Dict, callback?: Callback): void; + append(prop: string, value: any, callback?: Callback): void; + append(prop: Dict, callback?: Callback): void; + union(prop: string, value: any, callback?: Callback): void; + union(prop: Dict, callback?: Callback): void; + track_charge(amount: number, propertiesOrCallback?: Dict | Callback, callback?: Callback): void; + clear_charges(callback?: Callback): void; + delete_user(): void; +} + +export interface Group { + remove(list_name: string, value: string, callback?: Callback): Group; + set( + prop: Prop, + to?: Prop extends string ? string : undefined, + callback?: Callback, + ): Group; + setOnce( + prop: Prop, + to?: Prop extends string ? string : undefined, + callback?: Callback, + ): Group; + union(list_name: string, values: Array, callback?: Callback): Group; + unset(prop: string, callback?: Callback): void; } export interface Mixpanel { - alias(alias: string, original?: string): void; - clear_opt_in_out_tracking(options?: Partial): void; - disable(events?: string[]): void; - get_config(prop_name?: string): any; - get_distinct_id(): any; - get_property(property_name: string): any; - has_opted_in_tracking(options?: Partial): boolean; - has_opted_out_tracking(options?: Partial): boolean; - identify(unique_id?: string): any; - init(token: string, config?: Partial, name?: string): Mixpanel; - opt_in_tracking(options?: Partial): void; - opt_out_tracking(options?: Partial): void; - push(item: PushItem): void; - register(props: Dict, days?: number): void; - register_once(props: Dict, default_value?: any, days?: number): void; - reset(): void; - set_config(config: Partial): void; - time_event(event_name: string): void; - track(event_name: string, properties?: Dict, optionsOrCallback?: RequestOptions | Callback, callback?: Callback): void; - track_forms(query: Query, event_name: string, properties?: Dict | (() => void)): void; - track_links(query: Query, event_name: string, properties?: Dict | (() => void)): void; - unregister(property: string): void; - people: People; + add_group(group_key: string, group_id: string, callback?: Callback): void; + alias(alias: string, original?: string): void; + clear_opt_in_out_tracking(options?: Partial): void; + disable(events?: string[]): void; + get_config(prop_name?: string): any; + get_distinct_id(): any; + get_group(group_key: string, group_id: string): Group; + get_property(property_name: string): any; + has_opted_in_tracking(options?: Partial): boolean; + has_opted_out_tracking(options?: Partial): boolean; + identify(unique_id?: string): any; + init(token: string, config?: Partial, name?: string): Mixpanel; + opt_in_tracking(options?: Partial): void; + opt_out_tracking(options?: Partial): void; + push(item: PushItem): void; + register(props: Dict, days?: number): void; + register_once(props: Dict, default_value?: any, days?: number): void; + remove_group(group_key: string, group_ids: string | string[] | number | number[], callback?: Callback): void; + reset(): void; + set_config(config: Partial): void; + set_group(group_key: string, group_ids: string | string[] | number | number[], callback?: Callback): void; + time_event(event_name: string): void; + track( + event_name: string, + properties?: Dict, + optionsOrCallback?: RequestOptions | Callback, + callback?: Callback, + ): void; + track_forms(query: Query, event_name: string, properties?: Dict | (() => void)): void; + track_links(query: Query, event_name: string, properties?: Dict | (() => void)): void; + track_with_groups(event_name: string, properties: Dict, groups: Dict, callback?: Callback): void; + unregister(property: string): void; + people: People; } +export function add_group(group_key: string, group_id: string, callback?: Callback): void; export function alias(alias: string, original?: string): void; export function clear_opt_in_out_tracking(options?: Partial): void; export function disable(events?: string[]): void; export function get_config(prop_name?: string): any; export function get_distinct_id(): any; +export function get_group(group_key: string, group_id: string): Group; export function get_property(property_name: string): any; export function has_opted_in_tracking(options?: Partial): boolean; export function has_opted_out_tracking(options?: Partial): boolean; @@ -159,12 +194,28 @@ export function opt_out_tracking(options?: Partial): void; export function push(item: PushItem): void; export function register(props: Dict, days?: number): void; export function register_once(props: Dict, default_value?: any, days?: number): void; +export function remove_group( + group_key: string, + group_ids: string | string[] | number | number[], + callback?: Callback, +): void; export function reset(): void; export function set_config(config: Partial): void; +export function set_group( + group_key: string, + group_ids: string | string[] | number | number[], + callback?: Callback, +): void; export function time_event(event_name: string): void; -export function track(event_name: string, properties?: Dict, optionsOrCallback?: RequestOptions | Callback, callback?: Callback): void; +export function track( + event_name: string, + properties?: Dict, + optionsOrCallback?: RequestOptions | Callback, + callback?: Callback, +): void; export function track_forms(query: Query, event_name: string, properties?: Dict | (() => void)): void; export function track_links(query: Query, event_name: string, properties?: Dict | (() => void)): void; +export function track_with_groups(event_name: string, properties: Dict, groups: Dict, callback?: Callback): void; export function unregister(property: string): void; export const people: People; diff --git a/types/mixpanel-browser/mixpanel-browser-tests.ts b/types/mixpanel-browser/mixpanel-browser-tests.ts index 10983ca625..14b6019446 100644 --- a/types/mixpanel-browser/mixpanel-browser-tests.ts +++ b/types/mixpanel-browser/mixpanel-browser-tests.ts @@ -4,64 +4,68 @@ const lib = mixpanel.init('new token', { secure_cookie: true }, 'library_name'); lib.track('event name'); mixpanel.push(['register', { a: 'b' }]); mixpanel.disable(); -mixpanel.track('Registered', {Gender: 'Male', Age: 21}); +mixpanel.track('Registered', { Gender: 'Male', Age: 21 }); mixpanel.track_links('#nav', 'Clicked Nav Link'); mixpanel.track_forms('#register', 'Created Account'); mixpanel.time_event('Registered'); -mixpanel.track('Registered', {Gender: 'Male', Age: 21}); -mixpanel.track('Left page', {duration_seconds: 35}, {transport: 'sendBeacon'}); -mixpanel.track('Left page', { duration_seconds: 35 }, () => { /* callback function */ }); -mixpanel.track('Left page', { duration_seconds: 35 }, { transport: 'sendBeacon' }, () => { /* callback function */ }); -mixpanel.track('Left page', { duration_seconds: 35 }, (response) => { +mixpanel.track('Registered', { Gender: 'Male', Age: 21 }); +mixpanel.track('Left page', { duration_seconds: 35 }, { transport: 'sendBeacon' }); +mixpanel.track('Left page', { duration_seconds: 35 }, () => { + /* callback function */ +}); +mixpanel.track('Left page', { duration_seconds: 35 }, { transport: 'sendBeacon' }, () => { + /* callback function */ +}); +mixpanel.track('Left page', { duration_seconds: 35 }, response => { if (response === 1) { } else if (response === 0) { } else if (response.status === 1 && response.error === null) { } else if (response.status === 0 && response.error.includes('bad')) { } }); -mixpanel.register({Gender: 'Female'}); +mixpanel.register({ Gender: 'Female' }); mixpanel.register({ - Email: 'jdoe@example.com', - 'Account Type': 'Free' + Email: 'jdoe@example.com', + 'Account Type': 'Free', }); mixpanel.register_once({ - 'First Login Date': new Date().toISOString() + 'First Login Date': new Date().toISOString(), }); mixpanel.init('YOUR PROJECT TOKEN', { - loaded: (mixpanel) => { - const distinct_id = mixpanel.get_distinct_id(); - } + loaded: mixpanel => { + const distinct_id = mixpanel.get_distinct_id(); + }, }); mixpanel.alias('new_id', 'existing_id'); mixpanel.alias('newer_id', 'new_id'); mixpanel.init('YOUR PROJECT TOKEN', { - loaded: (mixpanel) => { - const user_id = mixpanel.get_property('user_id'); - } + loaded: mixpanel => { + const user_id = mixpanel.get_property('user_id'); + }, }); mixpanel.opt_in_tracking(); mixpanel.opt_in_tracking({ track_event_name: 'User opted in', track_event_properties: { - Email: 'jdoe@example.com' + Email: 'jdoe@example.com', }, cookie_expiration: 30, - secure_cookie: true + secure_cookie: true, }); mixpanel.opt_out_tracking(); mixpanel.opt_out_tracking({ cookie_expiration: 30, - secure_cookie: true + secure_cookie: true, }); const has_opted_in = mixpanel.has_opted_in_tracking(); const has_opted_out = mixpanel.has_opted_out_tracking(); mixpanel.clear_opt_in_out_tracking(); mixpanel.clear_opt_in_out_tracking({ cookie_expiration: 30, - secure_cookie: true + secure_cookie: true, }); mixpanel.people.set('gender', 'm'); -mixpanel.people.set('gender', 'm', (response) => { +mixpanel.people.set('gender', 'm', response => { if (response === 1) { } else if (response === 0) { } else if (response.status === 1 && response.error === null) { @@ -71,22 +75,25 @@ mixpanel.people.set('gender', 'm', (response) => { mixpanel.people.set({ Company: 'Acme', Plan: 'Premium', - 'Upgrade date': new Date() -}); -mixpanel.people.set({ - Company: 'Acme', - Plan: 'Premium', - 'Upgrade date': new Date() -}, (response) => { - if (response === 1) { - } else if (response === 0) { - } else if (response.status === 1 && response.error === null) { - } else if (response.status === 0 && response.error.includes('bad')) { - } + 'Upgrade date': new Date(), }); +mixpanel.people.set( + { + Company: 'Acme', + Plan: 'Premium', + 'Upgrade date': new Date(), + }, + response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } + }, +); mixpanel.people.set_once('First Login Date', new Date()); -mixpanel.people.set_once('First Login Date', new Date(), (response) => { +mixpanel.people.set_once('First Login Date', new Date(), response => { if (response === 1) { } else if (response === 0) { } else if (response.status === 1 && response.error === null) { @@ -95,22 +102,25 @@ mixpanel.people.set_once('First Login Date', new Date(), (response) => { }); mixpanel.people.set_once({ 'First Login Date': new Date(), - 'Starting Plan': 'Premium' -}); -mixpanel.people.set_once({ - 'First Login Date': new Date(), - 'Starting Plan': 'Premium' -}, (response) => { - if (response === 1) { - } else if (response === 0) { - } else if (response.status === 1 && response.error === null) { - } else if (response.status === 0 && response.error.includes('bad')) { - } + 'Starting Plan': 'Premium', }); +mixpanel.people.set_once( + { + 'First Login Date': new Date(), + 'Starting Plan': 'Premium', + }, + response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } + }, +); mixpanel.people.unset('gender'); mixpanel.people.unset(['gender', 'Company']); -mixpanel.people.unset(['gender', 'Company'], (response) => { +mixpanel.people.unset(['gender', 'Company'], response => { if (response === 1) { } else if (response === 0) { } else if (response.status === 1 && response.error === null) { @@ -119,7 +129,7 @@ mixpanel.people.unset(['gender', 'Company'], (response) => { }); mixpanel.people.increment('page_views', 1); -mixpanel.people.increment('page_views', 1, (response) => { +mixpanel.people.increment('page_views', 1, response => { if (response === 1) { } else if (response === 0) { } else if (response.status === 1 && response.error === null) { @@ -127,7 +137,7 @@ mixpanel.people.increment('page_views', 1, (response) => { } }); mixpanel.people.increment('page_views'); -mixpanel.people.increment('page_views', (response) => { +mixpanel.people.increment('page_views', response => { if (response === 1) { } else if (response === 0) { } else if (response.status === 1 && response.error === null) { @@ -137,21 +147,24 @@ mixpanel.people.increment('page_views', (response) => { mixpanel.people.increment('credits_left', -1); mixpanel.people.increment({ counter1: 1, - counter2: 6 -}); -mixpanel.people.increment({ - counter1: 1, - counter2: 6 -}, (response) => { - if (response === 1) { - } else if (response === 0) { - } else if (response.status === 1 && response.error === null) { - } else if (response.status === 0 && response.error.includes('bad')) { - } + counter2: 6, }); +mixpanel.people.increment( + { + counter1: 1, + counter2: 6, + }, + response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } + }, +); mixpanel.people.remove('School', 'UCB'); -mixpanel.people.remove('School', 'UCB', (response) => { +mixpanel.people.remove('School', 'UCB', response => { if (response === 1) { } else if (response === 0) { } else if (response.status === 1 && response.error === null) { @@ -161,18 +174,21 @@ mixpanel.people.remove('School', 'UCB', (response) => { mixpanel.people.remove({ School: 'UCB', }); -mixpanel.people.remove({ - School: 'UCB', -}, (response) => { - if (response === 1) { - } else if (response === 0) { - } else if (response.status === 1 && response.error === null) { - } else if (response.status === 0 && response.error.includes('bad')) { - } -}); +mixpanel.people.remove( + { + School: 'UCB', + }, + response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } + }, +); mixpanel.people.append('pages_visited', 'homepage'); -mixpanel.people.append('pages_visited', 'homepage', (response) => { +mixpanel.people.append('pages_visited', 'homepage', response => { if (response === 1) { } else if (response === 0) { } else if (response.status === 1 && response.error === null) { @@ -181,21 +197,24 @@ mixpanel.people.append('pages_visited', 'homepage', (response) => { }); mixpanel.people.append({ list1: 'bob', - list2: 123 -}); -mixpanel.people.append({ - list1: 'bob', - list2: 123 -}, (response) => { - if (response === 1) { - } else if (response === 0) { - } else if (response.status === 1 && response.error === null) { - } else if (response.status === 0 && response.error.includes('bad')) { - } + list2: 123, }); +mixpanel.people.append( + { + list1: 'bob', + list2: 123, + }, + response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } + }, +); mixpanel.people.union('pages_visited', 'homepage'); -mixpanel.people.union('pages_visited', 'homepage', (response) => { +mixpanel.people.union('pages_visited', 'homepage', response => { if (response === 1) { } else if (response === 0) { } else if (response.status === 1 && response.error === null) { @@ -204,45 +223,52 @@ mixpanel.people.union('pages_visited', 'homepage', (response) => { }); mixpanel.people.union({ list1: 'bob', - list2: 123 + list2: 123, }); +mixpanel.people.union( + { + list1: 'bob', + list2: 123, + }, + response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } + }, +); mixpanel.people.union({ - list1: 'bob', - list2: 123 -}, (response) => { - if (response === 1) { - } else if (response === 0) { - } else if (response.status === 1 && response.error === null) { - } else if (response.status === 0 && response.error.includes('bad')) { - } -}); -mixpanel.people.union({ - list1: ['bob', 'billy'] + list1: ['bob', 'billy'], }); mixpanel.people.track_charge(50); -mixpanel.people.track_charge(50, (response) => { +mixpanel.people.track_charge(50, response => { if (response === 1) { } else if (response === 0) { } else if (response.status === 1 && response.error === null) { } else if (response.status === 0 && response.error.includes('bad')) { } }); -mixpanel.people.track_charge(30.50, { - $time: new Date('jan 1 2012') -}); -mixpanel.people.track_charge(30.50, { - $time: new Date('jan 1 2012') -}, (response) => { - if (response === 1) { - } else if (response === 0) { - } else if (response.status === 1 && response.error === null) { - } else if (response.status === 0 && response.error.includes('bad')) { - } +mixpanel.people.track_charge(30.5, { + $time: new Date('jan 1 2012'), }); +mixpanel.people.track_charge( + 30.5, + { + $time: new Date('jan 1 2012'), + }, + response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } + }, +); mixpanel.people.clear_charges(); -mixpanel.people.clear_charges((response) => { +mixpanel.people.clear_charges(response => { if (response === 1) { } else if (response === 0) { } else if (response.status === 1 && response.error === null) { @@ -253,3 +279,62 @@ mixpanel.people.delete_user(); mixpanel.init('YOUR PROJECT TOKEN', { ignore_dnt: true, }); +mixpanel.add_group('test', 'id'); +mixpanel.get_group('test', 'id'); +mixpanel.remove_group('test', 'id'); +mixpanel.set_group('test', ['some-value'], response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } +}); +mixpanel.get_group('test', 'id').set('prop', 'value', response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } +}); +mixpanel.get_group('test', 'id').set( + { + name: 'Name', + }, + undefined, + response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } + }, +); +mixpanel.get_group('test', 'id').setOnce('prop', 'value', response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } +}); +mixpanel.get_group('test', 'id').remove('prop', 'value', response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } +}); +mixpanel.get_group('test', 'id').union('prop', ['value'], response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } +}); +mixpanel.get_group('test', 'id').unset('prop'); +mixpanel.track_with_groups('event', { name: 'Name' }, { group: ['value'] }, response => { + if (response === 1) { + } else if (response === 0) { + } else if (response.status === 1 && response.error === null) { + } else if (response.status === 0 && response.error.includes('bad')) { + } +});