@vrplatform/log 1.0.17 → 1.0.18

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.
@@ -30,10 +30,6 @@ export declare const useTracking: ({ dataset, env, name }: TrackingProps, isDev?
30
30
  alias: string;
31
31
  }) => void;
32
32
  shutdown: () => Promise<void>;
33
- setIntercomCompanyAttributes: ({ tenantId, customerId, data, }: {
34
- tenantId: string;
35
- customerId: string;
36
- data: Parameters<IntercomAPI["updateCompany"]>[0]["data"];
37
- }) => Promise<void>;
33
+ intercom: IntercomAPI;
38
34
  log: import("../log").WorkerLog;
39
35
  };
@@ -6,13 +6,14 @@ const posthog_node_1 = require("posthog-node");
6
6
  const log_1 = require("../log");
7
7
  const intercom_1 = require("./intercom");
8
8
  const useTracking = ({ dataset, env, name }, isDev) => {
9
- const log = (0, log_1.useLog)({ name, dataset, env });
10
- const intercom = (0, intercom_1.useIntercom)(env.INTERCOM_TOKEN, log);
9
+ const axiom = (0, log_1.useLog)({ name, dataset, env });
10
+ const intercom = (0, intercom_1.useIntercom)(env.INTERCOM_TOKEN, axiom);
11
11
  const juneso = new analytics_node_1.Analytics(env.JUNESO_ANALYTICS_WRITE_KEY);
12
12
  const posthog = new posthog_node_1.PostHog(env.POSTHOG_API_KEY, {
13
13
  host: 'https://app.posthog.com',
14
14
  });
15
15
  return {
16
+ // General
16
17
  track: async ({ userId, event, tenantId, properties, }) => {
17
18
  if (isDev)
18
19
  return;
@@ -64,28 +65,15 @@ const useTracking = ({ dataset, env, name }, isDev) => {
64
65
  traits: properties,
65
66
  });
66
67
  },
68
+ // Posthog specific
67
69
  alias: ({ distinctId, alias }) => posthog.alias({ distinctId, alias }),
68
70
  shutdown: async () => {
69
71
  await posthog.shutdown();
70
72
  await juneso.closeAndFlush();
71
73
  },
72
- setIntercomCompanyAttributes: async ({ tenantId, customerId, data, }) => {
73
- const intercomCompanies = await intercom.getCompanyByTenantId(tenantId);
74
- const intercomCompany = intercomCompanies?.data?.[0];
75
- if (!intercomCompany)
76
- return;
77
- await intercom.updateCompany({
78
- companyId: intercomCompany.id,
79
- data: {
80
- ...data,
81
- custom_attributes: {
82
- ...data.custom_attributes,
83
- billingPortalUrl: `https://billing.vrplatform.app/portal/${customerId}`,
84
- },
85
- },
86
- });
87
- },
88
- log,
74
+ // export intercom and axiom
75
+ intercom,
76
+ log: axiom,
89
77
  };
90
78
  };
91
79
  exports.useTracking = useTracking;
@@ -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":";;;AAAA,4DAAoD;AACpD,+CAAuC;AACvC,gCAAgC;AAChC,yCAA2D;AAcpD,MAAM,WAAW,GAAG,CACzB,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAiB,EACrC,KAAe,EACf,EAAE;IACF,MAAM,KAAK,GAAG,IAAA,YAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAA,sBAAW,EAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,0BAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,sBAAO,CAAC,GAAG,CAAC,eAAe,EAAE;QAC/C,IAAI,EAAE,yBAAyB;KAChC,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,KAAK,EAAE,KAAK,EAAE,EACZ,MAAM,EACN,KAAK,EACL,QAAQ,EACR,UAAU,GAMX,EAAE,EAAE;YACH,IAAI,KAAK;gBAAE,OAAO;YAElB,OAAO,CAAC,OAAO,CAAC;gBACd,UAAU,EAAE,MAAM;gBAClB,KAAK;gBACL,MAAM,EAAE;oBACN,MAAM,EAAE,QAAQ;iBACjB;gBACD,UAAU;aACX,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC;gBACX,MAAM;gBACN,KAAK;gBACL,UAAU;gBACV,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;aAC/B,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,UAAU,CAAC;oBACxB,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,UAAU;iBACrB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,QAAQ,EAAE,CAAC,EACT,UAAU,EACV,MAAM,GAC8C,EAAE,EAAE;YACxD,OAAO,CAAC,QAAQ,CAAC;gBACf,UAAU,EAAE,MAAM;gBAClB,UAAU;aACX,CAAC,CAAC;YACH,MAAM,CAAC,QAAQ,CAAC;gBACd,MAAM;gBACN,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,EAAE,CAAC,EACN,UAAU,EACV,QAAQ,EACR,MAAM,GAKP,EAAE,EAAE;YACH,OAAO,CAAC,aAAa,CAAC;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,SAAS,EAAE,QAAQ;gBACnB,UAAU;gBACV,UAAU,EAAE,MAAM;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC;gBACX,MAAM;gBACN,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;QACD,mBAAmB;QACnB,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAyC,EAAE,EAAE,CACtE,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACtC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;QAC/B,CAAC;QACD,4BAA4B;QAC5B,QAAQ;QACR,GAAG,EAAE,KAAK;KACX,CAAC;AACJ,CAAC,CAAC;AAhGW,QAAA,WAAW,eAgGtB"}
@@ -1,21 +1,22 @@
1
1
  import type { Log } from '../log';
2
2
  export declare class IntercomAPI {
3
- constructor(token: string, log: Log);
3
+ constructor(token: string, log?: Log);
4
4
  private headers;
5
- private log;
5
+ private log?;
6
6
  private fetch;
7
- updateUser({ data, contactId, }: {
8
- contactId: string;
7
+ getUserByUserId(userId: string): Promise<{
8
+ type: "list";
9
9
  data: {
10
- email: string | undefined;
11
- name: string;
12
- custom_attributes: Record<string, any>;
10
+ id: string;
11
+ }[] | undefined;
12
+ total_count: 0;
13
+ pages: {
14
+ type: "pages";
15
+ page: 1;
16
+ per_page: 10;
17
+ total_pages: 0;
13
18
  };
14
- }): Promise<unknown>;
15
- updateCompany({ data, companyId, }: {
16
- companyId: string;
17
- data: Record<string, any>;
18
- }): Promise<unknown>;
19
+ } | undefined>;
19
20
  createUser({ data, userId, }: {
20
21
  userId: string;
21
22
  data: {
@@ -24,18 +25,35 @@ export declare class IntercomAPI {
24
25
  custom_attributes: Record<string, any>;
25
26
  };
26
27
  }): Promise<unknown>;
27
- createCompany({ data, tenantId, }: {
28
- tenantId: string;
28
+ updateUser({ data, contactId, }: {
29
+ contactId: string;
29
30
  data: {
30
- name: string;
31
- remote_created_at: string;
31
+ email?: string;
32
+ name?: string;
32
33
  custom_attributes: Record<string, any>;
33
34
  };
34
35
  }): Promise<unknown>;
36
+ deleteUser(intercom_contact_id: string): Promise<{
37
+ id: "6657adf56abd0167d9419d1c";
38
+ external_id: "70";
39
+ type: "contact";
40
+ deleted: true;
41
+ } | undefined>;
35
42
  createCompanyUser(data: {
36
43
  intercom_contact_id: string;
37
44
  intercom_company_id: string;
38
45
  }): Promise<unknown>;
46
+ deleteCompanyUser({ intercom_company_id, intercom_contact_id, }: {
47
+ intercom_contact_id: string;
48
+ intercom_company_id: string;
49
+ }): Promise<{
50
+ id: "6657adc96abd0167d9419ca7";
51
+ } | undefined>;
52
+ trackEvent(data: {
53
+ user_id: string;
54
+ event_name: string;
55
+ metadata: Record<string, any>;
56
+ }): Promise<unknown>;
39
57
  getCompanyByTenantId(tenantId: string): Promise<{
40
58
  type: "list";
41
59
  data: [{
@@ -69,40 +87,22 @@ export declare class IntercomAPI {
69
87
  };
70
88
  total_count: 1;
71
89
  } | undefined>;
72
- getUserByUserId(userId: string): Promise<{
73
- type: "list";
90
+ createCompany({ data, tenantId, }: {
91
+ tenantId: string;
74
92
  data: {
75
- id: string;
76
- }[] | undefined;
77
- total_count: 0;
78
- pages: {
79
- type: "pages";
80
- page: 1;
81
- per_page: 10;
82
- total_pages: 0;
93
+ name: string;
94
+ remote_created_at: string;
95
+ custom_attributes: Record<string, any>;
83
96
  };
84
- } | undefined>;
85
- deleteUser(intercom_contact_id: string): Promise<{
86
- id: "6657adf56abd0167d9419d1c";
87
- external_id: "70";
88
- type: "contact";
89
- deleted: true;
90
- } | undefined>;
97
+ }): Promise<unknown>;
98
+ updateCompany({ data, companyId, }: {
99
+ companyId: string;
100
+ data: Record<string, any>;
101
+ }): Promise<unknown>;
91
102
  deleteCompany(intercom_company_id: string): Promise<{
92
103
  id: "6657adc96abd0167d9419ca7";
93
104
  object: "company";
94
105
  deleted: true;
95
106
  } | undefined>;
96
- deleteCompanyUser({ intercom_company_id, intercom_contact_id, }: {
97
- intercom_contact_id: string;
98
- intercom_company_id: string;
99
- }): Promise<{
100
- id: "6657adc96abd0167d9419ca7";
101
- } | undefined>;
102
- trackEvent(data: {
103
- user_id: string;
104
- event_name: string;
105
- metadata: Record<string, any>;
106
- }): Promise<unknown>;
107
107
  }
108
- export declare function useIntercom(token: string, log: Log): IntercomAPI;
108
+ export declare function useIntercom(token: string, log?: Log): IntercomAPI;
@@ -20,36 +20,50 @@ class IntercomAPI {
20
20
  try {
21
21
  const result = await fetch(`https://api.intercom.io${path}`, {
22
22
  method: 'GET',
23
- ...options,
24
23
  headers: this.headers,
24
+ ...options,
25
25
  });
26
26
  if (!result.ok) {
27
- this.log.info('Failed to fetch from Intercom', {
27
+ this.log?.info('Failed to fetch from Intercom', {
28
28
  result: {
29
29
  status: result.status,
30
30
  statusText: result.statusText,
31
31
  body: await result.text(),
32
32
  },
33
33
  });
34
- return undefined;
34
+ if (result.status === 404)
35
+ return undefined;
36
+ if (result.status === 429) {
37
+ console.log('Intercom rate limit exceeded, waiting for 1 minute');
38
+ // X-RateLimit-Reset: 1487332520 => timestamp from header response when resetting
39
+ const reset = Number(result.headers.get('X-RateLimit-Reset'));
40
+ if (reset) {
41
+ const now = Math.floor(Date.now() / 1000);
42
+ const wait = reset - now + 1;
43
+ console.log(`Waiting for ${wait} seconds`);
44
+ await new Promise((resolve) => setTimeout(resolve, wait * 1000));
45
+ return await this.fetch(path, options);
46
+ }
47
+ }
35
48
  }
36
49
  return result.status === 202 ? {} : (await result.json());
37
50
  }
38
51
  catch (error) {
39
- this.log.error(error);
52
+ this.log?.error(error);
40
53
  return undefined;
41
54
  }
42
55
  }
43
- async updateUser({ data, contactId, }) {
44
- return await this.fetch(`/contacts/${contactId}`, {
45
- method: 'PUT',
46
- data,
47
- });
48
- }
49
- async updateCompany({ data, companyId, }) {
50
- return await this.fetch(`/companies/${companyId}`, {
51
- method: 'PUT',
52
- data,
56
+ // User
57
+ async getUserByUserId(userId) {
58
+ return await this.fetch('/contacts/search', {
59
+ method: 'POST',
60
+ data: {
61
+ query: {
62
+ field: 'external_id',
63
+ operator: '=',
64
+ value: userId,
65
+ },
66
+ },
53
67
  });
54
68
  }
55
69
  async createUser({ data, userId, }) {
@@ -58,13 +72,15 @@ class IntercomAPI {
58
72
  data: { ...data, external_id: userId },
59
73
  });
60
74
  }
61
- async createCompany({ data, tenantId, }) {
62
- return await this.fetch('/companies', {
63
- method: 'POST',
64
- data: {
65
- ...data,
66
- company_id: tenantId,
67
- },
75
+ async updateUser({ data, contactId, }) {
76
+ return await this.fetch(`/contacts/${contactId}`, {
77
+ method: 'PUT',
78
+ data,
79
+ });
80
+ }
81
+ async deleteUser(intercom_contact_id) {
82
+ return await this.fetch(`/contacts/${intercom_contact_id}`, {
83
+ method: 'DELETE',
68
84
  });
69
85
  }
70
86
  async createCompanyUser(data) {
@@ -75,26 +91,39 @@ class IntercomAPI {
75
91
  },
76
92
  });
77
93
  }
94
+ async deleteCompanyUser({ intercom_company_id, intercom_contact_id, }) {
95
+ return await this.fetch(`/contacts/${intercom_contact_id}/companies/${intercom_company_id}`, {
96
+ method: 'DELETE',
97
+ });
98
+ }
99
+ async trackEvent(data) {
100
+ return await this.fetch('/events', {
101
+ method: 'POST',
102
+ data: {
103
+ created_at: Math.floor(new Date().getTime() / 1000), // to seconds
104
+ ...data,
105
+ },
106
+ });
107
+ }
108
+ // Company
78
109
  async getCompanyByTenantId(tenantId) {
79
110
  return await this.fetch(`/companies?company_id=${tenantId}`, {
80
111
  method: 'GET',
81
112
  });
82
113
  }
83
- async getUserByUserId(userId) {
84
- return await this.fetch('/contacts/search', {
114
+ async createCompany({ data, tenantId, }) {
115
+ return await this.fetch('/companies', {
85
116
  method: 'POST',
86
117
  data: {
87
- query: {
88
- field: 'external_id',
89
- operator: '=',
90
- value: userId,
91
- },
118
+ ...data,
119
+ company_id: tenantId,
92
120
  },
93
121
  });
94
122
  }
95
- async deleteUser(intercom_contact_id) {
96
- return await this.fetch(`/contacts/${intercom_contact_id}`, {
97
- method: 'DELETE',
123
+ async updateCompany({ data, companyId, }) {
124
+ return await this.fetch(`/companies/${companyId}`, {
125
+ method: 'PUT',
126
+ data,
98
127
  });
99
128
  }
100
129
  async deleteCompany(intercom_company_id) {
@@ -102,20 +131,6 @@ class IntercomAPI {
102
131
  method: 'DELETE',
103
132
  });
104
133
  }
105
- async deleteCompanyUser({ intercom_company_id, intercom_contact_id, }) {
106
- return await this.fetch(`/contacts/${intercom_contact_id}/companies/${intercom_company_id}`, {
107
- method: 'DELETE',
108
- });
109
- }
110
- async trackEvent(data) {
111
- return await this.fetch('/events', {
112
- method: 'POST',
113
- data: {
114
- created_at: Math.floor(new Date().getTime() / 1000), // to seconds
115
- ...data,
116
- },
117
- });
118
- }
119
134
  }
120
135
  exports.IntercomAPI = IntercomAPI;
121
136
  function useIntercom(token, log) {
@@ -1 +1 @@
1
- {"version":3,"file":"intercom.js","sourceRoot":"src/","sources":["tracking/intercom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intercom.js","sourceRoot":"src/","sources":["tracking/intercom.ts"],"names":[],"mappings":"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"}
@@ -30,10 +30,6 @@ export declare const useTracking: ({ dataset, env, name }: TrackingProps, isDev?
30
30
  alias: string;
31
31
  }) => void;
32
32
  shutdown: () => Promise<void>;
33
- setIntercomCompanyAttributes: ({ tenantId, customerId, data, }: {
34
- tenantId: string;
35
- customerId: string;
36
- data: Parameters<IntercomAPI["updateCompany"]>[0]["data"];
37
- }) => Promise<void>;
33
+ intercom: IntercomAPI;
38
34
  log: import("../log").WorkerLog;
39
35
  };
@@ -3,13 +3,14 @@ import { PostHog } from 'posthog-node';
3
3
  import { useLog } from '../log';
4
4
  import { useIntercom } from './intercom';
5
5
  export const useTracking = ({ dataset, env, name }, isDev) => {
6
- const log = useLog({ name, dataset, env });
7
- const intercom = useIntercom(env.INTERCOM_TOKEN, log);
6
+ const axiom = useLog({ name, dataset, env });
7
+ const intercom = useIntercom(env.INTERCOM_TOKEN, axiom);
8
8
  const juneso = new Analytics(env.JUNESO_ANALYTICS_WRITE_KEY);
9
9
  const posthog = new PostHog(env.POSTHOG_API_KEY, {
10
10
  host: 'https://app.posthog.com',
11
11
  });
12
12
  return {
13
+ // General
13
14
  track: async ({ userId, event, tenantId, properties, }) => {
14
15
  if (isDev)
15
16
  return;
@@ -61,28 +62,15 @@ export const useTracking = ({ dataset, env, name }, isDev) => {
61
62
  traits: properties,
62
63
  });
63
64
  },
65
+ // Posthog specific
64
66
  alias: ({ distinctId, alias }) => posthog.alias({ distinctId, alias }),
65
67
  shutdown: async () => {
66
68
  await posthog.shutdown();
67
69
  await juneso.closeAndFlush();
68
70
  },
69
- setIntercomCompanyAttributes: async ({ tenantId, customerId, data, }) => {
70
- const intercomCompanies = await intercom.getCompanyByTenantId(tenantId);
71
- const intercomCompany = intercomCompanies?.data?.[0];
72
- if (!intercomCompany)
73
- return;
74
- await intercom.updateCompany({
75
- companyId: intercomCompany.id,
76
- data: {
77
- ...data,
78
- custom_attributes: {
79
- ...data.custom_attributes,
80
- billingPortalUrl: `https://billing.vrplatform.app/portal/${customerId}`,
81
- },
82
- },
83
- });
84
- },
85
- log,
71
+ // export intercom and axiom
72
+ intercom,
73
+ log: axiom,
86
74
  };
87
75
  };
88
76
  //# sourceMappingURL=index.js.map
@@ -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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAoB,WAAW,EAAE,MAAM,YAAY,CAAC;AAc3D,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAiB,EACrC,KAAe,EACf,EAAE;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE;QAC/C,IAAI,EAAE,yBAAyB;KAChC,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,KAAK,EAAE,KAAK,EAAE,EACZ,MAAM,EACN,KAAK,EACL,QAAQ,EACR,UAAU,GAMX,EAAE,EAAE;YACH,IAAI,KAAK;gBAAE,OAAO;YAElB,OAAO,CAAC,OAAO,CAAC;gBACd,UAAU,EAAE,MAAM;gBAClB,KAAK;gBACL,MAAM,EAAE;oBACN,MAAM,EAAE,QAAQ;iBACjB;gBACD,UAAU;aACX,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC;gBACX,MAAM;gBACN,KAAK;gBACL,UAAU;gBACV,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;aAC/B,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,UAAU,CAAC;oBACxB,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,UAAU;iBACrB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,QAAQ,EAAE,CAAC,EACT,UAAU,EACV,MAAM,GAC8C,EAAE,EAAE;YACxD,OAAO,CAAC,QAAQ,CAAC;gBACf,UAAU,EAAE,MAAM;gBAClB,UAAU;aACX,CAAC,CAAC;YACH,MAAM,CAAC,QAAQ,CAAC;gBACd,MAAM;gBACN,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,EAAE,CAAC,EACN,UAAU,EACV,QAAQ,EACR,MAAM,GAKP,EAAE,EAAE;YACH,OAAO,CAAC,aAAa,CAAC;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,SAAS,EAAE,QAAQ;gBACnB,UAAU;gBACV,UAAU,EAAE,MAAM;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC;gBACX,MAAM;gBACN,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;QACD,mBAAmB;QACnB,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAyC,EAAE,EAAE,CACtE,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACtC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;QAC/B,CAAC;QACD,4BAA4B;QAC5B,QAAQ;QACR,GAAG,EAAE,KAAK;KACX,CAAC;AACJ,CAAC,CAAC"}
@@ -1,21 +1,22 @@
1
1
  import type { Log } from '../log';
2
2
  export declare class IntercomAPI {
3
- constructor(token: string, log: Log);
3
+ constructor(token: string, log?: Log);
4
4
  private headers;
5
- private log;
5
+ private log?;
6
6
  private fetch;
7
- updateUser({ data, contactId, }: {
8
- contactId: string;
7
+ getUserByUserId(userId: string): Promise<{
8
+ type: "list";
9
9
  data: {
10
- email: string | undefined;
11
- name: string;
12
- custom_attributes: Record<string, any>;
10
+ id: string;
11
+ }[] | undefined;
12
+ total_count: 0;
13
+ pages: {
14
+ type: "pages";
15
+ page: 1;
16
+ per_page: 10;
17
+ total_pages: 0;
13
18
  };
14
- }): Promise<unknown>;
15
- updateCompany({ data, companyId, }: {
16
- companyId: string;
17
- data: Record<string, any>;
18
- }): Promise<unknown>;
19
+ } | undefined>;
19
20
  createUser({ data, userId, }: {
20
21
  userId: string;
21
22
  data: {
@@ -24,18 +25,35 @@ export declare class IntercomAPI {
24
25
  custom_attributes: Record<string, any>;
25
26
  };
26
27
  }): Promise<unknown>;
27
- createCompany({ data, tenantId, }: {
28
- tenantId: string;
28
+ updateUser({ data, contactId, }: {
29
+ contactId: string;
29
30
  data: {
30
- name: string;
31
- remote_created_at: string;
31
+ email?: string;
32
+ name?: string;
32
33
  custom_attributes: Record<string, any>;
33
34
  };
34
35
  }): Promise<unknown>;
36
+ deleteUser(intercom_contact_id: string): Promise<{
37
+ id: "6657adf56abd0167d9419d1c";
38
+ external_id: "70";
39
+ type: "contact";
40
+ deleted: true;
41
+ } | undefined>;
35
42
  createCompanyUser(data: {
36
43
  intercom_contact_id: string;
37
44
  intercom_company_id: string;
38
45
  }): Promise<unknown>;
46
+ deleteCompanyUser({ intercom_company_id, intercom_contact_id, }: {
47
+ intercom_contact_id: string;
48
+ intercom_company_id: string;
49
+ }): Promise<{
50
+ id: "6657adc96abd0167d9419ca7";
51
+ } | undefined>;
52
+ trackEvent(data: {
53
+ user_id: string;
54
+ event_name: string;
55
+ metadata: Record<string, any>;
56
+ }): Promise<unknown>;
39
57
  getCompanyByTenantId(tenantId: string): Promise<{
40
58
  type: "list";
41
59
  data: [{
@@ -69,40 +87,22 @@ export declare class IntercomAPI {
69
87
  };
70
88
  total_count: 1;
71
89
  } | undefined>;
72
- getUserByUserId(userId: string): Promise<{
73
- type: "list";
90
+ createCompany({ data, tenantId, }: {
91
+ tenantId: string;
74
92
  data: {
75
- id: string;
76
- }[] | undefined;
77
- total_count: 0;
78
- pages: {
79
- type: "pages";
80
- page: 1;
81
- per_page: 10;
82
- total_pages: 0;
93
+ name: string;
94
+ remote_created_at: string;
95
+ custom_attributes: Record<string, any>;
83
96
  };
84
- } | undefined>;
85
- deleteUser(intercom_contact_id: string): Promise<{
86
- id: "6657adf56abd0167d9419d1c";
87
- external_id: "70";
88
- type: "contact";
89
- deleted: true;
90
- } | undefined>;
97
+ }): Promise<unknown>;
98
+ updateCompany({ data, companyId, }: {
99
+ companyId: string;
100
+ data: Record<string, any>;
101
+ }): Promise<unknown>;
91
102
  deleteCompany(intercom_company_id: string): Promise<{
92
103
  id: "6657adc96abd0167d9419ca7";
93
104
  object: "company";
94
105
  deleted: true;
95
106
  } | undefined>;
96
- deleteCompanyUser({ intercom_company_id, intercom_contact_id, }: {
97
- intercom_contact_id: string;
98
- intercom_company_id: string;
99
- }): Promise<{
100
- id: "6657adc96abd0167d9419ca7";
101
- } | undefined>;
102
- trackEvent(data: {
103
- user_id: string;
104
- event_name: string;
105
- metadata: Record<string, any>;
106
- }): Promise<unknown>;
107
107
  }
108
- export declare function useIntercom(token: string, log: Log): IntercomAPI;
108
+ export declare function useIntercom(token: string, log?: Log): IntercomAPI;
@@ -18,36 +18,50 @@ export class IntercomAPI {
18
18
  try {
19
19
  const result = await fetch(`https://api.intercom.io${path}`, {
20
20
  method: 'GET',
21
- ...options,
22
21
  headers: this.headers,
22
+ ...options,
23
23
  });
24
24
  if (!result.ok) {
25
- this.log.info('Failed to fetch from Intercom', {
25
+ this.log?.info('Failed to fetch from Intercom', {
26
26
  result: {
27
27
  status: result.status,
28
28
  statusText: result.statusText,
29
29
  body: await result.text(),
30
30
  },
31
31
  });
32
- return undefined;
32
+ if (result.status === 404)
33
+ return undefined;
34
+ if (result.status === 429) {
35
+ console.log('Intercom rate limit exceeded, waiting for 1 minute');
36
+ // X-RateLimit-Reset: 1487332520 => timestamp from header response when resetting
37
+ const reset = Number(result.headers.get('X-RateLimit-Reset'));
38
+ if (reset) {
39
+ const now = Math.floor(Date.now() / 1000);
40
+ const wait = reset - now + 1;
41
+ console.log(`Waiting for ${wait} seconds`);
42
+ await new Promise((resolve) => setTimeout(resolve, wait * 1000));
43
+ return await this.fetch(path, options);
44
+ }
45
+ }
33
46
  }
34
47
  return result.status === 202 ? {} : (await result.json());
35
48
  }
36
49
  catch (error) {
37
- this.log.error(error);
50
+ this.log?.error(error);
38
51
  return undefined;
39
52
  }
40
53
  }
41
- async updateUser({ data, contactId, }) {
42
- return await this.fetch(`/contacts/${contactId}`, {
43
- method: 'PUT',
44
- data,
45
- });
46
- }
47
- async updateCompany({ data, companyId, }) {
48
- return await this.fetch(`/companies/${companyId}`, {
49
- method: 'PUT',
50
- data,
54
+ // User
55
+ async getUserByUserId(userId) {
56
+ return await this.fetch('/contacts/search', {
57
+ method: 'POST',
58
+ data: {
59
+ query: {
60
+ field: 'external_id',
61
+ operator: '=',
62
+ value: userId,
63
+ },
64
+ },
51
65
  });
52
66
  }
53
67
  async createUser({ data, userId, }) {
@@ -56,13 +70,15 @@ export class IntercomAPI {
56
70
  data: { ...data, external_id: userId },
57
71
  });
58
72
  }
59
- async createCompany({ data, tenantId, }) {
60
- return await this.fetch('/companies', {
61
- method: 'POST',
62
- data: {
63
- ...data,
64
- company_id: tenantId,
65
- },
73
+ async updateUser({ data, contactId, }) {
74
+ return await this.fetch(`/contacts/${contactId}`, {
75
+ method: 'PUT',
76
+ data,
77
+ });
78
+ }
79
+ async deleteUser(intercom_contact_id) {
80
+ return await this.fetch(`/contacts/${intercom_contact_id}`, {
81
+ method: 'DELETE',
66
82
  });
67
83
  }
68
84
  async createCompanyUser(data) {
@@ -73,26 +89,39 @@ export class IntercomAPI {
73
89
  },
74
90
  });
75
91
  }
92
+ async deleteCompanyUser({ intercom_company_id, intercom_contact_id, }) {
93
+ return await this.fetch(`/contacts/${intercom_contact_id}/companies/${intercom_company_id}`, {
94
+ method: 'DELETE',
95
+ });
96
+ }
97
+ async trackEvent(data) {
98
+ return await this.fetch('/events', {
99
+ method: 'POST',
100
+ data: {
101
+ created_at: Math.floor(new Date().getTime() / 1000), // to seconds
102
+ ...data,
103
+ },
104
+ });
105
+ }
106
+ // Company
76
107
  async getCompanyByTenantId(tenantId) {
77
108
  return await this.fetch(`/companies?company_id=${tenantId}`, {
78
109
  method: 'GET',
79
110
  });
80
111
  }
81
- async getUserByUserId(userId) {
82
- return await this.fetch('/contacts/search', {
112
+ async createCompany({ data, tenantId, }) {
113
+ return await this.fetch('/companies', {
83
114
  method: 'POST',
84
115
  data: {
85
- query: {
86
- field: 'external_id',
87
- operator: '=',
88
- value: userId,
89
- },
116
+ ...data,
117
+ company_id: tenantId,
90
118
  },
91
119
  });
92
120
  }
93
- async deleteUser(intercom_contact_id) {
94
- return await this.fetch(`/contacts/${intercom_contact_id}`, {
95
- method: 'DELETE',
121
+ async updateCompany({ data, companyId, }) {
122
+ return await this.fetch(`/companies/${companyId}`, {
123
+ method: 'PUT',
124
+ data,
96
125
  });
97
126
  }
98
127
  async deleteCompany(intercom_company_id) {
@@ -100,20 +129,6 @@ export class IntercomAPI {
100
129
  method: 'DELETE',
101
130
  });
102
131
  }
103
- async deleteCompanyUser({ intercom_company_id, intercom_contact_id, }) {
104
- return await this.fetch(`/contacts/${intercom_contact_id}/companies/${intercom_company_id}`, {
105
- method: 'DELETE',
106
- });
107
- }
108
- async trackEvent(data) {
109
- return await this.fetch('/events', {
110
- method: 'POST',
111
- data: {
112
- created_at: Math.floor(new Date().getTime() / 1000), // to seconds
113
- ...data,
114
- },
115
- });
116
- }
117
132
  }
118
133
  export function useIntercom(token, log) {
119
134
  return new IntercomAPI(token, log);
@@ -1 +1 @@
1
- {"version":3,"file":"intercom.js","sourceRoot":"src/","sources":["tracking/intercom.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IACtB,YAAY,KAAa,EAAE,GAAQ;QACjC,IAAI,CAAC,OAAO,GAAG;YACb,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;YAC1B,kBAAkB,EAAE,MAAM;YAC1B,aAAa,EAAE,UAAU,KAAK,EAAE;SACjC,CAAC;QAEF,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAEO,OAAO,CAAyB;IAChC,GAAG,CAAM;IAET,KAAK,CAAC,KAAK,CACjB,IAAY,EACZ,OAAsC;QAEtC,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,0BAA0B,IAAI,EAAE,EAAE;gBAC3D,MAAM,EAAE,KAAK;gBACb,GAAG,OAAO;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE;oBAC7C,MAAM,EAAE;wBACN,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,IAAI,EAAE,MAAM,MAAM,CAAC,IAAI,EAAE;qBAC1B;iBACF,CAAC,CAAC;gBACH,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAE,EAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAO,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EACf,IAAI,EACJ,SAAS,GAQV;QACC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,SAAS,EAAE,EAAE;YAChD,MAAM,EAAE,KAAK;YACb,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAClB,IAAI,EACJ,SAAS,GAIV;QACC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,SAAS,EAAE,EAAE;YACjD,MAAM,EAAE,KAAK;YACb,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EACf,IAAI,EACJ,MAAM,GAQP;QACC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE;SACvC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAClB,IAAI,EACJ,QAAQ,GAQT;QACC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,GAAG,IAAI;gBACP,UAAU,EAAE,QAAQ;aACrB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAGvB;QACC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,mBAAmB,YAAY,EAAE;YACzE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,mBAAmB;aAC7B;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,QAAgB;QACzC,OAAO,MAAM,IAAI,CAAC,KAAK,CAoCpB,yBAAyB,QAAQ,EAAE,EAAE;YACtC,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,OAAO,MAAM,IAAI,CAAC,KAAK,CAUpB,kBAAkB,EAAE;YACrB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,KAAK,EAAE;oBACL,KAAK,EAAE,aAAa;oBACpB,QAAQ,EAAE,GAAG;oBACb,KAAK,EAAE,MAAM;iBACd;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,mBAA2B;QAC1C,OAAO,MAAM,IAAI,CAAC,KAAK,CAKpB,aAAa,mBAAmB,EAAE,EAAE;YACrC,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,mBAA2B;QAC7C,OAAO,MAAM,IAAI,CAAC,KAAK,CAIpB,cAAc,mBAAmB,EAAE,EAAE;YACtC,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EACtB,mBAAmB,EACnB,mBAAmB,GAIpB;QACC,OAAO,MAAM,IAAI,CAAC,KAAK,CAEpB,aAAa,mBAAmB,cAAc,mBAAmB,EAAE,EAAE;YACtE,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAIhB;QACC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACjC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,aAAa;gBAClE,GAAG,IAAI;aACR;SACF,CAAC,CAAC;IACL,CAAC;CACF;AACD,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,GAAQ;IACjD,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"intercom.js","sourceRoot":"src/","sources":["tracking/intercom.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vrplatform/log",
3
- "version": "1.0.17",
3
+ "version": "1.0.18",
4
4
  "main": "src/index.ts",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -19,14 +19,15 @@ export const useTracking = (
19
19
  { dataset, env, name }: TrackingProps,
20
20
  isDev?: boolean
21
21
  ) => {
22
- const log = useLog({ name, dataset, env });
23
- const intercom = useIntercom(env.INTERCOM_TOKEN, log);
22
+ const axiom = useLog({ name, dataset, env });
23
+ const intercom = useIntercom(env.INTERCOM_TOKEN, axiom);
24
24
  const juneso = new Analytics(env.JUNESO_ANALYTICS_WRITE_KEY);
25
25
  const posthog = new PostHog(env.POSTHOG_API_KEY, {
26
26
  host: 'https://app.posthog.com',
27
27
  });
28
28
 
29
29
  return {
30
+ // General
30
31
  track: async ({
31
32
  userId,
32
33
  event,
@@ -99,37 +100,15 @@ export const useTracking = (
99
100
  traits: properties,
100
101
  });
101
102
  },
103
+ // Posthog specific
102
104
  alias: ({ distinctId, alias }: { distinctId: string; alias: string }) =>
103
105
  posthog.alias({ distinctId, alias }),
104
106
  shutdown: async () => {
105
107
  await posthog.shutdown();
106
108
  await juneso.closeAndFlush();
107
109
  },
108
- setIntercomCompanyAttributes: async ({
109
- tenantId,
110
- customerId,
111
- data,
112
- }: {
113
- tenantId: string;
114
- customerId: string;
115
- data: Parameters<IntercomAPI['updateCompany']>[0]['data'];
116
- }) => {
117
- const intercomCompanies = await intercom.getCompanyByTenantId(tenantId);
118
- const intercomCompany = intercomCompanies?.data?.[0];
119
-
120
- if (!intercomCompany) return;
121
-
122
- await intercom.updateCompany({
123
- companyId: intercomCompany.id,
124
- data: {
125
- ...data,
126
- custom_attributes: {
127
- ...data.custom_attributes,
128
- billingPortalUrl: `https://billing.vrplatform.app/portal/${customerId}`,
129
- },
130
- },
131
- });
132
- },
133
- log,
110
+ // export intercom and axiom
111
+ intercom,
112
+ log: axiom,
134
113
  };
135
114
  };
@@ -1,7 +1,7 @@
1
1
  import type { Log } from '../log';
2
2
 
3
3
  export class IntercomAPI {
4
- constructor(token: string, log: Log) {
4
+ constructor(token: string, log?: Log) {
5
5
  this.headers = {
6
6
  'Content-Type': 'application/json',
7
7
  Accept: 'application/json',
@@ -13,7 +13,7 @@ export class IntercomAPI {
13
13
  }
14
14
 
15
15
  private headers: Record<string, string>;
16
- private log: Log;
16
+ private log?: Log;
17
17
 
18
18
  private async fetch<T>(
19
19
  path: string,
@@ -27,57 +27,67 @@ export class IntercomAPI {
27
27
  try {
28
28
  const result = await fetch(`https://api.intercom.io${path}`, {
29
29
  method: 'GET',
30
- ...options,
31
30
  headers: this.headers,
31
+ ...options,
32
32
  });
33
33
 
34
34
  if (!result.ok) {
35
- this.log.info('Failed to fetch from Intercom', {
35
+ this.log?.info('Failed to fetch from Intercom', {
36
36
  result: {
37
37
  status: result.status,
38
38
  statusText: result.statusText,
39
39
  body: await result.text(),
40
40
  },
41
41
  });
42
- return undefined;
42
+
43
+ if (result.status === 404) return undefined;
44
+
45
+ if (result.status === 429) {
46
+ console.log('Intercom rate limit exceeded, waiting for 1 minute');
47
+ // X-RateLimit-Reset: 1487332520 => timestamp from header response when resetting
48
+
49
+ const reset = Number(result.headers.get('X-RateLimit-Reset'));
50
+
51
+ if (reset) {
52
+ const now = Math.floor(Date.now() / 1000);
53
+ const wait = reset - now + 1;
54
+ console.log(`Waiting for ${wait} seconds`);
55
+ await new Promise((resolve) => setTimeout(resolve, wait * 1000));
56
+
57
+ return await this.fetch(path, options);
58
+ }
59
+ }
43
60
  }
44
61
  return result.status === 202 ? ({} as T) : ((await result.json()) as T);
45
62
  } catch (error: any) {
46
- this.log.error(error);
63
+ this.log?.error(error);
47
64
  return undefined;
48
65
  }
49
66
  }
50
67
 
51
- async updateUser({
52
- data,
53
- contactId,
54
- }: {
55
- contactId: string;
56
- data: {
57
- email: string | undefined;
58
- name: string;
59
- custom_attributes: Record<string, any>;
60
- };
61
- }) {
62
- return await this.fetch(`/contacts/${contactId}`, {
63
- method: 'PUT',
64
- data,
65
- });
66
- }
67
-
68
- async updateCompany({
69
- data,
70
- companyId,
71
- }: {
72
- companyId: string;
73
- data: Record<string, any>;
74
- }) {
75
- return await this.fetch(`/companies/${companyId}`, {
76
- method: 'PUT',
77
- data,
68
+ // User
69
+ async getUserByUserId(userId: string) {
70
+ return await this.fetch<{
71
+ type: 'list';
72
+ data: { id: string }[] | undefined;
73
+ total_count: 0;
74
+ pages: {
75
+ type: 'pages';
76
+ page: 1;
77
+ per_page: 10;
78
+ total_pages: 0;
79
+ };
80
+ }>('/contacts/search', {
81
+ method: 'POST',
82
+ data: {
83
+ query: {
84
+ field: 'external_id',
85
+ operator: '=',
86
+ value: userId,
87
+ },
88
+ },
78
89
  });
79
90
  }
80
-
81
91
  async createUser({
82
92
  data,
83
93
  userId,
@@ -94,27 +104,32 @@ export class IntercomAPI {
94
104
  data: { ...data, external_id: userId },
95
105
  });
96
106
  }
97
-
98
- async createCompany({
107
+ async updateUser({
99
108
  data,
100
- tenantId,
109
+ contactId,
101
110
  }: {
102
- tenantId: string;
111
+ contactId: string;
103
112
  data: {
104
- name: string;
105
- remote_created_at: string;
113
+ email?: string;
114
+ name?: string;
106
115
  custom_attributes: Record<string, any>;
107
116
  };
108
117
  }) {
109
- return await this.fetch('/companies', {
110
- method: 'POST',
111
- data: {
112
- ...data,
113
- company_id: tenantId,
114
- },
118
+ return await this.fetch(`/contacts/${contactId}`, {
119
+ method: 'PUT',
120
+ data,
121
+ });
122
+ }
123
+ async deleteUser(intercom_contact_id: string) {
124
+ return await this.fetch<{
125
+ id: '6657adf56abd0167d9419d1c';
126
+ external_id: '70';
127
+ type: 'contact';
128
+ deleted: true;
129
+ }>(`/contacts/${intercom_contact_id}`, {
130
+ method: 'DELETE',
115
131
  });
116
132
  }
117
-
118
133
  async createCompanyUser(data: {
119
134
  intercom_contact_id: string;
120
135
  intercom_company_id: string;
@@ -126,7 +141,34 @@ export class IntercomAPI {
126
141
  },
127
142
  });
128
143
  }
144
+ async deleteCompanyUser({
145
+ intercom_company_id,
146
+ intercom_contact_id,
147
+ }: {
148
+ intercom_contact_id: string;
149
+ intercom_company_id: string;
150
+ }) {
151
+ return await this.fetch<{
152
+ id: '6657adc96abd0167d9419ca7';
153
+ }>(`/contacts/${intercom_contact_id}/companies/${intercom_company_id}`, {
154
+ method: 'DELETE',
155
+ });
156
+ }
157
+ async trackEvent(data: {
158
+ user_id: string;
159
+ event_name: string;
160
+ metadata: Record<string, any>;
161
+ }) {
162
+ return await this.fetch('/events', {
163
+ method: 'POST',
164
+ data: {
165
+ created_at: Math.floor(new Date().getTime() / 1000), // to seconds
166
+ ...data,
167
+ },
168
+ });
169
+ }
129
170
 
171
+ // Company
130
172
  async getCompanyByTenantId(tenantId: string) {
131
173
  return await this.fetch<{
132
174
  type: 'list';
@@ -168,41 +210,37 @@ export class IntercomAPI {
168
210
  method: 'GET',
169
211
  });
170
212
  }
171
-
172
- async getUserByUserId(userId: string) {
173
- return await this.fetch<{
174
- type: 'list';
175
- data: { id: string }[] | undefined;
176
- total_count: 0;
177
- pages: {
178
- type: 'pages';
179
- page: 1;
180
- per_page: 10;
181
- total_pages: 0;
182
- };
183
- }>('/contacts/search', {
213
+ async createCompany({
214
+ data,
215
+ tenantId,
216
+ }: {
217
+ tenantId: string;
218
+ data: {
219
+ name: string;
220
+ remote_created_at: string;
221
+ custom_attributes: Record<string, any>;
222
+ };
223
+ }) {
224
+ return await this.fetch('/companies', {
184
225
  method: 'POST',
185
226
  data: {
186
- query: {
187
- field: 'external_id',
188
- operator: '=',
189
- value: userId,
190
- },
227
+ ...data,
228
+ company_id: tenantId,
191
229
  },
192
230
  });
193
231
  }
194
-
195
- async deleteUser(intercom_contact_id: string) {
196
- return await this.fetch<{
197
- id: '6657adf56abd0167d9419d1c';
198
- external_id: '70';
199
- type: 'contact';
200
- deleted: true;
201
- }>(`/contacts/${intercom_contact_id}`, {
202
- method: 'DELETE',
232
+ async updateCompany({
233
+ data,
234
+ companyId,
235
+ }: {
236
+ companyId: string;
237
+ data: Record<string, any>;
238
+ }) {
239
+ return await this.fetch(`/companies/${companyId}`, {
240
+ method: 'PUT',
241
+ data,
203
242
  });
204
243
  }
205
-
206
244
  async deleteCompany(intercom_company_id: string) {
207
245
  return await this.fetch<{
208
246
  id: '6657adc96abd0167d9419ca7';
@@ -212,35 +250,8 @@ export class IntercomAPI {
212
250
  method: 'DELETE',
213
251
  });
214
252
  }
215
-
216
- async deleteCompanyUser({
217
- intercom_company_id,
218
- intercom_contact_id,
219
- }: {
220
- intercom_contact_id: string;
221
- intercom_company_id: string;
222
- }) {
223
- return await this.fetch<{
224
- id: '6657adc96abd0167d9419ca7';
225
- }>(`/contacts/${intercom_contact_id}/companies/${intercom_company_id}`, {
226
- method: 'DELETE',
227
- });
228
- }
229
-
230
- async trackEvent(data: {
231
- user_id: string;
232
- event_name: string;
233
- metadata: Record<string, any>;
234
- }) {
235
- return await this.fetch('/events', {
236
- method: 'POST',
237
- data: {
238
- created_at: Math.floor(new Date().getTime() / 1000), // to seconds
239
- ...data,
240
- },
241
- });
242
- }
243
253
  }
244
- export function useIntercom(token: string, log: Log) {
254
+
255
+ export function useIntercom(token: string, log?: Log) {
245
256
  return new IntercomAPI(token, log);
246
257
  }