@vrplatform/log 2.0.51 → 2.0.52

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.
Files changed (51) hide show
  1. package/build/main/tracking/_intercom.d.ts +109 -0
  2. package/build/main/tracking/_intercom.js +139 -0
  3. package/build/main/tracking/_intercom.js.map +1 -0
  4. package/build/main/tracking/eventTypes.d.ts +16 -0
  5. package/build/main/{type.js → tracking/eventTypes.js} +1 -1
  6. package/build/main/tracking/eventTypes.js.map +1 -0
  7. package/build/main/tracking/intercom.d.ts +109 -0
  8. package/build/main/tracking/intercom.js +139 -0
  9. package/build/main/tracking/intercom.js.map +1 -0
  10. package/build/main/tracking/types.d.ts +8 -4
  11. package/build/module/tracking/_intercom.d.ts +109 -0
  12. package/build/module/tracking/_intercom.js +136 -0
  13. package/build/module/tracking/_intercom.js.map +1 -0
  14. package/build/module/tracking/eventTypes.d.ts +16 -0
  15. package/build/module/tracking/eventTypes.js +2 -0
  16. package/build/module/tracking/eventTypes.js.map +1 -0
  17. package/build/module/tracking/intercom.d.ts +109 -0
  18. package/build/module/tracking/intercom.js +136 -0
  19. package/build/module/tracking/intercom.js.map +1 -0
  20. package/build/module/tracking/types.d.ts +8 -4
  21. package/package.json +1 -1
  22. package/src/tracking/types.ts +10 -4
  23. package/build/main/baselog.d.ts +0 -19
  24. package/build/main/baselog.js +0 -137
  25. package/build/main/baselog.js.map +0 -1
  26. package/build/main/color.d.ts +0 -54
  27. package/build/main/color.js +0 -371
  28. package/build/main/color.js.map +0 -1
  29. package/build/main/common.d.ts +0 -29
  30. package/build/main/common.js +0 -86
  31. package/build/main/common.js.map +0 -1
  32. package/build/main/index.spec.d.ts +0 -0
  33. package/build/main/index.spec.js +0 -2
  34. package/build/main/index.spec.js.map +0 -1
  35. package/build/main/type.d.ts +0 -39
  36. package/build/main/type.js.map +0 -1
  37. package/build/module/baselog.d.ts +0 -19
  38. package/build/module/baselog.js +0 -120
  39. package/build/module/baselog.js.map +0 -1
  40. package/build/module/color.d.ts +0 -54
  41. package/build/module/color.js +0 -375
  42. package/build/module/color.js.map +0 -1
  43. package/build/module/common.d.ts +0 -29
  44. package/build/module/common.js +0 -80
  45. package/build/module/common.js.map +0 -1
  46. package/build/module/index.spec.d.ts +0 -0
  47. package/build/module/index.spec.js +0 -2
  48. package/build/module/index.spec.js.map +0 -1
  49. package/build/module/type.d.ts +0 -39
  50. package/build/module/type.js +0 -2
  51. package/build/module/type.js.map +0 -1
@@ -0,0 +1,109 @@
1
+ import type { Log } from '../log';
2
+ export declare class IntercomAPI {
3
+ constructor(token: string, log?: Log);
4
+ private headers;
5
+ private log?;
6
+ private fetch;
7
+ getUserByUserId(userId: string): Promise<{
8
+ type: "list";
9
+ data: {
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;
18
+ };
19
+ } | undefined>;
20
+ createUser({ data, userId, }: {
21
+ userId: string;
22
+ data: {
23
+ email: string;
24
+ name: string;
25
+ custom_attributes: Record<string, any>;
26
+ };
27
+ }): Promise<unknown>;
28
+ updateUser({ data, contactId, }: {
29
+ contactId: string;
30
+ data: {
31
+ email?: string;
32
+ name?: string;
33
+ custom_attributes: Record<string, any>;
34
+ [key: string]: any;
35
+ };
36
+ }): Promise<unknown>;
37
+ deleteUser(intercom_contact_id: string): Promise<{
38
+ id: "6657adf56abd0167d9419d1c";
39
+ external_id: "70";
40
+ type: "contact";
41
+ deleted: true;
42
+ } | undefined>;
43
+ createCompanyUser(data: {
44
+ intercom_contact_id: string;
45
+ intercom_company_id: string;
46
+ }): Promise<unknown>;
47
+ deleteCompanyUser({ intercom_company_id, intercom_contact_id, }: {
48
+ intercom_contact_id: string;
49
+ intercom_company_id: string;
50
+ }): Promise<{
51
+ id: "6657adc96abd0167d9419ca7";
52
+ } | undefined>;
53
+ trackEvent(data: {
54
+ user_id: string;
55
+ event_name: string;
56
+ metadata: Record<string, any>;
57
+ }): Promise<unknown>;
58
+ getCompanyByTenantId(tenantId: string): Promise<{
59
+ type: "list";
60
+ data: [{
61
+ type: "company";
62
+ company_id: "remote_companies_scroll_2";
63
+ id: "664df5436abd01f7945e1a78";
64
+ app_id: "this_is_an_id111_that_should_be_at_least_";
65
+ name: "IntercomQATest1";
66
+ remote_created_at: 1716385091;
67
+ created_at: 1716385091;
68
+ updated_at: 1716385091;
69
+ monthly_spend: 0;
70
+ session_count: 0;
71
+ user_count: 4;
72
+ tags: {
73
+ type: "tag.list";
74
+ tags: [];
75
+ };
76
+ segments: {
77
+ type: "segment.list";
78
+ segments: [];
79
+ };
80
+ custom_attributes: Record<string, string>;
81
+ }] | undefined;
82
+ pages: {
83
+ type: "pages";
84
+ next: null;
85
+ page: 1;
86
+ per_page: 15;
87
+ total_pages: 1;
88
+ };
89
+ total_count: 1;
90
+ } | undefined>;
91
+ createCompany({ data, tenantId, }: {
92
+ tenantId: string;
93
+ data: {
94
+ name: string;
95
+ remote_created_at: number;
96
+ custom_attributes: Record<string, any>;
97
+ };
98
+ }): Promise<unknown>;
99
+ updateCompany({ data, companyId, }: {
100
+ companyId: string;
101
+ data: Record<string, any>;
102
+ }): Promise<unknown>;
103
+ deleteCompany(intercom_company_id: string): Promise<{
104
+ id: "6657adc96abd0167d9419ca7";
105
+ object: "company";
106
+ deleted: true;
107
+ } | undefined>;
108
+ }
109
+ export declare function useIntercom(token: string, log?: Log): IntercomAPI;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntercomAPI = void 0;
4
+ exports.useIntercom = useIntercom;
5
+ class IntercomAPI {
6
+ constructor(token, log) {
7
+ this.headers = {
8
+ 'Content-Type': 'application/json',
9
+ Accept: 'application/json',
10
+ 'Intercom-Version': '2.11',
11
+ Authorization: `Bearer ${token}`,
12
+ };
13
+ this.log = log;
14
+ }
15
+ async fetch(path, options) {
16
+ if (options?.data) {
17
+ options.body = JSON.stringify(options.data);
18
+ options.data = undefined;
19
+ }
20
+ try {
21
+ const result = await fetch(`https://api.intercom.io${path}`, {
22
+ method: 'GET',
23
+ headers: this.headers,
24
+ ...options,
25
+ });
26
+ if (!result.ok) {
27
+ this.log?.info('Failed to fetch from Intercom', {
28
+ result: {
29
+ status: result.status,
30
+ statusText: result.statusText,
31
+ body: await result.text(),
32
+ },
33
+ });
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
+ }
48
+ }
49
+ return result.status === 202 ? {} : (await result.json());
50
+ }
51
+ catch (error) {
52
+ this.log?.error(error);
53
+ return undefined;
54
+ }
55
+ }
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
+ },
67
+ });
68
+ }
69
+ async createUser({ data, userId, }) {
70
+ return await this.fetch('/contacts', {
71
+ method: 'POST',
72
+ data: { ...data, external_id: userId },
73
+ });
74
+ }
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',
84
+ });
85
+ }
86
+ async createCompanyUser(data) {
87
+ return await this.fetch(`/contacts/${data.intercom_contact_id}/companies`, {
88
+ method: 'POST',
89
+ data: {
90
+ id: data.intercom_company_id,
91
+ },
92
+ });
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
109
+ async getCompanyByTenantId(tenantId) {
110
+ return await this.fetch(`/companies?company_id=${tenantId}`, {
111
+ method: 'GET',
112
+ });
113
+ }
114
+ async createCompany({ data, tenantId, }) {
115
+ return await this.fetch('/companies', {
116
+ method: 'POST',
117
+ data: {
118
+ ...data,
119
+ company_id: tenantId,
120
+ },
121
+ });
122
+ }
123
+ async updateCompany({ data, companyId, }) {
124
+ return await this.fetch(`/companies/${companyId}`, {
125
+ method: 'PUT',
126
+ data,
127
+ });
128
+ }
129
+ async deleteCompany(intercom_company_id) {
130
+ return await this.fetch(`/companies/${intercom_company_id}`, {
131
+ method: 'DELETE',
132
+ });
133
+ }
134
+ }
135
+ exports.IntercomAPI = IntercomAPI;
136
+ function useIntercom(token, log) {
137
+ return new IntercomAPI(token, log);
138
+ }
139
+ //# sourceMappingURL=_intercom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_intercom.js","sourceRoot":"src/","sources":["tracking/_intercom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ type AuthEvent = 'account_signin_completed' | 'account_signup_code_requested' | 'account_signup_code_completed' | 'account_signup_code_failed' | 'account_signup_completed' | 'account_password_reset_requested' | 'account_password_reset_failed' | 'account_password_reset_completed' | 'account_invitation_accepted' | 'account_signed_out';
2
+ type TeamEvent = 'team_added' | 'team_info_updated' | 'team_deleted' | 'team_member_removed';
3
+ type ConnectionEvent = 'connection_created' | 'connection_reconnected' | 'connection_deleted' | 'connection_requested';
4
+ type OwnershipEvent = 'ownership_created' | 'ownership_updated' | 'ownership_deleted';
5
+ type OwnerEvent = 'owner_created' | 'owner_updated' | 'owner_deleted' | 'owner_tax_info_modal_opened' | 'owner_tax_info_modal_submitted';
6
+ type SetupEvent = 'setup_classes_set' | 'setup_accounting_version_completed' | 'setup_accounting_config_completed' | 'setup_owner_imported' | 'setup_listing_imported';
7
+ type AutomationEvent = 'automation_created' | 'automation_updated' | 'automation_deleted';
8
+ type TaxStatementEvent = 'tax_statement_preview_opened' | 'tax_statement_downloaded';
9
+ type GLOwnerStatementEvent = 'gl_owner_statement_preview_opened' | 'gl_owner_statement_downloaded';
10
+ type HyperlineEvent = 'hyperline_invoice_ready' | 'hyperline_invoice_settled' | 'hyperline_trial_started' | 'hyperline_trial_ended' | 'hyperline_subscription_activated' | 'hyperline_subscription_cancelled' | 'hyperline_subscription_created' | 'hyperline_subscription_errored' | 'hyperline_subscription_paused' | 'hyperline_subscription_voided' | 'hyperline_subscription_charged' | 'hyperline_customer_created' | 'hyperline_customer_updated' | 'hyperline_payment_method_created' | 'hyperline_payment_method_errored' | 'hyperline_payment_method_deleted';
11
+ type ListingEvent = 'listing_activated' | 'listing_deactivated';
12
+ type ReportEvent = 'listings_reported';
13
+ type UserEvent = 'update_refresh_accepted' | 'owner_statement_opened';
14
+ type TestEvent = 'test_event' | 'test_error';
15
+ export type TrackingEvent = AuthEvent | TeamEvent | ConnectionEvent | OwnershipEvent | OwnerEvent | SetupEvent | AutomationEvent | TaxStatementEvent | GLOwnerStatementEvent | HyperlineEvent | UserEvent | ListingEvent | ReportEvent | TestEvent;
16
+ export {};
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=type.js.map
3
+ //# sourceMappingURL=eventTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventTypes.js","sourceRoot":"src/","sources":["tracking/eventTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,109 @@
1
+ import type { Log } from '../log';
2
+ export declare class IntercomAPI {
3
+ constructor(token: string, log?: Log);
4
+ private headers;
5
+ private log?;
6
+ private fetch;
7
+ getUserByUserId(userId: string): Promise<{
8
+ type: "list";
9
+ data: {
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;
18
+ };
19
+ } | undefined>;
20
+ createUser({ data, userId, }: {
21
+ userId: string;
22
+ data: {
23
+ email: string;
24
+ name: string;
25
+ custom_attributes: Record<string, any>;
26
+ };
27
+ }): Promise<unknown>;
28
+ updateUser({ data, contactId, }: {
29
+ contactId: string;
30
+ data: {
31
+ email?: string;
32
+ name?: string;
33
+ custom_attributes: Record<string, any>;
34
+ [key: string]: any;
35
+ };
36
+ }): Promise<unknown>;
37
+ deleteUser(intercom_contact_id: string): Promise<{
38
+ id: "6657adf56abd0167d9419d1c";
39
+ external_id: "70";
40
+ type: "contact";
41
+ deleted: true;
42
+ } | undefined>;
43
+ createCompanyUser(data: {
44
+ intercom_contact_id: string;
45
+ intercom_company_id: string;
46
+ }): Promise<unknown>;
47
+ deleteCompanyUser({ intercom_company_id, intercom_contact_id, }: {
48
+ intercom_contact_id: string;
49
+ intercom_company_id: string;
50
+ }): Promise<{
51
+ id: "6657adc96abd0167d9419ca7";
52
+ } | undefined>;
53
+ trackEvent(data: {
54
+ user_id: string;
55
+ event_name: string;
56
+ metadata: Record<string, any>;
57
+ }): Promise<unknown>;
58
+ getCompanyByTenantId(tenantId: string): Promise<{
59
+ type: "list";
60
+ data: [{
61
+ type: "company";
62
+ company_id: "remote_companies_scroll_2";
63
+ id: "664df5436abd01f7945e1a78";
64
+ app_id: "this_is_an_id111_that_should_be_at_least_";
65
+ name: "IntercomQATest1";
66
+ remote_created_at: 1716385091;
67
+ created_at: 1716385091;
68
+ updated_at: 1716385091;
69
+ monthly_spend: 0;
70
+ session_count: 0;
71
+ user_count: 4;
72
+ tags: {
73
+ type: "tag.list";
74
+ tags: [];
75
+ };
76
+ segments: {
77
+ type: "segment.list";
78
+ segments: [];
79
+ };
80
+ custom_attributes: Record<string, string>;
81
+ }] | undefined;
82
+ pages: {
83
+ type: "pages";
84
+ next: null;
85
+ page: 1;
86
+ per_page: 15;
87
+ total_pages: 1;
88
+ };
89
+ total_count: 1;
90
+ } | undefined>;
91
+ createCompany({ data, tenantId, }: {
92
+ tenantId: string;
93
+ data: {
94
+ name: string;
95
+ remote_created_at: number;
96
+ custom_attributes: Record<string, any>;
97
+ };
98
+ }): Promise<unknown>;
99
+ updateCompany({ data, companyId, }: {
100
+ companyId: string;
101
+ data: Record<string, any>;
102
+ }): Promise<unknown>;
103
+ deleteCompany(intercom_company_id: string): Promise<{
104
+ id: "6657adc96abd0167d9419ca7";
105
+ object: "company";
106
+ deleted: true;
107
+ } | undefined>;
108
+ }
109
+ export declare function useIntercom(token: string, log?: Log): IntercomAPI;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntercomAPI = void 0;
4
+ exports.useIntercom = useIntercom;
5
+ class IntercomAPI {
6
+ constructor(token, log) {
7
+ this.headers = {
8
+ 'Content-Type': 'application/json',
9
+ Accept: 'application/json',
10
+ 'Intercom-Version': '2.11',
11
+ Authorization: `Bearer ${token}`,
12
+ };
13
+ this.log = log;
14
+ }
15
+ async fetch(path, options) {
16
+ if (options?.data) {
17
+ options.body = JSON.stringify(options.data);
18
+ options.data = undefined;
19
+ }
20
+ try {
21
+ const result = await fetch(`https://api.intercom.io${path}`, {
22
+ method: 'GET',
23
+ headers: this.headers,
24
+ ...options,
25
+ });
26
+ if (!result.ok) {
27
+ this.log?.info('Failed to fetch from Intercom', {
28
+ result: {
29
+ status: result.status,
30
+ statusText: result.statusText,
31
+ body: await result.text(),
32
+ },
33
+ });
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
+ }
48
+ }
49
+ return result.status === 202 ? {} : (await result.json());
50
+ }
51
+ catch (error) {
52
+ this.log?.error(error);
53
+ return undefined;
54
+ }
55
+ }
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
+ },
67
+ });
68
+ }
69
+ async createUser({ data, userId, }) {
70
+ return await this.fetch('/contacts', {
71
+ method: 'POST',
72
+ data: { ...data, external_id: userId },
73
+ });
74
+ }
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',
84
+ });
85
+ }
86
+ async createCompanyUser(data) {
87
+ return await this.fetch(`/contacts/${data.intercom_contact_id}/companies`, {
88
+ method: 'POST',
89
+ data: {
90
+ id: data.intercom_company_id,
91
+ },
92
+ });
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
109
+ async getCompanyByTenantId(tenantId) {
110
+ return await this.fetch(`/companies?company_id=${tenantId}`, {
111
+ method: 'GET',
112
+ });
113
+ }
114
+ async createCompany({ data, tenantId, }) {
115
+ return await this.fetch('/companies', {
116
+ method: 'POST',
117
+ data: {
118
+ ...data,
119
+ company_id: tenantId,
120
+ },
121
+ });
122
+ }
123
+ async updateCompany({ data, companyId, }) {
124
+ return await this.fetch(`/companies/${companyId}`, {
125
+ method: 'PUT',
126
+ data,
127
+ });
128
+ }
129
+ async deleteCompany(intercom_company_id) {
130
+ return await this.fetch(`/companies/${intercom_company_id}`, {
131
+ method: 'DELETE',
132
+ });
133
+ }
134
+ }
135
+ exports.IntercomAPI = IntercomAPI;
136
+ function useIntercom(token, log) {
137
+ return new IntercomAPI(token, log);
138
+ }
139
+ //# sourceMappingURL=intercom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intercom.js","sourceRoot":"src/","sources":["tracking/intercom.ts"],"names":[],"mappings":"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"}
@@ -107,6 +107,7 @@ export type TrackingEventProps = {
107
107
  hyperline_subscription_created: HyperlineSubscriptionCreatedProps;
108
108
  hyperline_subscription_errored: HyperlineSubscriptionErroredProps;
109
109
  hyperline_subscription_paused: HyperlineSubscriptionPausedProps;
110
+ hyperline_subscription_reactivated: HyperlineSubscriptionReactivatedProps;
110
111
  hyperline_subscription_voided: HyperlineSubscriptionVoidedProps;
111
112
  hyperline_subscription_charged: HyperlineSubscriptionChargedProps;
112
113
  hyperline_customer_created: HyperlineCustomerCreatedProps;
@@ -284,9 +285,7 @@ type HyperlineInvoiceErroredProps = Partial<{
284
285
  invoiceId: string;
285
286
  amount: number;
286
287
  amountOrigin: number;
287
- currency: string;
288
288
  customerId: string;
289
- taxAmount: number;
290
289
  erroredAt: string;
291
290
  }>;
292
291
  type HyperlineInvoiceReadyProps = Partial<{
@@ -317,9 +316,7 @@ type HyperlineInvoiceVoidedProps = Partial<{
317
316
  invoiceId: string;
318
317
  amount: number;
319
318
  amountOrigin: number;
320
- currency: string;
321
319
  customerId: string;
322
- taxAmount: number;
323
320
  voidedAt: string;
324
321
  }>;
325
322
  type HyperlinePaymentMethodCreatedProps = Partial<{
@@ -407,6 +404,13 @@ type HyperlineSubscriptionPausedProps = Partial<{
407
404
  tenantId: string;
408
405
  webhookEventType: 'subscription.paused';
409
406
  }>;
407
+ type HyperlineSubscriptionReactivatedProps = Partial<{
408
+ subscriptionId: string;
409
+ subscriptionStatus: SubscriptionStatus;
410
+ plan: string;
411
+ tenantId: string;
412
+ webhookEventType: 'subscription.reactivated';
413
+ }>;
410
414
  type HyperlineSubscriptionVoidedProps = Partial<{
411
415
  subscriptionId: string;
412
416
  subscriptionStatus: SubscriptionStatus;