@vrplatform/log 2.0.56 → 2.0.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,10 +17,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.useTracking = void 0;
18
18
  const graphql_1 = require("@finalytic/graphql");
19
19
  const intercom_client_1 = require("intercom-client");
20
- // import mixpanel from 'mixpanel-browser';
21
20
  const log_1 = require("../log");
22
21
  const utils_1 = require("../utils");
23
22
  const convertValuesToString_1 = require("../utils/convertValuesToString");
23
+ const mixpanel_1 = require("./mixpanel");
24
24
  __exportStar(require("./types"), exports);
25
25
  __exportStar(require("intercom-client"), exports);
26
26
  __exportStar(require("../utils"), exports);
@@ -34,17 +34,12 @@ const useTracking = ({ dataset, env, name }, isDev) => {
34
34
  const intercom = env.INTERCOM_TOKEN
35
35
  ? new intercom_client_1.Intercom({ accessToken: env.INTERCOM_TOKEN })
36
36
  : undefined;
37
- // if (env.MIXPANEL_TOKEN)
38
- // mixpanel.init(env.MIXPANEL_TOKEN, {
39
- // debug: true,
40
- // track_pageview: true,
41
- // persistence: 'localStorage',
42
- // });
37
+ let mixpanel;
38
+ if (env.MIXPANEL_TOKEN)
39
+ mixpanel = new mixpanel_1.MixpanelClient(env.MIXPANEL_TOKEN);
43
40
  return {
44
41
  // General
45
- track: async ({ userId, anonymousId, groupId, event, packageName, properties,
46
- // timestamp = new Date(),
47
- }) => {
42
+ track: async ({ userId, anonymousId, groupId, event, packageName, properties, }) => {
48
43
  if (isDev || (0, utils_1.isTest)(userId || anonymousId || '', groupId))
49
44
  return;
50
45
  await client?.mutate((q) => q.insert_tracking_event_one({
@@ -56,14 +51,14 @@ const useTracking = ({ dataset, env, name }, isDev) => {
56
51
  packageName,
57
52
  },
58
53
  }).id);
59
- // // track mixpanel event
60
- // if (env.MIXPANEL_TOKEN)
61
- // mixpanel.track(event, {
62
- // tenant: [groupId], // assign to group
63
- // tenantId: groupId,
64
- // userId: userId,
65
- // ...properties,
66
- // });
54
+ // track mixpanel event
55
+ if (mixpanel)
56
+ mixpanel.track(event, {
57
+ tenant: [groupId], // assign to group
58
+ tenantId: groupId,
59
+ userId: userId,
60
+ ...properties,
61
+ });
67
62
  if (userId) {
68
63
  try {
69
64
  await intercom?.dataEvents.create({
@@ -83,19 +78,34 @@ const useTracking = ({ dataset, env, name }, isDev) => {
83
78
  identify: async ({ traits, userId }) => {
84
79
  if (isDev || (0, utils_1.isTest)(userId))
85
80
  return;
86
- const name = traits?.name ||
81
+ const _name = traits?.name ||
87
82
  (traits?.firstName
88
83
  ? `${traits.firstName} ${traits.lastName}`
89
84
  : traits?.lastName);
90
- // // upsert mixpanel user
91
- // if (env.MIXPANEL_TOKEN) {
92
- // mixpanel.identify(userId);
93
- // mixpanel.people.set({
94
- // $name: name,
95
- // $email: traits?.email,
96
- // ...traits,
97
- // });
98
- // }
85
+ const _createdAt = traits?.createdAt
86
+ ? Math.floor(new Date(traits.createdAt).getTime() / 1000)
87
+ : undefined;
88
+ const _lastSeenAt = traits?.lastSeenAt
89
+ ? Math.floor(new Date(traits.lastSeenAt).getTime() / 1000)
90
+ : traits?.lastSeenAt !== null
91
+ ? Math.floor(new Date().getTime() / 1000)
92
+ : undefined;
93
+ // upsert mixpanel user
94
+ if (mixpanel) {
95
+ mixpanel.identify(userId);
96
+ const { firstName, lastName, name, email, avatar, lastSeenAt, createdAt, ...rest } = traits || {};
97
+ mixpanel.people.set({
98
+ $distinct_id: userId,
99
+ $name: _name,
100
+ $first_name: traits?.firstName,
101
+ $last_name: traits?.lastName,
102
+ $email: traits?.email,
103
+ $avatar: traits?.avatar,
104
+ $last_seen: _lastSeenAt,
105
+ $created: _createdAt,
106
+ ...rest,
107
+ });
108
+ }
99
109
  // upsert intercom user
100
110
  try {
101
111
  const data = {
@@ -103,14 +113,8 @@ const useTracking = ({ dataset, env, name }, isDev) => {
103
113
  email: traits?.email,
104
114
  name,
105
115
  avatar: traits?.avatar,
106
- signed_up_at: traits?.createdAt
107
- ? Math.floor(new Date(traits.createdAt).getTime() / 1000)
108
- : undefined,
109
- last_seen_at: traits?.lastSeenAt
110
- ? Math.floor(new Date(traits.lastSeenAt).getTime() / 1000)
111
- : traits?.lastSeenAt !== null
112
- ? Math.floor(new Date().getTime() / 1000)
113
- : undefined,
116
+ signed_up_at: _createdAt,
117
+ last_seen_at: _lastSeenAt,
114
118
  custom_attributes: { userType: traits?.role },
115
119
  };
116
120
  const intercomUser = (await intercom?.contacts.search({
@@ -135,17 +139,44 @@ const useTracking = ({ dataset, env, name }, isDev) => {
135
139
  // add teamId to traits
136
140
  if (!traits?.teamId)
137
141
  traits.teamId = groupId;
138
- // // upsert mixpanel group
139
- // if (env.MIXPANEL_TOKEN) mixpanel.set_group('tenant', groupId);
142
+ const cid = traits?.billingCustomerId || traits?.hyperlineCustomerId;
143
+ const partner = traits?.partner || traits?.accountingPartner;
144
+ const billingPartner = traits?.billingPartner || traits?.partner || traits?.accountingPartner;
145
+ if (billingPartner === '0b6a7bd6-56cc-46b5-b2ab-1bd7d1e994fa')
146
+ return; // dismiss Demo and Test Console
147
+ // upsert mixpanel group
148
+ if (mixpanel)
149
+ mixpanel.group.set('tenant', groupId, {
150
+ $distinct_id: groupId,
151
+ $name: traits?.name,
152
+ $avatar: traits.avatar,
153
+ $created: traits?.createdAt
154
+ ? new Date(traits.createdAt).getTime() / 1000
155
+ : undefined,
156
+ plan: traits?.plan,
157
+ mrr: traits?.mrr,
158
+ type: traits?.type,
159
+ status: traits?.status,
160
+ pms: traits?.pms,
161
+ accountingSoftware: traits?.accountingSoftware,
162
+ activeListingCount: traits?.activeListings,
163
+ paymentMethodType: traits?.paymentMethodType,
164
+ partnerName: traits?.partner || traits?.accountingPartner,
165
+ partnerId: traits?.partnerId || traits?.accountingPartnerId,
166
+ billingPortalUrl: cid
167
+ ? `https://billing.vrplatform.app/portal/${cid}`
168
+ : undefined,
169
+ billingSubscriptionStatus: traits?.billingSubscriptionStatus,
170
+ billingPartnerName: billingPartner,
171
+ billingCustomerId: cid,
172
+ trialUntil: traits?.trialUntil,
173
+ isOnboarding: traits?.isOnboarding,
174
+ isTest: billingPartner
175
+ ? billingPartner === 'Demo and Test Console'
176
+ : undefined,
177
+ });
140
178
  let intercomCompany;
141
179
  try {
142
- const cid = traits?.billingCustomerId || traits?.hyperlineCustomerId;
143
- const partner = traits?.partner || traits?.accountingPartner;
144
- const billingPartner = traits?.billingPartner ||
145
- traits?.partner ||
146
- traits?.accountingPartner;
147
- if (billingPartner === '0b6a7bd6-56cc-46b5-b2ab-1bd7d1e994fa')
148
- return; // dismis Demo and Test Console
149
180
  const custom_attributes = { teamId: groupId };
150
181
  if (traits?.name)
151
182
  custom_attributes.team = traits?.name;
@@ -207,7 +238,7 @@ const useTracking = ({ dataset, env, name }, isDev) => {
207
238
  },
208
239
  shutdown: async () => {
209
240
  log?.flush();
210
- // mixpanel.reset();
241
+ mixpanel?.reset();
211
242
  },
212
243
  // export dependencies
213
244
  intercom,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"src/","sources":["tracking/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"src/","sources":["tracking/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { TrackingEventProps } from './types';
2
+ export declare class MixpanelClient {
3
+ private token;
4
+ private baseUrl;
5
+ private distinctId?;
6
+ constructor(token: string);
7
+ track<T extends keyof TrackingEventProps>(event: T, properties: TrackingEventProps[T]): Promise<true>;
8
+ identify(distinctId: string): void;
9
+ people: {
10
+ set: (properties: {
11
+ $distinct_id?: string;
12
+ $name?: string;
13
+ $first_name?: string;
14
+ $last_name?: string;
15
+ $email?: string;
16
+ $avatar?: string;
17
+ $last_seen?: number;
18
+ $created?: number;
19
+ [key: string]: any;
20
+ }) => Promise<true>;
21
+ };
22
+ group: {
23
+ set: (groupKey: string, groupId: string, properties: {
24
+ $distinct_id?: string;
25
+ $name?: string;
26
+ $avatar?: string;
27
+ $created?: number;
28
+ [key: string]: any;
29
+ }) => Promise<true>;
30
+ };
31
+ reset(): void;
32
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MixpanelClient = void 0;
7
+ const node_fetch_1 = __importDefault(require("node-fetch"));
8
+ class MixpanelClient {
9
+ constructor(token) {
10
+ this.people = {
11
+ set: async (properties) => {
12
+ const data = {
13
+ $set: properties,
14
+ $token: this.token,
15
+ $distinct_id: this.distinctId,
16
+ };
17
+ const response = await (0, node_fetch_1.default)(`${this.baseUrl}/engage`, {
18
+ method: 'POST',
19
+ headers: { accept: 'text/plain', 'Content-Type': 'application/json' },
20
+ body: JSON.stringify([data]),
21
+ });
22
+ if (!response.ok)
23
+ throw new Error('Failed to set people properties');
24
+ return response.ok;
25
+ },
26
+ };
27
+ this.group = {
28
+ set: async (groupKey, groupId, properties) => {
29
+ const data = {
30
+ $group_key: groupKey,
31
+ $group_id: groupId,
32
+ $set: properties,
33
+ $token: this.token,
34
+ $distinct_id: this.distinctId,
35
+ };
36
+ const response = await (0, node_fetch_1.default)(`${this.baseUrl}/groups#group-set`, {
37
+ method: 'POST',
38
+ headers: { accept: 'text/plain', 'Content-Type': 'application/json' },
39
+ body: JSON.stringify([data]),
40
+ });
41
+ if (!response.ok)
42
+ throw new Error('Failed to set group properties');
43
+ return response.ok;
44
+ },
45
+ };
46
+ this.token = token;
47
+ this.baseUrl = 'https://api-eu.mixpanel.com';
48
+ }
49
+ async track(event, properties) {
50
+ const data = {
51
+ event: event,
52
+ properties: {
53
+ ...properties,
54
+ token: this.token,
55
+ distinct_id: this.distinctId,
56
+ },
57
+ };
58
+ const response = await (0, node_fetch_1.default)(`${this.baseUrl}/track`, {
59
+ method: 'POST',
60
+ headers: { accept: 'text/plain', 'Content-Type': 'application/json' },
61
+ body: JSON.stringify([data]),
62
+ });
63
+ if (!response.ok)
64
+ throw new Error('Failed to track event');
65
+ return response.ok;
66
+ }
67
+ identify(distinctId) {
68
+ this.distinctId = distinctId;
69
+ }
70
+ reset() {
71
+ this.distinctId = undefined;
72
+ }
73
+ }
74
+ exports.MixpanelClient = MixpanelClient;
75
+ //# sourceMappingURL=mixpanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixpanel.js","sourceRoot":"src/","sources":["tracking/mixpanel.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA+B;AAG/B,MAAa,cAAc;IAKzB,YAAY,KAAa;QAiCzB,WAAM,GAAG;YACP,GAAG,EAAE,KAAK,EAAE,UAUX,EAAE,EAAE;gBACH,MAAM,IAAI,GAAG;oBACX,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,IAAI,CAAC,KAAK;oBAClB,YAAY,EAAE,IAAI,CAAC,UAAU;iBAC9B,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,GAAG,IAAI,CAAC,OAAO,SAAS,EAAE;oBACrD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBACrE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;iBAC7B,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBAErE,OAAO,QAAQ,CAAC,EAAE,CAAC;YACrB,CAAC;SACF,CAAC;QAEF,UAAK,GAAG;YACN,GAAG,EAAE,KAAK,EACR,QAAgB,EAChB,OAAe,EACf,UAMC,EACD,EAAE;gBACF,MAAM,IAAI,GAAG;oBACX,UAAU,EAAE,QAAQ;oBACpB,SAAS,EAAE,OAAO;oBAClB,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,IAAI,CAAC,KAAK;oBAClB,YAAY,EAAE,IAAI,CAAC,UAAU;iBAC9B,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;oBAC/D,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBACrE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;iBAC7B,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAEpE,OAAO,QAAQ,CAAC,EAAE,CAAC;YACrB,CAAC;SACF,CAAC;QA5FA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,6BAA6B,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,KAAK,CACT,KAAQ,EACR,UAAiC;QAEjC,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,UAAU;aAC7B;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,GAAG,IAAI,CAAC,OAAO,QAAQ,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE;YACrE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAE3D,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,UAAkB;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAgED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;CACF;AAvGD,wCAuGC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const mixpanel_1 = require("./mixpanel");
4
+ const mixpanel = new mixpanel_1.MixpanelClient('933a19cf6d01a51a06ccdd083083f2a9');
5
+ mixpanel.identify('user@example.com');
6
+ mixpanel.group.set('tenant', '123test', {
7
+ $name: '123 Test!',
8
+ isTest: true,
9
+ });
10
+ mixpanel.people.set({
11
+ $email: 'user@example.com',
12
+ $name: 'John Doe',
13
+ $created: new Date().getTime() / 1000,
14
+ isTest: true,
15
+ tenant: ['123test'],
16
+ });
17
+ mixpanel.track('test_event', {
18
+ success: true,
19
+ message: 'Super Test!',
20
+ tenant: ['123test'],
21
+ });
22
+ mixpanel.reset();
23
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"src/","sources":["tracking/test.ts"],"names":[],"mappings":";;AAAA,yCAA4C;AAE5C,MAAM,QAAQ,GAAG,IAAI,yBAAc,CAAC,kCAAkC,CAAC,CAAC;AAExE,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAEtC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE;IACtC,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AAEH,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;IAClB,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI;IACrC,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,SAAS,CAAC;CACpB,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE;IAC3B,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,CAAC,SAAS,CAAC;CACpB,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"root":["../../src/index.ts","../../src/log/baselog.ts","../../src/log/color.ts","../../src/log/common.ts","../../src/log/index.spec.ts","../../src/log/index.ts","../../src/log/type.ts","../../src/tracking/index.ts","../../src/tracking/types.ts","../../src/utils/convertkeystosnakecase.ts","../../src/utils/convertvaluestostring.ts","../../src/utils/index.ts","../../src/utils/istest.ts"],"version":"5.7.2"}
1
+ {"root":["../../src/index.ts","../../src/log/baselog.ts","../../src/log/color.ts","../../src/log/common.ts","../../src/log/index.spec.ts","../../src/log/index.ts","../../src/log/type.ts","../../src/tracking/index.ts","../../src/tracking/mixpanel.ts","../../src/tracking/test.ts","../../src/tracking/types.ts","../../src/utils/convertkeystosnakecase.ts","../../src/utils/convertvaluestostring.ts","../../src/utils/index.ts","../../src/utils/istest.ts"],"version":"5.7.2"}
@@ -1,9 +1,9 @@
1
1
  import { useHasuraClient } from '@finalytic/graphql';
2
2
  import { Intercom } from 'intercom-client';
3
- // import mixpanel from 'mixpanel-browser';
4
3
  import { useLog } from '../log';
5
4
  import { isTest } from '../utils';
6
5
  import { convertValuesToString } from '../utils/convertValuesToString';
6
+ import { MixpanelClient } from './mixpanel';
7
7
  export * from './types';
8
8
  export * from 'intercom-client';
9
9
  export * from '../utils';
@@ -17,17 +17,12 @@ export const useTracking = ({ dataset, env, name }, isDev) => {
17
17
  const intercom = env.INTERCOM_TOKEN
18
18
  ? new Intercom({ accessToken: env.INTERCOM_TOKEN })
19
19
  : undefined;
20
- // if (env.MIXPANEL_TOKEN)
21
- // mixpanel.init(env.MIXPANEL_TOKEN, {
22
- // debug: true,
23
- // track_pageview: true,
24
- // persistence: 'localStorage',
25
- // });
20
+ let mixpanel;
21
+ if (env.MIXPANEL_TOKEN)
22
+ mixpanel = new MixpanelClient(env.MIXPANEL_TOKEN);
26
23
  return {
27
24
  // General
28
- track: async ({ userId, anonymousId, groupId, event, packageName, properties,
29
- // timestamp = new Date(),
30
- }) => {
25
+ track: async ({ userId, anonymousId, groupId, event, packageName, properties, }) => {
31
26
  if (isDev || isTest(userId || anonymousId || '', groupId))
32
27
  return;
33
28
  await client?.mutate((q) => q.insert_tracking_event_one({
@@ -39,14 +34,14 @@ export const useTracking = ({ dataset, env, name }, isDev) => {
39
34
  packageName,
40
35
  },
41
36
  }).id);
42
- // // track mixpanel event
43
- // if (env.MIXPANEL_TOKEN)
44
- // mixpanel.track(event, {
45
- // tenant: [groupId], // assign to group
46
- // tenantId: groupId,
47
- // userId: userId,
48
- // ...properties,
49
- // });
37
+ // track mixpanel event
38
+ if (mixpanel)
39
+ mixpanel.track(event, {
40
+ tenant: [groupId], // assign to group
41
+ tenantId: groupId,
42
+ userId: userId,
43
+ ...properties,
44
+ });
50
45
  if (userId) {
51
46
  try {
52
47
  await intercom?.dataEvents.create({
@@ -66,19 +61,34 @@ export const useTracking = ({ dataset, env, name }, isDev) => {
66
61
  identify: async ({ traits, userId }) => {
67
62
  if (isDev || isTest(userId))
68
63
  return;
69
- const name = traits?.name ||
64
+ const _name = traits?.name ||
70
65
  (traits?.firstName
71
66
  ? `${traits.firstName} ${traits.lastName}`
72
67
  : traits?.lastName);
73
- // // upsert mixpanel user
74
- // if (env.MIXPANEL_TOKEN) {
75
- // mixpanel.identify(userId);
76
- // mixpanel.people.set({
77
- // $name: name,
78
- // $email: traits?.email,
79
- // ...traits,
80
- // });
81
- // }
68
+ const _createdAt = traits?.createdAt
69
+ ? Math.floor(new Date(traits.createdAt).getTime() / 1000)
70
+ : undefined;
71
+ const _lastSeenAt = traits?.lastSeenAt
72
+ ? Math.floor(new Date(traits.lastSeenAt).getTime() / 1000)
73
+ : traits?.lastSeenAt !== null
74
+ ? Math.floor(new Date().getTime() / 1000)
75
+ : undefined;
76
+ // upsert mixpanel user
77
+ if (mixpanel) {
78
+ mixpanel.identify(userId);
79
+ const { firstName, lastName, name, email, avatar, lastSeenAt, createdAt, ...rest } = traits || {};
80
+ mixpanel.people.set({
81
+ $distinct_id: userId,
82
+ $name: _name,
83
+ $first_name: traits?.firstName,
84
+ $last_name: traits?.lastName,
85
+ $email: traits?.email,
86
+ $avatar: traits?.avatar,
87
+ $last_seen: _lastSeenAt,
88
+ $created: _createdAt,
89
+ ...rest,
90
+ });
91
+ }
82
92
  // upsert intercom user
83
93
  try {
84
94
  const data = {
@@ -86,14 +96,8 @@ export const useTracking = ({ dataset, env, name }, isDev) => {
86
96
  email: traits?.email,
87
97
  name,
88
98
  avatar: traits?.avatar,
89
- signed_up_at: traits?.createdAt
90
- ? Math.floor(new Date(traits.createdAt).getTime() / 1000)
91
- : undefined,
92
- last_seen_at: traits?.lastSeenAt
93
- ? Math.floor(new Date(traits.lastSeenAt).getTime() / 1000)
94
- : traits?.lastSeenAt !== null
95
- ? Math.floor(new Date().getTime() / 1000)
96
- : undefined,
99
+ signed_up_at: _createdAt,
100
+ last_seen_at: _lastSeenAt,
97
101
  custom_attributes: { userType: traits?.role },
98
102
  };
99
103
  const intercomUser = (await intercom?.contacts.search({
@@ -118,17 +122,44 @@ export const useTracking = ({ dataset, env, name }, isDev) => {
118
122
  // add teamId to traits
119
123
  if (!traits?.teamId)
120
124
  traits.teamId = groupId;
121
- // // upsert mixpanel group
122
- // if (env.MIXPANEL_TOKEN) mixpanel.set_group('tenant', groupId);
125
+ const cid = traits?.billingCustomerId || traits?.hyperlineCustomerId;
126
+ const partner = traits?.partner || traits?.accountingPartner;
127
+ const billingPartner = traits?.billingPartner || traits?.partner || traits?.accountingPartner;
128
+ if (billingPartner === '0b6a7bd6-56cc-46b5-b2ab-1bd7d1e994fa')
129
+ return; // dismiss Demo and Test Console
130
+ // upsert mixpanel group
131
+ if (mixpanel)
132
+ mixpanel.group.set('tenant', groupId, {
133
+ $distinct_id: groupId,
134
+ $name: traits?.name,
135
+ $avatar: traits.avatar,
136
+ $created: traits?.createdAt
137
+ ? new Date(traits.createdAt).getTime() / 1000
138
+ : undefined,
139
+ plan: traits?.plan,
140
+ mrr: traits?.mrr,
141
+ type: traits?.type,
142
+ status: traits?.status,
143
+ pms: traits?.pms,
144
+ accountingSoftware: traits?.accountingSoftware,
145
+ activeListingCount: traits?.activeListings,
146
+ paymentMethodType: traits?.paymentMethodType,
147
+ partnerName: traits?.partner || traits?.accountingPartner,
148
+ partnerId: traits?.partnerId || traits?.accountingPartnerId,
149
+ billingPortalUrl: cid
150
+ ? `https://billing.vrplatform.app/portal/${cid}`
151
+ : undefined,
152
+ billingSubscriptionStatus: traits?.billingSubscriptionStatus,
153
+ billingPartnerName: billingPartner,
154
+ billingCustomerId: cid,
155
+ trialUntil: traits?.trialUntil,
156
+ isOnboarding: traits?.isOnboarding,
157
+ isTest: billingPartner
158
+ ? billingPartner === 'Demo and Test Console'
159
+ : undefined,
160
+ });
123
161
  let intercomCompany;
124
162
  try {
125
- const cid = traits?.billingCustomerId || traits?.hyperlineCustomerId;
126
- const partner = traits?.partner || traits?.accountingPartner;
127
- const billingPartner = traits?.billingPartner ||
128
- traits?.partner ||
129
- traits?.accountingPartner;
130
- if (billingPartner === '0b6a7bd6-56cc-46b5-b2ab-1bd7d1e994fa')
131
- return; // dismis Demo and Test Console
132
163
  const custom_attributes = { teamId: groupId };
133
164
  if (traits?.name)
134
165
  custom_attributes.team = traits?.name;
@@ -190,7 +221,7 @@ export const useTracking = ({ dataset, env, name }, isDev) => {
190
221
  },
191
222
  shutdown: async () => {
192
223
  log?.flush();
193
- // mixpanel.reset();
224
+ mixpanel?.reset();
194
225
  },
195
226
  // export dependencies
196
227
  intercom,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"src/","sources":["tracking/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"src/","sources":["tracking/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { TrackingEventProps } from './types';
2
+ export declare class MixpanelClient {
3
+ private token;
4
+ private baseUrl;
5
+ private distinctId?;
6
+ constructor(token: string);
7
+ track<T extends keyof TrackingEventProps>(event: T, properties: TrackingEventProps[T]): Promise<true>;
8
+ identify(distinctId: string): void;
9
+ people: {
10
+ set: (properties: {
11
+ $distinct_id?: string;
12
+ $name?: string;
13
+ $first_name?: string;
14
+ $last_name?: string;
15
+ $email?: string;
16
+ $avatar?: string;
17
+ $last_seen?: number;
18
+ $created?: number;
19
+ [key: string]: any;
20
+ }) => Promise<true>;
21
+ };
22
+ group: {
23
+ set: (groupKey: string, groupId: string, properties: {
24
+ $distinct_id?: string;
25
+ $name?: string;
26
+ $avatar?: string;
27
+ $created?: number;
28
+ [key: string]: any;
29
+ }) => Promise<true>;
30
+ };
31
+ reset(): void;
32
+ }
@@ -0,0 +1,71 @@
1
+ import fetch from 'node-fetch';
2
+ export class MixpanelClient {
3
+ token;
4
+ baseUrl;
5
+ distinctId;
6
+ constructor(token) {
7
+ this.token = token;
8
+ this.baseUrl = 'https://api-eu.mixpanel.com';
9
+ }
10
+ async track(event, properties) {
11
+ const data = {
12
+ event: event,
13
+ properties: {
14
+ ...properties,
15
+ token: this.token,
16
+ distinct_id: this.distinctId,
17
+ },
18
+ };
19
+ const response = await fetch(`${this.baseUrl}/track`, {
20
+ method: 'POST',
21
+ headers: { accept: 'text/plain', 'Content-Type': 'application/json' },
22
+ body: JSON.stringify([data]),
23
+ });
24
+ if (!response.ok)
25
+ throw new Error('Failed to track event');
26
+ return response.ok;
27
+ }
28
+ identify(distinctId) {
29
+ this.distinctId = distinctId;
30
+ }
31
+ people = {
32
+ set: async (properties) => {
33
+ const data = {
34
+ $set: properties,
35
+ $token: this.token,
36
+ $distinct_id: this.distinctId,
37
+ };
38
+ const response = await fetch(`${this.baseUrl}/engage`, {
39
+ method: 'POST',
40
+ headers: { accept: 'text/plain', 'Content-Type': 'application/json' },
41
+ body: JSON.stringify([data]),
42
+ });
43
+ if (!response.ok)
44
+ throw new Error('Failed to set people properties');
45
+ return response.ok;
46
+ },
47
+ };
48
+ group = {
49
+ set: async (groupKey, groupId, properties) => {
50
+ const data = {
51
+ $group_key: groupKey,
52
+ $group_id: groupId,
53
+ $set: properties,
54
+ $token: this.token,
55
+ $distinct_id: this.distinctId,
56
+ };
57
+ const response = await fetch(`${this.baseUrl}/groups#group-set`, {
58
+ method: 'POST',
59
+ headers: { accept: 'text/plain', 'Content-Type': 'application/json' },
60
+ body: JSON.stringify([data]),
61
+ });
62
+ if (!response.ok)
63
+ throw new Error('Failed to set group properties');
64
+ return response.ok;
65
+ },
66
+ };
67
+ reset() {
68
+ this.distinctId = undefined;
69
+ }
70
+ }
71
+ //# sourceMappingURL=mixpanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixpanel.js","sourceRoot":"src/","sources":["tracking/mixpanel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAG/B,MAAM,OAAO,cAAc;IACjB,KAAK,CAAS;IACd,OAAO,CAAS;IAChB,UAAU,CAAU;IAE5B,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,6BAA6B,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,KAAK,CACT,KAAQ,EACR,UAAiC;QAEjC,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,UAAU;aAC7B;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,QAAQ,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE;YACrE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAE3D,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,UAAkB;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,MAAM,GAAG;QACP,GAAG,EAAE,KAAK,EAAE,UAUX,EAAE,EAAE;YACH,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,IAAI,CAAC,KAAK;gBAClB,YAAY,EAAE,IAAI,CAAC,UAAU;aAC9B,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,EAAE;gBACrD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBACrE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;aAC7B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAErE,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;KACF,CAAC;IAEF,KAAK,GAAG;QACN,GAAG,EAAE,KAAK,EACR,QAAgB,EAChB,OAAe,EACf,UAMC,EACD,EAAE;YACF,MAAM,IAAI,GAAG;gBACX,UAAU,EAAE,QAAQ;gBACpB,SAAS,EAAE,OAAO;gBAClB,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,IAAI,CAAC,KAAK;gBAClB,YAAY,EAAE,IAAI,CAAC,UAAU;aAC9B,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;gBAC/D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBACrE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;aAC7B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAEpE,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;KACF,CAAC;IAEF,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ import { MixpanelClient } from './mixpanel';
2
+ const mixpanel = new MixpanelClient('933a19cf6d01a51a06ccdd083083f2a9');
3
+ mixpanel.identify('user@example.com');
4
+ mixpanel.group.set('tenant', '123test', {
5
+ $name: '123 Test!',
6
+ isTest: true,
7
+ });
8
+ mixpanel.people.set({
9
+ $email: 'user@example.com',
10
+ $name: 'John Doe',
11
+ $created: new Date().getTime() / 1000,
12
+ isTest: true,
13
+ tenant: ['123test'],
14
+ });
15
+ mixpanel.track('test_event', {
16
+ success: true,
17
+ message: 'Super Test!',
18
+ tenant: ['123test'],
19
+ });
20
+ mixpanel.reset();
21
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"src/","sources":["tracking/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,kCAAkC,CAAC,CAAC;AAExE,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAEtC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE;IACtC,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AAEH,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;IAClB,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI;IACrC,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,SAAS,CAAC;CACpB,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE;IAC3B,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,CAAC,SAAS,CAAC;CACpB,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"root":["../../src/index.ts","../../src/log/baselog.ts","../../src/log/color.ts","../../src/log/common.ts","../../src/log/index.spec.ts","../../src/log/index.ts","../../src/log/type.ts","../../src/tracking/index.ts","../../src/tracking/types.ts","../../src/utils/convertkeystosnakecase.ts","../../src/utils/convertvaluestostring.ts","../../src/utils/index.ts","../../src/utils/istest.ts"],"version":"5.7.2"}
1
+ {"root":["../../src/index.ts","../../src/log/baselog.ts","../../src/log/color.ts","../../src/log/common.ts","../../src/log/index.spec.ts","../../src/log/index.ts","../../src/log/type.ts","../../src/tracking/index.ts","../../src/tracking/mixpanel.ts","../../src/tracking/test.ts","../../src/tracking/types.ts","../../src/utils/convertkeystosnakecase.ts","../../src/utils/convertvaluestostring.ts","../../src/utils/index.ts","../../src/utils/istest.ts"],"version":"5.7.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vrplatform/log",
3
- "version": "2.0.56",
3
+ "version": "2.0.57",
4
4
  "main": "build/main/index.js",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -100,10 +100,10 @@ declare module 'intercom-client' {
100
100
 
101
101
  import { useHasuraClient } from '@finalytic/graphql';
102
102
  import { Intercom } from 'intercom-client';
103
- // import mixpanel from 'mixpanel-browser';
104
103
  import { type LogBindings, type WorkerLog, useLog } from '../log';
105
104
  import { isTest } from '../utils';
106
105
  import { convertValuesToString } from '../utils/convertValuesToString';
106
+ import { MixpanelClient } from './mixpanel';
107
107
  import type {
108
108
  GroupProps,
109
109
  IdentifyProps,
@@ -150,12 +150,8 @@ export const useTracking = (
150
150
  ? new Intercom({ accessToken: env.INTERCOM_TOKEN })
151
151
  : undefined;
152
152
 
153
- // if (env.MIXPANEL_TOKEN)
154
- // mixpanel.init(env.MIXPANEL_TOKEN, {
155
- // debug: true,
156
- // track_pageview: true,
157
- // persistence: 'localStorage',
158
- // });
153
+ let mixpanel: MixpanelClient | undefined;
154
+ if (env.MIXPANEL_TOKEN) mixpanel = new MixpanelClient(env.MIXPANEL_TOKEN);
159
155
 
160
156
  return {
161
157
  // General
@@ -166,7 +162,6 @@ export const useTracking = (
166
162
  event,
167
163
  packageName,
168
164
  properties,
169
- // timestamp = new Date(),
170
165
  }: TrackProps<T>) => {
171
166
  if (isDev || isTest(userId || anonymousId || '', groupId)) return;
172
167
 
@@ -183,14 +178,14 @@ export const useTracking = (
183
178
  }).id
184
179
  );
185
180
 
186
- // // track mixpanel event
187
- // if (env.MIXPANEL_TOKEN)
188
- // mixpanel.track(event, {
189
- // tenant: [groupId], // assign to group
190
- // tenantId: groupId,
191
- // userId: userId,
192
- // ...properties,
193
- // });
181
+ // track mixpanel event
182
+ if (mixpanel)
183
+ mixpanel.track(event, {
184
+ tenant: [groupId], // assign to group
185
+ tenantId: groupId,
186
+ userId: userId,
187
+ ...properties,
188
+ });
194
189
 
195
190
  if (userId) {
196
191
  try {
@@ -210,22 +205,46 @@ export const useTracking = (
210
205
  identify: async ({ traits, userId }: IdentifyProps) => {
211
206
  if (isDev || isTest(userId)) return;
212
207
 
213
- const name =
208
+ const _name =
214
209
  traits?.name ||
215
210
  (traits?.firstName
216
211
  ? `${traits.firstName} ${traits.lastName}`
217
212
  : traits?.lastName);
213
+ const _createdAt = traits?.createdAt
214
+ ? Math.floor(new Date(traits.createdAt).getTime() / 1000)
215
+ : undefined;
216
+ const _lastSeenAt = traits?.lastSeenAt
217
+ ? Math.floor(new Date(traits.lastSeenAt).getTime() / 1000)
218
+ : traits?.lastSeenAt !== null
219
+ ? Math.floor(new Date().getTime() / 1000)
220
+ : undefined;
218
221
 
219
- // // upsert mixpanel user
220
- // if (env.MIXPANEL_TOKEN) {
221
- // mixpanel.identify(userId);
222
+ // upsert mixpanel user
223
+ if (mixpanel) {
224
+ mixpanel.identify(userId);
222
225
 
223
- // mixpanel.people.set({
224
- // $name: name,
225
- // $email: traits?.email,
226
- // ...traits,
227
- // });
228
- // }
226
+ const {
227
+ firstName,
228
+ lastName,
229
+ name,
230
+ email,
231
+ avatar,
232
+ lastSeenAt,
233
+ createdAt,
234
+ ...rest
235
+ } = traits || {};
236
+ mixpanel.people.set({
237
+ $distinct_id: userId,
238
+ $name: _name,
239
+ $first_name: traits?.firstName,
240
+ $last_name: traits?.lastName,
241
+ $email: traits?.email,
242
+ $avatar: traits?.avatar,
243
+ $last_seen: _lastSeenAt,
244
+ $created: _createdAt,
245
+ ...rest,
246
+ });
247
+ }
229
248
 
230
249
  // upsert intercom user
231
250
  try {
@@ -234,14 +253,8 @@ export const useTracking = (
234
253
  email: traits?.email,
235
254
  name,
236
255
  avatar: traits?.avatar,
237
- signed_up_at: traits?.createdAt
238
- ? Math.floor(new Date(traits.createdAt).getTime() / 1000)
239
- : undefined,
240
- last_seen_at: traits?.lastSeenAt
241
- ? Math.floor(new Date(traits.lastSeenAt).getTime() / 1000)
242
- : traits?.lastSeenAt !== null
243
- ? Math.floor(new Date().getTime() / 1000)
244
- : undefined,
256
+ signed_up_at: _createdAt,
257
+ last_seen_at: _lastSeenAt,
245
258
  custom_attributes: { userType: traits?.role },
246
259
  };
247
260
 
@@ -272,20 +285,48 @@ export const useTracking = (
272
285
  // add teamId to traits
273
286
  if (!traits?.teamId) traits.teamId = groupId;
274
287
 
275
- // // upsert mixpanel group
276
- // if (env.MIXPANEL_TOKEN) mixpanel.set_group('tenant', groupId);
288
+ const cid = traits?.billingCustomerId || traits?.hyperlineCustomerId;
289
+ const partner = traits?.partner || traits?.accountingPartner;
290
+ const billingPartner =
291
+ traits?.billingPartner || traits?.partner || traits?.accountingPartner;
277
292
 
278
- let intercomCompany: Intercom.Company | undefined;
279
- try {
280
- const cid = traits?.billingCustomerId || traits?.hyperlineCustomerId;
281
- const partner = traits?.partner || traits?.accountingPartner;
282
- const billingPartner =
283
- traits?.billingPartner ||
284
- traits?.partner ||
285
- traits?.accountingPartner;
293
+ if (billingPartner === '0b6a7bd6-56cc-46b5-b2ab-1bd7d1e994fa') return; // dismiss Demo and Test Console
286
294
 
287
- if (billingPartner === '0b6a7bd6-56cc-46b5-b2ab-1bd7d1e994fa') return; // dismis Demo and Test Console
295
+ // upsert mixpanel group
296
+ if (mixpanel)
297
+ mixpanel.group.set('tenant', groupId, {
298
+ $distinct_id: groupId,
299
+ $name: traits?.name,
300
+ $avatar: traits.avatar,
301
+ $created: traits?.createdAt
302
+ ? new Date(traits.createdAt).getTime() / 1000
303
+ : undefined,
304
+
305
+ plan: traits?.plan,
306
+ mrr: traits?.mrr,
307
+ type: traits?.type,
308
+ status: traits?.status,
309
+ pms: traits?.pms,
310
+ accountingSoftware: traits?.accountingSoftware,
311
+ activeListingCount: traits?.activeListings,
312
+ paymentMethodType: traits?.paymentMethodType,
313
+ partnerName: traits?.partner || traits?.accountingPartner,
314
+ partnerId: traits?.partnerId || traits?.accountingPartnerId,
315
+ billingPortalUrl: cid
316
+ ? `https://billing.vrplatform.app/portal/${cid}`
317
+ : undefined,
318
+ billingSubscriptionStatus: traits?.billingSubscriptionStatus,
319
+ billingPartnerName: billingPartner,
320
+ billingCustomerId: cid,
321
+ trialUntil: traits?.trialUntil,
322
+ isOnboarding: traits?.isOnboarding,
323
+ isTest: billingPartner
324
+ ? billingPartner === 'Demo and Test Console'
325
+ : undefined,
326
+ });
288
327
 
328
+ let intercomCompany: Intercom.Company | undefined;
329
+ try {
289
330
  const custom_attributes: Record<string, string> = { teamId: groupId };
290
331
  if (traits?.name) custom_attributes.team = traits?.name;
291
332
  if (traits?.type) custom_attributes.type = traits?.type;
@@ -345,7 +386,7 @@ export const useTracking = (
345
386
  },
346
387
  shutdown: async () => {
347
388
  log?.flush();
348
- // mixpanel.reset();
389
+ mixpanel?.reset();
349
390
  },
350
391
  // export dependencies
351
392
  intercom,
@@ -0,0 +1,107 @@
1
+ import fetch from 'node-fetch';
2
+ import type { IdentifyProps, TrackingEventProps } from './types';
3
+
4
+ export class MixpanelClient {
5
+ private token: string;
6
+ private baseUrl: string;
7
+ private distinctId?: string;
8
+
9
+ constructor(token: string) {
10
+ this.token = token;
11
+ this.baseUrl = 'https://api-eu.mixpanel.com';
12
+ }
13
+
14
+ async track<T extends keyof TrackingEventProps>(
15
+ event: T,
16
+ properties: TrackingEventProps[T]
17
+ ) {
18
+ const data = {
19
+ event: event,
20
+ properties: {
21
+ ...properties,
22
+ token: this.token,
23
+ distinct_id: this.distinctId,
24
+ },
25
+ };
26
+
27
+ const response = await fetch(`${this.baseUrl}/track`, {
28
+ method: 'POST',
29
+ headers: { accept: 'text/plain', 'Content-Type': 'application/json' },
30
+ body: JSON.stringify([data]),
31
+ });
32
+
33
+ if (!response.ok) throw new Error('Failed to track event');
34
+
35
+ return response.ok;
36
+ }
37
+
38
+ identify(distinctId: string) {
39
+ this.distinctId = distinctId;
40
+ }
41
+
42
+ people = {
43
+ set: async (properties: {
44
+ $distinct_id?: string;
45
+ $name?: string;
46
+ $first_name?: string;
47
+ $last_name?: string;
48
+ $email?: string;
49
+ $avatar?: string;
50
+ $last_seen?: number;
51
+ $created?: number;
52
+ [key: string]: any;
53
+ }) => {
54
+ const data = {
55
+ $set: properties,
56
+ $token: this.token,
57
+ $distinct_id: this.distinctId,
58
+ };
59
+
60
+ const response = await fetch(`${this.baseUrl}/engage`, {
61
+ method: 'POST',
62
+ headers: { accept: 'text/plain', 'Content-Type': 'application/json' },
63
+ body: JSON.stringify([data]),
64
+ });
65
+
66
+ if (!response.ok) throw new Error('Failed to set people properties');
67
+
68
+ return response.ok;
69
+ },
70
+ };
71
+
72
+ group = {
73
+ set: async (
74
+ groupKey: string,
75
+ groupId: string,
76
+ properties: {
77
+ $distinct_id?: string;
78
+ $name?: string;
79
+ $avatar?: string;
80
+ $created?: number;
81
+ [key: string]: any;
82
+ }
83
+ ) => {
84
+ const data = {
85
+ $group_key: groupKey,
86
+ $group_id: groupId,
87
+ $set: properties,
88
+ $token: this.token,
89
+ $distinct_id: this.distinctId,
90
+ };
91
+
92
+ const response = await fetch(`${this.baseUrl}/groups#group-set`, {
93
+ method: 'POST',
94
+ headers: { accept: 'text/plain', 'Content-Type': 'application/json' },
95
+ body: JSON.stringify([data]),
96
+ });
97
+
98
+ if (!response.ok) throw new Error('Failed to set group properties');
99
+
100
+ return response.ok;
101
+ },
102
+ };
103
+
104
+ reset() {
105
+ this.distinctId = undefined;
106
+ }
107
+ }
@@ -0,0 +1,26 @@
1
+ import { MixpanelClient } from './mixpanel';
2
+
3
+ const mixpanel = new MixpanelClient('933a19cf6d01a51a06ccdd083083f2a9');
4
+
5
+ mixpanel.identify('user@example.com');
6
+
7
+ mixpanel.group.set('tenant', '123test', {
8
+ $name: '123 Test!',
9
+ isTest: true,
10
+ });
11
+
12
+ mixpanel.people.set({
13
+ $email: 'user@example.com',
14
+ $name: 'John Doe',
15
+ $created: new Date().getTime() / 1000,
16
+ isTest: true,
17
+ tenant: ['123test'],
18
+ });
19
+
20
+ mixpanel.track('test_event', {
21
+ success: true,
22
+ message: 'Super Test!',
23
+ tenant: ['123test'],
24
+ });
25
+
26
+ mixpanel.reset();