@agnocon/piece-bigin-by-zoho 0.1.6

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 (157) hide show
  1. package/LICENSE.MIT-AP +24 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +72 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/actions/create-call.d.ts +16 -0
  7. package/dist/lib/actions/create-call.d.ts.map +1 -0
  8. package/dist/lib/actions/create-call.js +162 -0
  9. package/dist/lib/actions/create-call.js.map +1 -0
  10. package/dist/lib/actions/create-company.d.ts +14 -0
  11. package/dist/lib/actions/create-company.d.ts.map +1 -0
  12. package/dist/lib/actions/create-company.js +108 -0
  13. package/dist/lib/actions/create-company.js.map +1 -0
  14. package/dist/lib/actions/create-contact.d.ts +18 -0
  15. package/dist/lib/actions/create-contact.d.ts.map +1 -0
  16. package/dist/lib/actions/create-contact.js +130 -0
  17. package/dist/lib/actions/create-contact.js.map +1 -0
  18. package/dist/lib/actions/create-event.d.ts +18 -0
  19. package/dist/lib/actions/create-event.d.ts.map +1 -0
  20. package/dist/lib/actions/create-event.js +360 -0
  21. package/dist/lib/actions/create-event.js.map +1 -0
  22. package/dist/lib/actions/create-pipeline-record.d.ts +16 -0
  23. package/dist/lib/actions/create-pipeline-record.d.ts.map +1 -0
  24. package/dist/lib/actions/create-pipeline-record.js +219 -0
  25. package/dist/lib/actions/create-pipeline-record.js.map +1 -0
  26. package/dist/lib/actions/create-task.d.ts +16 -0
  27. package/dist/lib/actions/create-task.d.ts.map +1 -0
  28. package/dist/lib/actions/create-task.js +380 -0
  29. package/dist/lib/actions/create-task.js.map +1 -0
  30. package/dist/lib/actions/search-company-record.d.ts +5 -0
  31. package/dist/lib/actions/search-company-record.d.ts.map +1 -0
  32. package/dist/lib/actions/search-company-record.js +58 -0
  33. package/dist/lib/actions/search-company-record.js.map +1 -0
  34. package/dist/lib/actions/search-contact-record.d.ts +5 -0
  35. package/dist/lib/actions/search-contact-record.d.ts.map +1 -0
  36. package/dist/lib/actions/search-contact-record.js +82 -0
  37. package/dist/lib/actions/search-contact-record.js.map +1 -0
  38. package/dist/lib/actions/search-pipeline-records.d.ts +5 -0
  39. package/dist/lib/actions/search-pipeline-records.d.ts.map +1 -0
  40. package/dist/lib/actions/search-pipeline-records.js +53 -0
  41. package/dist/lib/actions/search-pipeline-records.js.map +1 -0
  42. package/dist/lib/actions/search-product.d.ts +5 -0
  43. package/dist/lib/actions/search-product.d.ts.map +1 -0
  44. package/dist/lib/actions/search-product.js +60 -0
  45. package/dist/lib/actions/search-product.js.map +1 -0
  46. package/dist/lib/actions/search-user.d.ts +7 -0
  47. package/dist/lib/actions/search-user.d.ts.map +1 -0
  48. package/dist/lib/actions/search-user.js +75 -0
  49. package/dist/lib/actions/search-user.js.map +1 -0
  50. package/dist/lib/actions/update-company.d.ts +7 -0
  51. package/dist/lib/actions/update-company.d.ts.map +1 -0
  52. package/dist/lib/actions/update-company.js +224 -0
  53. package/dist/lib/actions/update-company.js.map +1 -0
  54. package/dist/lib/actions/update-contact.d.ts +7 -0
  55. package/dist/lib/actions/update-contact.d.ts.map +1 -0
  56. package/dist/lib/actions/update-contact.js +248 -0
  57. package/dist/lib/actions/update-contact.js.map +1 -0
  58. package/dist/lib/actions/update-event.d.ts +13 -0
  59. package/dist/lib/actions/update-event.d.ts.map +1 -0
  60. package/dist/lib/actions/update-event.js +466 -0
  61. package/dist/lib/actions/update-event.js.map +1 -0
  62. package/dist/lib/actions/update-pipeline-record.d.ts +14 -0
  63. package/dist/lib/actions/update-pipeline-record.d.ts.map +1 -0
  64. package/dist/lib/actions/update-pipeline-record.js +205 -0
  65. package/dist/lib/actions/update-pipeline-record.js.map +1 -0
  66. package/dist/lib/actions/update-task.d.ts +13 -0
  67. package/dist/lib/actions/update-task.d.ts.map +1 -0
  68. package/dist/lib/actions/update-task.js +449 -0
  69. package/dist/lib/actions/update-task.js.map +1 -0
  70. package/dist/lib/auth.d.ts +2 -0
  71. package/dist/lib/auth.d.ts.map +1 -0
  72. package/dist/lib/auth.js +59 -0
  73. package/dist/lib/auth.js.map +1 -0
  74. package/dist/lib/common/constants.d.ts +23 -0
  75. package/dist/lib/common/constants.d.ts.map +1 -0
  76. package/dist/lib/common/constants.js +72 -0
  77. package/dist/lib/common/constants.js.map +1 -0
  78. package/dist/lib/common/helpers.d.ts +11 -0
  79. package/dist/lib/common/helpers.d.ts.map +1 -0
  80. package/dist/lib/common/helpers.js +40 -0
  81. package/dist/lib/common/helpers.js.map +1 -0
  82. package/dist/lib/common/props.d.ts +10 -0
  83. package/dist/lib/common/props.d.ts.map +1 -0
  84. package/dist/lib/common/props.js +217 -0
  85. package/dist/lib/common/props.js.map +1 -0
  86. package/dist/lib/common/request.d.ts +35 -0
  87. package/dist/lib/common/request.d.ts.map +1 -0
  88. package/dist/lib/common/request.js +226 -0
  89. package/dist/lib/common/request.js.map +1 -0
  90. package/dist/lib/triggers/company-updated.d.ts +3 -0
  91. package/dist/lib/triggers/company-updated.d.ts.map +1 -0
  92. package/dist/lib/triggers/company-updated.js +66 -0
  93. package/dist/lib/triggers/company-updated.js.map +1 -0
  94. package/dist/lib/triggers/contact-updated.d.ts +3 -0
  95. package/dist/lib/triggers/contact-updated.d.ts.map +1 -0
  96. package/dist/lib/triggers/contact-updated.js +66 -0
  97. package/dist/lib/triggers/contact-updated.js.map +1 -0
  98. package/dist/lib/triggers/new-call-created.d.ts +3 -0
  99. package/dist/lib/triggers/new-call-created.d.ts.map +1 -0
  100. package/dist/lib/triggers/new-call-created.js +66 -0
  101. package/dist/lib/triggers/new-call-created.js.map +1 -0
  102. package/dist/lib/triggers/new-company-created.d.ts +3 -0
  103. package/dist/lib/triggers/new-company-created.d.ts.map +1 -0
  104. package/dist/lib/triggers/new-company-created.js +66 -0
  105. package/dist/lib/triggers/new-company-created.js.map +1 -0
  106. package/dist/lib/triggers/new-contact-created.d.ts +3 -0
  107. package/dist/lib/triggers/new-contact-created.d.ts.map +1 -0
  108. package/dist/lib/triggers/new-contact-created.js +75 -0
  109. package/dist/lib/triggers/new-contact-created.js.map +1 -0
  110. package/dist/lib/triggers/new-event-created.d.ts +3 -0
  111. package/dist/lib/triggers/new-event-created.d.ts.map +1 -0
  112. package/dist/lib/triggers/new-event-created.js +66 -0
  113. package/dist/lib/triggers/new-event-created.js.map +1 -0
  114. package/dist/lib/triggers/new-pipeline-record.d.ts +3 -0
  115. package/dist/lib/triggers/new-pipeline-record.d.ts.map +1 -0
  116. package/dist/lib/triggers/new-pipeline-record.js +66 -0
  117. package/dist/lib/triggers/new-pipeline-record.js.map +1 -0
  118. package/dist/lib/triggers/new-task-created.d.ts +3 -0
  119. package/dist/lib/triggers/new-task-created.d.ts.map +1 -0
  120. package/dist/lib/triggers/new-task-created.js +66 -0
  121. package/dist/lib/triggers/new-task-created.js.map +1 -0
  122. package/dist/lib/triggers/pipeline-record-updated.d.ts +3 -0
  123. package/dist/lib/triggers/pipeline-record-updated.d.ts.map +1 -0
  124. package/dist/lib/triggers/pipeline-record-updated.js +66 -0
  125. package/dist/lib/triggers/pipeline-record-updated.js.map +1 -0
  126. package/package.json +46 -0
  127. package/src/index.ts +72 -0
  128. package/src/lib/actions/create-call.ts +168 -0
  129. package/src/lib/actions/create-company.ts +124 -0
  130. package/src/lib/actions/create-contact.ts +151 -0
  131. package/src/lib/actions/create-event.ts +399 -0
  132. package/src/lib/actions/create-pipeline-record.ts +255 -0
  133. package/src/lib/actions/create-task.ts +426 -0
  134. package/src/lib/actions/search-company-record.ts +57 -0
  135. package/src/lib/actions/search-contact-record.ts +79 -0
  136. package/src/lib/actions/search-pipeline-records.ts +52 -0
  137. package/src/lib/actions/search-product.ts +60 -0
  138. package/src/lib/actions/search-user.ts +70 -0
  139. package/src/lib/actions/update-company.ts +235 -0
  140. package/src/lib/actions/update-contact.ts +261 -0
  141. package/src/lib/actions/update-event.ts +528 -0
  142. package/src/lib/actions/update-pipeline-record.ts +235 -0
  143. package/src/lib/actions/update-task.ts +499 -0
  144. package/src/lib/auth.ts +57 -0
  145. package/src/lib/common/constants.ts +68 -0
  146. package/src/lib/common/helpers.ts +46 -0
  147. package/src/lib/common/props.ts +270 -0
  148. package/src/lib/common/request.ts +285 -0
  149. package/src/lib/triggers/company-updated.ts +69 -0
  150. package/src/lib/triggers/contact-updated.ts +65 -0
  151. package/src/lib/triggers/new-call-created.ts +69 -0
  152. package/src/lib/triggers/new-company-created.ts +69 -0
  153. package/src/lib/triggers/new-contact-created.ts +75 -0
  154. package/src/lib/triggers/new-event-created.ts +69 -0
  155. package/src/lib/triggers/new-pipeline-record.ts +69 -0
  156. package/src/lib/triggers/new-task-created.ts +69 -0
  157. package/src/lib/triggers/pipeline-record-updated.ts +69 -0
@@ -0,0 +1,69 @@
1
+ import { createTrigger, TriggerStrategy } from '@agnocon/pieces-framework';
2
+ import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
3
+ import { biginAuth } from '../auth';
4
+ import { biginApiService } from '../common/request';
5
+
6
+ const CACHE_KEY = 'bigin_new_call_created_trigger';
7
+
8
+ export const newCallCreated = createTrigger({
9
+ auth: biginAuth,
10
+ name: 'newCallCreated',
11
+ displayName: 'New Call Created',
12
+ description: 'Triggers when a new call log is created',
13
+ aiMetadata: {
14
+ description: 'Fires when a new call log entry is created in Bigin CRM, via a Calls.create webhook. Represents a newly recorded phone interaction.',
15
+ },
16
+ props: {},
17
+ sampleData: {},
18
+ type: TriggerStrategy.WEBHOOK,
19
+ async onEnable(context) {
20
+ try {
21
+ const channel_id = Date.now().toString();
22
+ const { api_domain } = context.auth.data;
23
+
24
+ const webhookData = {
25
+ watch: [
26
+ {
27
+ channel_id,
28
+ events: ['Calls.create'],
29
+ notify_url: context.webhookUrl,
30
+ token: ZOHO_WEBHOOK_TOKEN,
31
+ },
32
+ ],
33
+ };
34
+
35
+ await biginApiService.createWebhook(
36
+ context.auth.access_token,
37
+ webhookData,
38
+ api_domain
39
+ );
40
+
41
+ await context.store.put(CACHE_KEY, channel_id);
42
+ } catch (error) {
43
+ console.error('Failed to enable Zoho webhook');
44
+ }
45
+ },
46
+ async onDisable(context) {
47
+ const channel_id = (await context.store.get(CACHE_KEY)) as string;
48
+ if (!channel_id) return;
49
+
50
+ const { api_domain } = context.auth.data;
51
+
52
+ await biginApiService.deleteWebhook(
53
+ context.auth.access_token,
54
+ api_domain,
55
+ channel_id
56
+ );
57
+
58
+ await context.store.delete(CACHE_KEY);
59
+ },
60
+ async run(context) {
61
+ const { token } = context.payload.body as any;
62
+
63
+ if (token !== ZOHO_WEBHOOK_TOKEN) {
64
+ throw new Error('Invalid webhook token');
65
+ }
66
+
67
+ return [context.payload.body];
68
+ },
69
+ });
@@ -0,0 +1,69 @@
1
+ import { createTrigger, TriggerStrategy } from '@agnocon/pieces-framework';
2
+ import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
3
+ import { biginAuth } from '../auth';
4
+ import { biginApiService } from '../common/request';
5
+
6
+ const CACHE_KEY = 'bigin_new_company_created_trigger';
7
+
8
+ export const newCompanyCreated = createTrigger({
9
+ auth: biginAuth,
10
+ name: 'newCompanyCreated',
11
+ displayName: 'New Company Created',
12
+ description: 'Triggers when a new company record is created',
13
+ aiMetadata: {
14
+ description: 'Fires when a new company (account) record is created in Bigin CRM, via an Accounts.create webhook. Represents a newly added organization.',
15
+ },
16
+ props: {},
17
+ sampleData: {},
18
+ type: TriggerStrategy.WEBHOOK,
19
+ async onEnable(context) {
20
+ try {
21
+ const channel_id = Date.now().toString();
22
+ const { api_domain } = context.auth.data;
23
+
24
+ const webhookData = {
25
+ watch: [
26
+ {
27
+ channel_id,
28
+ events: ['Accounts.create'],
29
+ notify_url: context.webhookUrl,
30
+ token: ZOHO_WEBHOOK_TOKEN,
31
+ },
32
+ ],
33
+ };
34
+
35
+ await biginApiService.createWebhook(
36
+ context.auth.access_token,
37
+ webhookData,
38
+ api_domain
39
+ );
40
+
41
+ await context.store.put(CACHE_KEY, channel_id);
42
+ } catch (error) {
43
+ console.error('Failed to enable Zoho webhook');
44
+ }
45
+ },
46
+ async onDisable(context) {
47
+ const channel_id = (await context.store.get(CACHE_KEY)) as string;
48
+ if (!channel_id) return;
49
+
50
+ const { api_domain } = context.auth.data;
51
+
52
+ await biginApiService.deleteWebhook(
53
+ context.auth.access_token,
54
+ api_domain,
55
+ channel_id
56
+ );
57
+
58
+ await context.store.delete(CACHE_KEY);
59
+ },
60
+ async run(context) {
61
+ const { token } = context.payload.body as any;
62
+
63
+ if (token !== ZOHO_WEBHOOK_TOKEN) {
64
+ throw new Error('Invalid webhook token');
65
+ }
66
+
67
+ return [context.payload.body];
68
+ },
69
+ });
@@ -0,0 +1,75 @@
1
+
2
+ import { createTrigger, TriggerStrategy } from '@agnocon/pieces-framework';
3
+ import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
4
+ import { biginAuth } from '../auth';
5
+ import { biginApiService } from '../common/request';
6
+
7
+ const CACHE_KEY = 'bigin_created_contact_trigger';
8
+
9
+ export const newContactCreated = createTrigger({
10
+ auth: biginAuth,
11
+ name: 'newContactCreated',
12
+ displayName: 'New Contact Created',
13
+ description: 'Triggers when a new contact is created',
14
+ aiMetadata: {
15
+ description: 'Fires when a new contact (person) record is created in Bigin CRM, via a Contacts.create webhook. Represents a newly added person.',
16
+ },
17
+ props: {},
18
+ sampleData: {
19
+ server_time: 1754252081534,
20
+ query_params: {},
21
+ module: 'Contacts',
22
+ resource_uri: 'https://www.zohoapis.com/bigin/v1/Contacts',
23
+ ids: ['6913232000000583260'],
24
+ affected_fields: [],
25
+ operation: 'insert',
26
+ channel_id: '1722705400',
27
+ },
28
+ type: TriggerStrategy.WEBHOOK,
29
+ async onEnable(context) {
30
+ try {
31
+ const channel_id = Date.now().toString();
32
+ const { api_domain } = context.auth.data;
33
+
34
+ const webhookData = {
35
+ watch: [
36
+ {
37
+ channel_id,
38
+ events: ['Contacts.create'],
39
+ notify_url: context.webhookUrl,
40
+ token: ZOHO_WEBHOOK_TOKEN,
41
+ },
42
+ ],
43
+ };
44
+
45
+ await biginApiService.createWebhook(context.auth.access_token, webhookData, api_domain)
46
+
47
+ await context.store.put(CACHE_KEY, channel_id);
48
+ } catch (error) {
49
+ console.error('Failed to enable Zoho webhook');
50
+ }
51
+ },
52
+ async onDisable(context) {
53
+ const channel_id = await context.store.get(CACHE_KEY) as string;
54
+ if (!channel_id) return;
55
+
56
+ const { api_domain } = context.auth.data;
57
+
58
+ await biginApiService.deleteWebhook(
59
+ context.auth.access_token,
60
+ api_domain,
61
+ channel_id
62
+ );
63
+
64
+ await context.store.delete(CACHE_KEY);
65
+ },
66
+ async run(context) {
67
+ const { token } = context.payload.body as any;
68
+
69
+ if (token !== ZOHO_WEBHOOK_TOKEN) {
70
+ throw new Error('Invalid webhook token');
71
+ }
72
+
73
+ return [context.payload.body];
74
+ },
75
+ });
@@ -0,0 +1,69 @@
1
+ import { createTrigger, TriggerStrategy } from '@agnocon/pieces-framework';
2
+ import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
3
+ import { biginAuth } from '../auth';
4
+ import { biginApiService } from '../common/request';
5
+
6
+ const CACHE_KEY = 'bigin_new_event_created_trigger';
7
+
8
+ export const newEventCreated = createTrigger({
9
+ auth: biginAuth,
10
+ name: 'newEventCreated',
11
+ displayName: 'New Event Created',
12
+ description: 'Triggers when a new event is created',
13
+ aiMetadata: {
14
+ description: 'Fires when a new calendar event is created in Bigin CRM, via an Events.create webhook. Represents a newly scheduled meeting or appointment.',
15
+ },
16
+ props: {},
17
+ sampleData: {},
18
+ type: TriggerStrategy.WEBHOOK,
19
+ async onEnable(context) {
20
+ try {
21
+ const channel_id = Date.now().toString();
22
+ const { api_domain } = context.auth.data;
23
+
24
+ const webhookData = {
25
+ watch: [
26
+ {
27
+ channel_id,
28
+ events: ['Events.create'],
29
+ notify_url: context.webhookUrl,
30
+ token: ZOHO_WEBHOOK_TOKEN,
31
+ },
32
+ ],
33
+ };
34
+
35
+ await biginApiService.createWebhook(
36
+ context.auth.access_token,
37
+ webhookData,
38
+ api_domain
39
+ );
40
+
41
+ await context.store.put(CACHE_KEY, channel_id);
42
+ } catch (error) {
43
+ console.error('Failed to enable Zoho webhook');
44
+ }
45
+ },
46
+ async onDisable(context) {
47
+ const channel_id = (await context.store.get(CACHE_KEY)) as string;
48
+ if (!channel_id) return;
49
+
50
+ const { api_domain } = context.auth.data;
51
+
52
+ await biginApiService.deleteWebhook(
53
+ context.auth.access_token,
54
+ api_domain,
55
+ channel_id
56
+ );
57
+
58
+ await context.store.delete(CACHE_KEY);
59
+ },
60
+ async run(context) {
61
+ const { token } = context.payload.body as any;
62
+
63
+ if (token !== ZOHO_WEBHOOK_TOKEN) {
64
+ throw new Error('Invalid webhook token');
65
+ }
66
+
67
+ return [context.payload.body];
68
+ },
69
+ });
@@ -0,0 +1,69 @@
1
+ import { createTrigger, TriggerStrategy } from '@agnocon/pieces-framework';
2
+ import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
3
+ import { biginAuth } from '../auth';
4
+ import { biginApiService } from '../common/request';
5
+
6
+ const CACHE_KEY = 'bigin_new_pipeline_record_created_trigger';
7
+
8
+ export const newPipelineRecordCreated = createTrigger({
9
+ auth: biginAuth,
10
+ name: 'newPipelineRecordCreated',
11
+ displayName: 'New Pipeline Record Created',
12
+ description: 'Triggers when a new pipeline record is created',
13
+ aiMetadata: {
14
+ description: 'Fires when a new pipeline record (deal) is created in Bigin CRM, via a Pipelines.create webhook. Represents a newly opened sales opportunity.',
15
+ },
16
+ props: {},
17
+ sampleData: {},
18
+ type: TriggerStrategy.WEBHOOK,
19
+ async onEnable(context) {
20
+ try {
21
+ const channel_id = Date.now().toString();
22
+ const { api_domain } = context.auth.data;
23
+
24
+ const webhookData = {
25
+ watch: [
26
+ {
27
+ channel_id,
28
+ events: ['Pipelines.create'],
29
+ notify_url: context.webhookUrl,
30
+ token: ZOHO_WEBHOOK_TOKEN,
31
+ },
32
+ ],
33
+ };
34
+
35
+ await biginApiService.createWebhook(
36
+ context.auth.access_token,
37
+ webhookData,
38
+ api_domain
39
+ );
40
+
41
+ await context.store.put(CACHE_KEY, channel_id);
42
+ } catch (error) {
43
+ console.error('Failed to enable Zoho webhook');
44
+ }
45
+ },
46
+ async onDisable(context) {
47
+ const channel_id = (await context.store.get(CACHE_KEY)) as string;
48
+ if (!channel_id) return;
49
+
50
+ const { api_domain } = context.auth.data;
51
+
52
+ await biginApiService.deleteWebhook(
53
+ context.auth.access_token,
54
+ api_domain,
55
+ channel_id
56
+ );
57
+
58
+ await context.store.delete(CACHE_KEY);
59
+ },
60
+ async run(context) {
61
+ const { token } = context.payload.body as any;
62
+
63
+ if (token !== ZOHO_WEBHOOK_TOKEN) {
64
+ throw new Error('Invalid webhook token');
65
+ }
66
+
67
+ return [context.payload.body];
68
+ },
69
+ });
@@ -0,0 +1,69 @@
1
+ import { createTrigger, TriggerStrategy } from '@agnocon/pieces-framework';
2
+ import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
3
+ import { biginAuth } from '../auth';
4
+ import { biginApiService } from '../common/request';
5
+
6
+ const CACHE_KEY = 'bigin_new_task_created_trigger';
7
+
8
+ export const newTaskCreated = createTrigger({
9
+ auth: biginAuth,
10
+ name: 'newTaskCreated',
11
+ displayName: 'New Task Created',
12
+ description: 'Triggers when a new task is created',
13
+ aiMetadata: {
14
+ description: 'Fires when a new task is created in Bigin CRM, via a Tasks.create webhook. Represents a newly added piece of follow-up work.',
15
+ },
16
+ props: {},
17
+ sampleData: {},
18
+ type: TriggerStrategy.WEBHOOK,
19
+ async onEnable(context) {
20
+ try {
21
+ const channel_id = Date.now().toString();
22
+ const { api_domain } = context.auth.data;
23
+
24
+ const webhookData = {
25
+ watch: [
26
+ {
27
+ channel_id,
28
+ events: ['Tasks.create'],
29
+ notify_url: context.webhookUrl,
30
+ token: ZOHO_WEBHOOK_TOKEN,
31
+ },
32
+ ],
33
+ };
34
+
35
+ await biginApiService.createWebhook(
36
+ context.auth.access_token,
37
+ webhookData,
38
+ api_domain
39
+ );
40
+
41
+ await context.store.put(CACHE_KEY, channel_id);
42
+ } catch (error) {
43
+ console.error('Failed to enable Zoho webhook');
44
+ }
45
+ },
46
+ async onDisable(context) {
47
+ const channel_id = (await context.store.get(CACHE_KEY)) as string;
48
+ if (!channel_id) return;
49
+
50
+ const { api_domain } = context.auth.data;
51
+
52
+ await biginApiService.deleteWebhook(
53
+ context.auth.access_token,
54
+ api_domain,
55
+ channel_id
56
+ );
57
+
58
+ await context.store.delete(CACHE_KEY);
59
+ },
60
+ async run(context) {
61
+ const { token } = context.payload.body as any;
62
+
63
+ if (token !== ZOHO_WEBHOOK_TOKEN) {
64
+ throw new Error('Invalid webhook token');
65
+ }
66
+
67
+ return [context.payload.body];
68
+ },
69
+ });
@@ -0,0 +1,69 @@
1
+ import { createTrigger, TriggerStrategy } from '@agnocon/pieces-framework';
2
+ import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
3
+ import { biginAuth } from '../auth';
4
+ import { biginApiService } from '../common/request';
5
+
6
+ const CACHE_KEY = 'bigin_pipeline_record_updated_trigger';
7
+
8
+ export const pipelineRecordUpdated = createTrigger({
9
+ auth: biginAuth,
10
+ name: 'pipelineRecordUpdated',
11
+ displayName: 'Pipeline Record Updated',
12
+ description: 'Triggers when a pipeline record is updated',
13
+ aiMetadata: {
14
+ description: 'Fires when an existing pipeline record (deal) is edited in Bigin CRM, via a Pipelines.edit webhook. Represents a change to a deal already in the CRM, such as a stage or amount update.',
15
+ },
16
+ props: {},
17
+ sampleData: {},
18
+ type: TriggerStrategy.WEBHOOK,
19
+ async onEnable(context) {
20
+ try {
21
+ const channel_id = Date.now().toString();
22
+ const { api_domain } = context.auth.data;
23
+
24
+ const webhookData = {
25
+ watch: [
26
+ {
27
+ channel_id,
28
+ events: ['Pipelines.edit'],
29
+ notify_url: context.webhookUrl,
30
+ token: ZOHO_WEBHOOK_TOKEN,
31
+ },
32
+ ],
33
+ };
34
+
35
+ await biginApiService.createWebhook(
36
+ context.auth.access_token,
37
+ webhookData,
38
+ api_domain
39
+ );
40
+
41
+ await context.store.put(CACHE_KEY, channel_id);
42
+ } catch (error) {
43
+ console.error('Failed to enable Zoho webhook');
44
+ }
45
+ },
46
+ async onDisable(context) {
47
+ const channel_id = (await context.store.get(CACHE_KEY)) as string;
48
+ if (!channel_id) return;
49
+
50
+ const { api_domain } = context.auth.data;
51
+
52
+ await biginApiService.deleteWebhook(
53
+ context.auth.access_token,
54
+ api_domain,
55
+ channel_id
56
+ );
57
+
58
+ await context.store.delete(CACHE_KEY);
59
+ },
60
+ async run(context) {
61
+ const { token } = context.payload.body as any;
62
+
63
+ if (token !== ZOHO_WEBHOOK_TOKEN) {
64
+ throw new Error('Invalid webhook token');
65
+ }
66
+
67
+ return [context.payload.body];
68
+ },
69
+ });