@workbuddy/piece-workbuddy-vnext 1.0.4 → 1.0.5
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.
- package/package.json +1 -1
- package/src/index.d.ts.map +1 -1
- package/src/index.js +89 -83
- package/src/index.js.map +1 -1
- package/src/index.ts +29 -17
- package/src/lib/actions/agents.d.ts.map +1 -1
- package/src/lib/actions/agents.js +6 -4
- package/src/lib/actions/agents.js.map +1 -1
- package/src/lib/actions/agents.ts +8 -4
- package/src/lib/actions/attachments.d.ts.map +1 -1
- package/src/lib/actions/attachments.js +2 -1
- package/src/lib/actions/attachments.js.map +1 -1
- package/src/lib/actions/attachments.ts +3 -1
- package/src/lib/actions/{crm->-companies.d.ts → crm-companies.d.ts} +1 -1
- package/src/lib/actions/crm-companies.d.ts.map +1 -0
- package/src/lib/actions/{crm->-companies.js → crm-companies.js} +1 -1
- package/src/lib/actions/{crm->-invites.js.map → crm-companies.js.map} +1 -1
- package/src/lib/actions/{crm->-contacts.d.ts → crm-contacts.d.ts} +1 -1
- package/src/lib/actions/crm-contacts.d.ts.map +1 -0
- package/src/lib/actions/{crm->-contacts.js → crm-contacts.js} +1 -1
- package/src/lib/actions/crm-contacts.js.map +1 -0
- package/src/lib/actions/{crm->-contractors.d.ts → crm-contractors.d.ts} +1 -1
- package/src/lib/actions/crm-contractors.d.ts.map +1 -0
- package/src/lib/actions/{crm->-contractors.js → crm-contractors.js} +1 -1
- package/src/lib/actions/{crm->-employees.js.map → crm-contractors.js.map} +1 -1
- package/src/lib/actions/{crm->-customers.d.ts → crm-customers.d.ts} +1 -1
- package/src/lib/actions/crm-customers.d.ts.map +1 -0
- package/src/lib/actions/{crm->-customers.js → crm-customers.js} +1 -1
- package/src/lib/actions/crm-customers.js.map +1 -0
- package/src/lib/actions/{crm->-employees.d.ts → crm-employees.d.ts} +1 -1
- package/src/lib/actions/crm-employees.d.ts.map +1 -0
- package/src/lib/actions/{crm->-employees.js → crm-employees.js} +1 -1
- package/src/lib/actions/crm-employees.js.map +1 -0
- package/src/lib/actions/{crm->-external-users.d.ts → crm-external-users.d.ts} +1 -1
- package/src/lib/actions/crm-external-users.d.ts.map +1 -0
- package/src/lib/actions/{crm->-external-users.js → crm-external-users.js} +1 -1
- package/src/lib/actions/crm-external-users.js.map +1 -0
- package/src/lib/actions/{crm->-invites.d.ts → crm-invites.d.ts} +1 -1
- package/src/lib/actions/crm-invites.d.ts.map +1 -0
- package/src/lib/actions/{crm->-invites.js → crm-invites.js} +1 -1
- package/src/lib/actions/crm-invites.js.map +1 -0
- package/src/lib/actions/{crm->-sites.d.ts → crm-sites.d.ts} +1 -1
- package/src/lib/actions/crm-sites.d.ts.map +1 -0
- package/src/lib/actions/{crm->-sites.js → crm-sites.js} +1 -1
- package/src/lib/actions/crm-sites.js.map +1 -0
- package/src/lib/actions/{crm->-suppliers.d.ts → crm-suppliers.d.ts} +1 -1
- package/src/lib/actions/crm-suppliers.d.ts.map +1 -0
- package/src/lib/actions/{crm->-suppliers.js → crm-suppliers.js} +1 -1
- package/src/lib/actions/crm-suppliers.js.map +1 -0
- package/src/lib/actions/flags.d.ts +34 -0
- package/src/lib/actions/flags.d.ts.map +1 -0
- package/src/lib/actions/flags.js +185 -0
- package/src/lib/actions/flags.js.map +1 -0
- package/src/lib/actions/flags.ts +201 -0
- package/src/lib/actions/index.d.ts +18 -17
- package/src/lib/actions/index.d.ts.map +1 -1
- package/src/lib/actions/index.js +18 -17
- package/src/lib/actions/index.js.map +1 -1
- package/src/lib/actions/index.ts +18 -17
- package/src/lib/actions/{jobs->-activities.d.ts → jobs-activities.d.ts} +15 -5
- package/src/lib/actions/jobs-activities.d.ts.map +1 -0
- package/src/lib/actions/{jobs->-activities.js → jobs-activities.js} +110 -59
- package/src/lib/actions/jobs-activities.js.map +1 -0
- package/src/lib/actions/{jobs->-activities.ts → jobs-activities.ts} +118 -57
- package/src/lib/actions/{jobs->-contacts.d.ts → jobs-contacts.d.ts} +1 -1
- package/src/lib/actions/jobs-contacts.d.ts.map +1 -0
- package/src/lib/actions/{jobs->-contacts.js → jobs-contacts.js} +5 -5
- package/src/lib/actions/jobs-contacts.js.map +1 -0
- package/src/lib/actions/{jobs->-contacts.ts → jobs-contacts.ts} +4 -4
- package/src/lib/actions/{jobs->-files.d.ts → jobs-files.d.ts} +1 -1
- package/src/lib/actions/jobs-files.d.ts.map +1 -0
- package/src/lib/actions/{jobs->-files.js → jobs-files.js} +9 -9
- package/src/lib/actions/jobs-files.js.map +1 -0
- package/src/lib/actions/{jobs->-files.ts → jobs-files.ts} +8 -8
- package/src/lib/actions/{jobs->-tasks.d.ts → jobs-tasks.d.ts} +4 -2
- package/src/lib/actions/jobs-tasks.d.ts.map +1 -0
- package/src/lib/actions/{jobs->-tasks.js → jobs-tasks.js} +61 -37
- package/src/lib/actions/jobs-tasks.js.map +1 -0
- package/src/lib/actions/{jobs->-tasks.ts → jobs-tasks.ts} +64 -36
- package/src/lib/actions/jobs.d.ts +4 -3
- package/src/lib/actions/jobs.d.ts.map +1 -1
- package/src/lib/actions/jobs.js +90 -72
- package/src/lib/actions/jobs.js.map +1 -1
- package/src/lib/actions/jobs.ts +94 -72
- package/src/lib/actions/mcp.d.ts +1 -1
- package/src/lib/actions/mcp.d.ts.map +1 -1
- package/src/lib/actions/mcp.js +7 -6
- package/src/lib/actions/mcp.js.map +1 -1
- package/src/lib/actions/mcp.ts +8 -6
- package/src/lib/actions/settings.js +1 -1
- package/src/lib/actions/settings.js.map +1 -1
- package/src/lib/actions/settings.ts +1 -1
- package/src/lib/actions/{stages->-activities.d.ts → stages-activities.d.ts} +24 -5
- package/src/lib/actions/stages-activities.d.ts.map +1 -0
- package/src/lib/actions/{stages->-activities.js → stages-activities.js} +164 -68
- package/src/lib/actions/stages-activities.js.map +1 -0
- package/src/lib/actions/{stages->-activities.ts → stages-activities.ts} +172 -66
- package/src/lib/actions/{stages->-files.d.ts → stages-files.d.ts} +5 -1
- package/src/lib/actions/stages-files.d.ts.map +1 -0
- package/src/lib/actions/{stages->-files.js → stages-files.js} +35 -15
- package/src/lib/actions/stages-files.js.map +1 -0
- package/src/lib/actions/{stages->-files.ts → stages-files.ts} +34 -14
- package/src/lib/actions/{stages->-resources.d.ts → stages-resources.d.ts} +1 -1
- package/src/lib/actions/stages-resources.d.ts.map +1 -0
- package/src/lib/actions/{stages->-resources.js → stages-resources.js} +7 -5
- package/src/lib/actions/stages-resources.js.map +1 -0
- package/src/lib/actions/{stages->-resources.ts → stages-resources.ts} +8 -4
- package/src/lib/actions/{stages->-tasks.d.ts → stages-tasks.d.ts} +8 -2
- package/src/lib/actions/stages-tasks.d.ts.map +1 -0
- package/src/lib/actions/{stages->-tasks.js → stages-tasks.js} +91 -47
- package/src/lib/actions/stages-tasks.js.map +1 -0
- package/src/lib/actions/{stages->-tasks.ts → stages-tasks.ts} +94 -46
- package/src/lib/actions/stages.d.ts +6 -2
- package/src/lib/actions/stages.d.ts.map +1 -1
- package/src/lib/actions/stages.js +77 -27
- package/src/lib/actions/stages.js.map +1 -1
- package/src/lib/actions/stages.ts +88 -27
- package/src/lib/actions/webhooks-v2.js +15 -15
- package/src/lib/actions/webhooks-v2.js.map +1 -1
- package/src/lib/actions/webhooks-v2.ts +15 -15
- package/src/lib/auth.js +2 -2
- package/src/lib/auth.js.map +1 -1
- package/src/lib/auth.ts +2 -2
- package/src/lib/triggers/activity.d.ts.map +1 -1
- package/src/lib/triggers/activity.js +54 -42
- package/src/lib/triggers/activity.js.map +1 -1
- package/src/lib/triggers/activity.ts +54 -42
- package/src/lib/triggers/bill.d.ts +240 -48
- package/src/lib/triggers/bill.d.ts.map +1 -1
- package/src/lib/triggers/bill.js +368 -88
- package/src/lib/triggers/bill.js.map +1 -1
- package/src/lib/triggers/bill.ts +368 -88
- package/src/lib/triggers/invoice.d.ts +240 -48
- package/src/lib/triggers/invoice.d.ts.map +1 -1
- package/src/lib/triggers/invoice.js +368 -88
- package/src/lib/triggers/invoice.js.map +1 -1
- package/src/lib/triggers/invoice.ts +368 -88
- package/src/lib/triggers/job.d.ts +640 -128
- package/src/lib/triggers/job.d.ts.map +1 -1
- package/src/lib/triggers/job.js +928 -208
- package/src/lib/triggers/job.js.map +1 -1
- package/src/lib/triggers/job.ts +928 -208
- package/src/lib/triggers/lead.d.ts +400 -80
- package/src/lib/triggers/lead.d.ts.map +1 -1
- package/src/lib/triggers/lead.js +552 -96
- package/src/lib/triggers/lead.js.map +1 -1
- package/src/lib/triggers/lead.ts +552 -96
- package/src/lib/triggers/opportunity.d.ts +320 -64
- package/src/lib/triggers/opportunity.d.ts.map +1 -1
- package/src/lib/triggers/opportunity.js +456 -88
- package/src/lib/triggers/opportunity.js.map +1 -1
- package/src/lib/triggers/opportunity.ts +456 -88
- package/src/lib/triggers/quote.d.ts +240 -48
- package/src/lib/triggers/quote.d.ts.map +1 -1
- package/src/lib/triggers/quote.js +368 -88
- package/src/lib/triggers/quote.js.map +1 -1
- package/src/lib/triggers/quote.ts +368 -88
- package/src/lib/triggers/stage.d.ts +480 -96
- package/src/lib/triggers/stage.d.ts.map +1 -1
- package/src/lib/triggers/stage.js +764 -220
- package/src/lib/triggers/stage.js.map +1 -1
- package/src/lib/triggers/stage.ts +764 -220
- package/src/lib/triggers/task.d.ts +80 -16
- package/src/lib/triggers/task.d.ts.map +1 -1
- package/src/lib/triggers/task.js +172 -68
- package/src/lib/triggers/task.js.map +1 -1
- package/src/lib/triggers/task.ts +172 -68
- package/src/lib/actions/crm->-companies.d.ts.map +0 -1
- package/src/lib/actions/crm->-companies.js.map +0 -1
- package/src/lib/actions/crm->-contacts.d.ts.map +0 -1
- package/src/lib/actions/crm->-contacts.js.map +0 -1
- package/src/lib/actions/crm->-contractors.d.ts.map +0 -1
- package/src/lib/actions/crm->-contractors.js.map +0 -1
- package/src/lib/actions/crm->-customers.d.ts.map +0 -1
- package/src/lib/actions/crm->-customers.js.map +0 -1
- package/src/lib/actions/crm->-employees.d.ts.map +0 -1
- package/src/lib/actions/crm->-external-users.d.ts.map +0 -1
- package/src/lib/actions/crm->-external-users.js.map +0 -1
- package/src/lib/actions/crm->-invites.d.ts.map +0 -1
- package/src/lib/actions/crm->-sites.d.ts.map +0 -1
- package/src/lib/actions/crm->-sites.js.map +0 -1
- package/src/lib/actions/crm->-suppliers.d.ts.map +0 -1
- package/src/lib/actions/crm->-suppliers.js.map +0 -1
- package/src/lib/actions/jobs->-activities.d.ts.map +0 -1
- package/src/lib/actions/jobs->-activities.js.map +0 -1
- package/src/lib/actions/jobs->-contacts.d.ts.map +0 -1
- package/src/lib/actions/jobs->-contacts.js.map +0 -1
- package/src/lib/actions/jobs->-files.d.ts.map +0 -1
- package/src/lib/actions/jobs->-files.js.map +0 -1
- package/src/lib/actions/jobs->-tasks.d.ts.map +0 -1
- package/src/lib/actions/jobs->-tasks.js.map +0 -1
- package/src/lib/actions/stages->-activities.d.ts.map +0 -1
- package/src/lib/actions/stages->-activities.js.map +0 -1
- package/src/lib/actions/stages->-files.d.ts.map +0 -1
- package/src/lib/actions/stages->-files.js.map +0 -1
- package/src/lib/actions/stages->-resources.d.ts.map +0 -1
- package/src/lib/actions/stages->-resources.js.map +0 -1
- package/src/lib/actions/stages->-tasks.d.ts.map +0 -1
- package/src/lib/actions/stages->-tasks.js.map +0 -1
- /package/src/lib/actions/{crm->-companies.ts → crm-companies.ts} +0 -0
- /package/src/lib/actions/{crm->-contacts.ts → crm-contacts.ts} +0 -0
- /package/src/lib/actions/{crm->-contractors.ts → crm-contractors.ts} +0 -0
- /package/src/lib/actions/{crm->-customers.ts → crm-customers.ts} +0 -0
- /package/src/lib/actions/{crm->-employees.ts → crm-employees.ts} +0 -0
- /package/src/lib/actions/{crm->-external-users.ts → crm-external-users.ts} +0 -0
- /package/src/lib/actions/{crm->-invites.ts → crm-invites.ts} +0 -0
- /package/src/lib/actions/{crm->-sites.ts → crm-sites.ts} +0 -0
- /package/src/lib/actions/{crm->-suppliers.ts → crm-suppliers.ts} +0 -0
|
@@ -10,41 +10,136 @@ exports.opportunity_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
10
10
|
displayName: 'Opportunity Created',
|
|
11
11
|
description: 'Triggered when a new opportunity is created',
|
|
12
12
|
props: {
|
|
13
|
-
customer: pieces_framework_1.Property.
|
|
13
|
+
customer: pieces_framework_1.Property.MultiSelectDropdown({
|
|
14
14
|
displayName: 'Filter by Customer',
|
|
15
|
-
description: 'Only trigger for specific customer
|
|
15
|
+
description: 'Only trigger for specific customer',
|
|
16
16
|
required: false,
|
|
17
|
+
auth: auth_1.workbuddyAuth,
|
|
18
|
+
refreshers: [],
|
|
19
|
+
options: async ({ auth }) => {
|
|
20
|
+
const authValue = auth;
|
|
21
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
22
|
+
const baseUrl = authValue.props.baseUrl;
|
|
23
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
24
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
25
|
+
url: `${baseUrl}/api/v2/public/customers`,
|
|
26
|
+
headers: {
|
|
27
|
+
Authorization: `Bearer ${token}`,
|
|
28
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
const items = response.body?.items || [];
|
|
32
|
+
return {
|
|
33
|
+
options: items.map((item) => ({
|
|
34
|
+
label: item.name,
|
|
35
|
+
value: item.id,
|
|
36
|
+
})),
|
|
37
|
+
};
|
|
38
|
+
},
|
|
17
39
|
}),
|
|
18
|
-
billingCompany: pieces_framework_1.Property.
|
|
40
|
+
billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
|
|
19
41
|
displayName: 'Filter by Billing Company',
|
|
20
|
-
description: 'Only trigger for specific billing company
|
|
42
|
+
description: 'Only trigger for specific billing company',
|
|
21
43
|
required: false,
|
|
44
|
+
auth: auth_1.workbuddyAuth,
|
|
45
|
+
refreshers: [],
|
|
46
|
+
options: async ({ auth }) => {
|
|
47
|
+
const authValue = auth;
|
|
48
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
49
|
+
const baseUrl = authValue.props.baseUrl;
|
|
50
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
51
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
52
|
+
url: `${baseUrl}/api/v2/public/companies`,
|
|
53
|
+
headers: {
|
|
54
|
+
Authorization: `Bearer ${token}`,
|
|
55
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
const items = response.body?.items || [];
|
|
59
|
+
return {
|
|
60
|
+
options: items.map((item) => ({
|
|
61
|
+
label: item.name,
|
|
62
|
+
value: item.id,
|
|
63
|
+
})),
|
|
64
|
+
};
|
|
65
|
+
},
|
|
22
66
|
}),
|
|
23
|
-
tag: pieces_framework_1.Property.
|
|
67
|
+
tag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
24
68
|
displayName: 'Filter by Tags',
|
|
25
|
-
description: 'Only trigger for specific tags
|
|
69
|
+
description: 'Only trigger for specific tags',
|
|
26
70
|
required: false,
|
|
71
|
+
auth: auth_1.workbuddyAuth,
|
|
72
|
+
refreshers: [],
|
|
73
|
+
options: async ({ auth }) => {
|
|
74
|
+
const authValue = auth;
|
|
75
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
76
|
+
const baseUrl = authValue.props.baseUrl;
|
|
77
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
78
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
79
|
+
url: `${baseUrl}/api/v2/public/settings/tags`,
|
|
80
|
+
headers: {
|
|
81
|
+
Authorization: `Bearer ${token}`,
|
|
82
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
const items = response.body?.items || [];
|
|
86
|
+
return {
|
|
87
|
+
options: items.map((item) => ({
|
|
88
|
+
label: item.name,
|
|
89
|
+
value: item.id,
|
|
90
|
+
})),
|
|
91
|
+
};
|
|
92
|
+
},
|
|
27
93
|
}),
|
|
28
94
|
opportunityStage: pieces_framework_1.Property.Array({
|
|
29
95
|
displayName: 'Filter by Stage',
|
|
30
96
|
description: 'Only trigger for specific stage IDs',
|
|
31
97
|
required: false,
|
|
32
98
|
}),
|
|
33
|
-
owner: pieces_framework_1.Property.
|
|
99
|
+
owner: pieces_framework_1.Property.MultiSelectDropdown({
|
|
34
100
|
displayName: 'Filter by Owner',
|
|
35
|
-
description: 'Only trigger for specific owner
|
|
101
|
+
description: 'Only trigger for specific owner',
|
|
36
102
|
required: false,
|
|
103
|
+
auth: auth_1.workbuddyAuth,
|
|
104
|
+
refreshers: [],
|
|
105
|
+
options: async ({ auth }) => {
|
|
106
|
+
const authValue = auth;
|
|
107
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
108
|
+
const baseUrl = authValue.props.baseUrl;
|
|
109
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
110
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
111
|
+
url: `${baseUrl}/api/v2/public/employees`,
|
|
112
|
+
headers: {
|
|
113
|
+
Authorization: `Bearer ${token}`,
|
|
114
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
const items = response.body?.items || [];
|
|
118
|
+
return {
|
|
119
|
+
options: items.map((item) => ({
|
|
120
|
+
label: item.name,
|
|
121
|
+
value: item.id,
|
|
122
|
+
})),
|
|
123
|
+
};
|
|
124
|
+
},
|
|
37
125
|
}),
|
|
38
126
|
},
|
|
39
127
|
sampleData: {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
128
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
129
|
+
event: 'Opportunity Created',
|
|
130
|
+
action: 'create',
|
|
131
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
132
|
+
webhookTimestamp: 1773465707307,
|
|
133
|
+
data: {
|
|
134
|
+
opportunity: {
|
|
135
|
+
id: '507f1f77bcf86cd799439011',
|
|
136
|
+
name: 'New Project Opportunity',
|
|
137
|
+
status: 'Open',
|
|
138
|
+
value: 50000.0,
|
|
139
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
140
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
141
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
142
|
+
},
|
|
48
143
|
},
|
|
49
144
|
},
|
|
50
145
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -63,7 +158,7 @@ exports.opportunity_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
63
158
|
filters.opportunityStage = context.propsValue.opportunityStage;
|
|
64
159
|
if (context.propsValue.owner?.length)
|
|
65
160
|
filters.owner = context.propsValue.owner;
|
|
66
|
-
// Register webhook with WorkBuddy v2 API
|
|
161
|
+
// Register webhook with WorkBuddy v2 API
|
|
67
162
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
68
163
|
method: pieces_common_1.HttpMethod.POST,
|
|
69
164
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -92,18 +187,15 @@ exports.opportunity_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
92
187
|
const baseUrl = context.auth.props.baseUrl;
|
|
93
188
|
const webhookId = await context.store.get('webhookId');
|
|
94
189
|
if (webhookId) {
|
|
95
|
-
//
|
|
190
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
96
191
|
await pieces_common_1.httpClient.sendRequest({
|
|
97
|
-
method: pieces_common_1.HttpMethod.
|
|
192
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
98
193
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
99
194
|
headers: {
|
|
100
195
|
Authorization: `Bearer ${token}`,
|
|
101
196
|
'Content-Type': 'application/json',
|
|
102
197
|
'X-WorkBuddy-Version': '2026-01',
|
|
103
198
|
},
|
|
104
|
-
body: {
|
|
105
|
-
status: 'paused',
|
|
106
|
-
},
|
|
107
199
|
});
|
|
108
200
|
}
|
|
109
201
|
},
|
|
@@ -117,41 +209,136 @@ exports.opportunity_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
117
209
|
displayName: 'Opportunity Updated',
|
|
118
210
|
description: 'Triggered when an opportunity is updated',
|
|
119
211
|
props: {
|
|
120
|
-
customer: pieces_framework_1.Property.
|
|
212
|
+
customer: pieces_framework_1.Property.MultiSelectDropdown({
|
|
121
213
|
displayName: 'Filter by Customer',
|
|
122
|
-
description: 'Only trigger for specific customer
|
|
214
|
+
description: 'Only trigger for specific customer',
|
|
123
215
|
required: false,
|
|
216
|
+
auth: auth_1.workbuddyAuth,
|
|
217
|
+
refreshers: [],
|
|
218
|
+
options: async ({ auth }) => {
|
|
219
|
+
const authValue = auth;
|
|
220
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
221
|
+
const baseUrl = authValue.props.baseUrl;
|
|
222
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
223
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
224
|
+
url: `${baseUrl}/api/v2/public/customers`,
|
|
225
|
+
headers: {
|
|
226
|
+
Authorization: `Bearer ${token}`,
|
|
227
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
228
|
+
},
|
|
229
|
+
});
|
|
230
|
+
const items = response.body?.items || [];
|
|
231
|
+
return {
|
|
232
|
+
options: items.map((item) => ({
|
|
233
|
+
label: item.name,
|
|
234
|
+
value: item.id,
|
|
235
|
+
})),
|
|
236
|
+
};
|
|
237
|
+
},
|
|
124
238
|
}),
|
|
125
|
-
billingCompany: pieces_framework_1.Property.
|
|
239
|
+
billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
|
|
126
240
|
displayName: 'Filter by Billing Company',
|
|
127
|
-
description: 'Only trigger for specific billing company
|
|
241
|
+
description: 'Only trigger for specific billing company',
|
|
128
242
|
required: false,
|
|
243
|
+
auth: auth_1.workbuddyAuth,
|
|
244
|
+
refreshers: [],
|
|
245
|
+
options: async ({ auth }) => {
|
|
246
|
+
const authValue = auth;
|
|
247
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
248
|
+
const baseUrl = authValue.props.baseUrl;
|
|
249
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
250
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
251
|
+
url: `${baseUrl}/api/v2/public/companies`,
|
|
252
|
+
headers: {
|
|
253
|
+
Authorization: `Bearer ${token}`,
|
|
254
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
255
|
+
},
|
|
256
|
+
});
|
|
257
|
+
const items = response.body?.items || [];
|
|
258
|
+
return {
|
|
259
|
+
options: items.map((item) => ({
|
|
260
|
+
label: item.name,
|
|
261
|
+
value: item.id,
|
|
262
|
+
})),
|
|
263
|
+
};
|
|
264
|
+
},
|
|
129
265
|
}),
|
|
130
|
-
tag: pieces_framework_1.Property.
|
|
266
|
+
tag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
131
267
|
displayName: 'Filter by Tags',
|
|
132
|
-
description: 'Only trigger for specific tags
|
|
268
|
+
description: 'Only trigger for specific tags',
|
|
133
269
|
required: false,
|
|
270
|
+
auth: auth_1.workbuddyAuth,
|
|
271
|
+
refreshers: [],
|
|
272
|
+
options: async ({ auth }) => {
|
|
273
|
+
const authValue = auth;
|
|
274
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
275
|
+
const baseUrl = authValue.props.baseUrl;
|
|
276
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
277
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
278
|
+
url: `${baseUrl}/api/v2/public/settings/tags`,
|
|
279
|
+
headers: {
|
|
280
|
+
Authorization: `Bearer ${token}`,
|
|
281
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
282
|
+
},
|
|
283
|
+
});
|
|
284
|
+
const items = response.body?.items || [];
|
|
285
|
+
return {
|
|
286
|
+
options: items.map((item) => ({
|
|
287
|
+
label: item.name,
|
|
288
|
+
value: item.id,
|
|
289
|
+
})),
|
|
290
|
+
};
|
|
291
|
+
},
|
|
134
292
|
}),
|
|
135
293
|
opportunityStage: pieces_framework_1.Property.Array({
|
|
136
294
|
displayName: 'Filter by Stage',
|
|
137
295
|
description: 'Only trigger for specific stage IDs',
|
|
138
296
|
required: false,
|
|
139
297
|
}),
|
|
140
|
-
owner: pieces_framework_1.Property.
|
|
298
|
+
owner: pieces_framework_1.Property.MultiSelectDropdown({
|
|
141
299
|
displayName: 'Filter by Owner',
|
|
142
|
-
description: 'Only trigger for specific owner
|
|
300
|
+
description: 'Only trigger for specific owner',
|
|
143
301
|
required: false,
|
|
302
|
+
auth: auth_1.workbuddyAuth,
|
|
303
|
+
refreshers: [],
|
|
304
|
+
options: async ({ auth }) => {
|
|
305
|
+
const authValue = auth;
|
|
306
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
307
|
+
const baseUrl = authValue.props.baseUrl;
|
|
308
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
309
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
310
|
+
url: `${baseUrl}/api/v2/public/employees`,
|
|
311
|
+
headers: {
|
|
312
|
+
Authorization: `Bearer ${token}`,
|
|
313
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
const items = response.body?.items || [];
|
|
317
|
+
return {
|
|
318
|
+
options: items.map((item) => ({
|
|
319
|
+
label: item.name,
|
|
320
|
+
value: item.id,
|
|
321
|
+
})),
|
|
322
|
+
};
|
|
323
|
+
},
|
|
144
324
|
}),
|
|
145
325
|
},
|
|
146
326
|
sampleData: {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
327
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
328
|
+
event: 'Opportunity Updated',
|
|
329
|
+
action: 'update',
|
|
330
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
331
|
+
webhookTimestamp: 1773465707307,
|
|
332
|
+
data: {
|
|
333
|
+
opportunity: {
|
|
334
|
+
id: '507f1f77bcf86cd799439011',
|
|
335
|
+
name: 'New Project Opportunity',
|
|
336
|
+
status: 'Open',
|
|
337
|
+
value: 50000.0,
|
|
338
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
339
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
340
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
341
|
+
},
|
|
155
342
|
},
|
|
156
343
|
},
|
|
157
344
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -170,7 +357,7 @@ exports.opportunity_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
170
357
|
filters.opportunityStage = context.propsValue.opportunityStage;
|
|
171
358
|
if (context.propsValue.owner?.length)
|
|
172
359
|
filters.owner = context.propsValue.owner;
|
|
173
|
-
// Register webhook with WorkBuddy v2 API
|
|
360
|
+
// Register webhook with WorkBuddy v2 API
|
|
174
361
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
175
362
|
method: pieces_common_1.HttpMethod.POST,
|
|
176
363
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -199,18 +386,15 @@ exports.opportunity_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
199
386
|
const baseUrl = context.auth.props.baseUrl;
|
|
200
387
|
const webhookId = await context.store.get('webhookId');
|
|
201
388
|
if (webhookId) {
|
|
202
|
-
//
|
|
389
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
203
390
|
await pieces_common_1.httpClient.sendRequest({
|
|
204
|
-
method: pieces_common_1.HttpMethod.
|
|
391
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
205
392
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
206
393
|
headers: {
|
|
207
394
|
Authorization: `Bearer ${token}`,
|
|
208
395
|
'Content-Type': 'application/json',
|
|
209
396
|
'X-WorkBuddy-Version': '2026-01',
|
|
210
397
|
},
|
|
211
|
-
body: {
|
|
212
|
-
status: 'paused',
|
|
213
|
-
},
|
|
214
398
|
});
|
|
215
399
|
}
|
|
216
400
|
},
|
|
@@ -224,41 +408,136 @@ exports.opportunity_status_changed_trigger = (0, pieces_framework_1.createTrigge
|
|
|
224
408
|
displayName: 'Opportunity Status Changed',
|
|
225
409
|
description: 'Triggered when an opportunity status changes',
|
|
226
410
|
props: {
|
|
227
|
-
customer: pieces_framework_1.Property.
|
|
411
|
+
customer: pieces_framework_1.Property.MultiSelectDropdown({
|
|
228
412
|
displayName: 'Filter by Customer',
|
|
229
|
-
description: 'Only trigger for specific customer
|
|
413
|
+
description: 'Only trigger for specific customer',
|
|
230
414
|
required: false,
|
|
415
|
+
auth: auth_1.workbuddyAuth,
|
|
416
|
+
refreshers: [],
|
|
417
|
+
options: async ({ auth }) => {
|
|
418
|
+
const authValue = auth;
|
|
419
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
420
|
+
const baseUrl = authValue.props.baseUrl;
|
|
421
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
422
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
423
|
+
url: `${baseUrl}/api/v2/public/customers`,
|
|
424
|
+
headers: {
|
|
425
|
+
Authorization: `Bearer ${token}`,
|
|
426
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
427
|
+
},
|
|
428
|
+
});
|
|
429
|
+
const items = response.body?.items || [];
|
|
430
|
+
return {
|
|
431
|
+
options: items.map((item) => ({
|
|
432
|
+
label: item.name,
|
|
433
|
+
value: item.id,
|
|
434
|
+
})),
|
|
435
|
+
};
|
|
436
|
+
},
|
|
231
437
|
}),
|
|
232
|
-
billingCompany: pieces_framework_1.Property.
|
|
438
|
+
billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
|
|
233
439
|
displayName: 'Filter by Billing Company',
|
|
234
|
-
description: 'Only trigger for specific billing company
|
|
440
|
+
description: 'Only trigger for specific billing company',
|
|
235
441
|
required: false,
|
|
442
|
+
auth: auth_1.workbuddyAuth,
|
|
443
|
+
refreshers: [],
|
|
444
|
+
options: async ({ auth }) => {
|
|
445
|
+
const authValue = auth;
|
|
446
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
447
|
+
const baseUrl = authValue.props.baseUrl;
|
|
448
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
449
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
450
|
+
url: `${baseUrl}/api/v2/public/companies`,
|
|
451
|
+
headers: {
|
|
452
|
+
Authorization: `Bearer ${token}`,
|
|
453
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
454
|
+
},
|
|
455
|
+
});
|
|
456
|
+
const items = response.body?.items || [];
|
|
457
|
+
return {
|
|
458
|
+
options: items.map((item) => ({
|
|
459
|
+
label: item.name,
|
|
460
|
+
value: item.id,
|
|
461
|
+
})),
|
|
462
|
+
};
|
|
463
|
+
},
|
|
236
464
|
}),
|
|
237
|
-
tag: pieces_framework_1.Property.
|
|
465
|
+
tag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
238
466
|
displayName: 'Filter by Tags',
|
|
239
|
-
description: 'Only trigger for specific tags
|
|
467
|
+
description: 'Only trigger for specific tags',
|
|
240
468
|
required: false,
|
|
469
|
+
auth: auth_1.workbuddyAuth,
|
|
470
|
+
refreshers: [],
|
|
471
|
+
options: async ({ auth }) => {
|
|
472
|
+
const authValue = auth;
|
|
473
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
474
|
+
const baseUrl = authValue.props.baseUrl;
|
|
475
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
476
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
477
|
+
url: `${baseUrl}/api/v2/public/settings/tags`,
|
|
478
|
+
headers: {
|
|
479
|
+
Authorization: `Bearer ${token}`,
|
|
480
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
481
|
+
},
|
|
482
|
+
});
|
|
483
|
+
const items = response.body?.items || [];
|
|
484
|
+
return {
|
|
485
|
+
options: items.map((item) => ({
|
|
486
|
+
label: item.name,
|
|
487
|
+
value: item.id,
|
|
488
|
+
})),
|
|
489
|
+
};
|
|
490
|
+
},
|
|
241
491
|
}),
|
|
242
492
|
opportunityStage: pieces_framework_1.Property.Array({
|
|
243
493
|
displayName: 'Filter by Stage',
|
|
244
494
|
description: 'Only trigger for specific stage IDs',
|
|
245
495
|
required: false,
|
|
246
496
|
}),
|
|
247
|
-
owner: pieces_framework_1.Property.
|
|
497
|
+
owner: pieces_framework_1.Property.MultiSelectDropdown({
|
|
248
498
|
displayName: 'Filter by Owner',
|
|
249
|
-
description: 'Only trigger for specific owner
|
|
499
|
+
description: 'Only trigger for specific owner',
|
|
250
500
|
required: false,
|
|
501
|
+
auth: auth_1.workbuddyAuth,
|
|
502
|
+
refreshers: [],
|
|
503
|
+
options: async ({ auth }) => {
|
|
504
|
+
const authValue = auth;
|
|
505
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
506
|
+
const baseUrl = authValue.props.baseUrl;
|
|
507
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
508
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
509
|
+
url: `${baseUrl}/api/v2/public/employees`,
|
|
510
|
+
headers: {
|
|
511
|
+
Authorization: `Bearer ${token}`,
|
|
512
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
513
|
+
},
|
|
514
|
+
});
|
|
515
|
+
const items = response.body?.items || [];
|
|
516
|
+
return {
|
|
517
|
+
options: items.map((item) => ({
|
|
518
|
+
label: item.name,
|
|
519
|
+
value: item.id,
|
|
520
|
+
})),
|
|
521
|
+
};
|
|
522
|
+
},
|
|
251
523
|
}),
|
|
252
524
|
},
|
|
253
525
|
sampleData: {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
526
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
527
|
+
event: 'Opportunity Status Changed',
|
|
528
|
+
action: 'update',
|
|
529
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
530
|
+
webhookTimestamp: 1773465707307,
|
|
531
|
+
data: {
|
|
532
|
+
opportunity: {
|
|
533
|
+
id: '507f1f77bcf86cd799439011',
|
|
534
|
+
name: 'New Project Opportunity',
|
|
535
|
+
status: 'Open',
|
|
536
|
+
value: 50000.0,
|
|
537
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
538
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
539
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
540
|
+
},
|
|
262
541
|
},
|
|
263
542
|
},
|
|
264
543
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -277,7 +556,7 @@ exports.opportunity_status_changed_trigger = (0, pieces_framework_1.createTrigge
|
|
|
277
556
|
filters.opportunityStage = context.propsValue.opportunityStage;
|
|
278
557
|
if (context.propsValue.owner?.length)
|
|
279
558
|
filters.owner = context.propsValue.owner;
|
|
280
|
-
// Register webhook with WorkBuddy v2 API
|
|
559
|
+
// Register webhook with WorkBuddy v2 API
|
|
281
560
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
282
561
|
method: pieces_common_1.HttpMethod.POST,
|
|
283
562
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -306,18 +585,15 @@ exports.opportunity_status_changed_trigger = (0, pieces_framework_1.createTrigge
|
|
|
306
585
|
const baseUrl = context.auth.props.baseUrl;
|
|
307
586
|
const webhookId = await context.store.get('webhookId');
|
|
308
587
|
if (webhookId) {
|
|
309
|
-
//
|
|
588
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
310
589
|
await pieces_common_1.httpClient.sendRequest({
|
|
311
|
-
method: pieces_common_1.HttpMethod.
|
|
590
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
312
591
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
313
592
|
headers: {
|
|
314
593
|
Authorization: `Bearer ${token}`,
|
|
315
594
|
'Content-Type': 'application/json',
|
|
316
595
|
'X-WorkBuddy-Version': '2026-01',
|
|
317
596
|
},
|
|
318
|
-
body: {
|
|
319
|
-
status: 'paused',
|
|
320
|
-
},
|
|
321
597
|
});
|
|
322
598
|
}
|
|
323
599
|
},
|
|
@@ -331,41 +607,136 @@ exports.opportunity_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
331
607
|
displayName: 'Opportunity Deleted',
|
|
332
608
|
description: 'Triggered when an opportunity is deleted',
|
|
333
609
|
props: {
|
|
334
|
-
customer: pieces_framework_1.Property.
|
|
610
|
+
customer: pieces_framework_1.Property.MultiSelectDropdown({
|
|
335
611
|
displayName: 'Filter by Customer',
|
|
336
|
-
description: 'Only trigger for specific customer
|
|
612
|
+
description: 'Only trigger for specific customer',
|
|
337
613
|
required: false,
|
|
614
|
+
auth: auth_1.workbuddyAuth,
|
|
615
|
+
refreshers: [],
|
|
616
|
+
options: async ({ auth }) => {
|
|
617
|
+
const authValue = auth;
|
|
618
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
619
|
+
const baseUrl = authValue.props.baseUrl;
|
|
620
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
621
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
622
|
+
url: `${baseUrl}/api/v2/public/customers`,
|
|
623
|
+
headers: {
|
|
624
|
+
Authorization: `Bearer ${token}`,
|
|
625
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
626
|
+
},
|
|
627
|
+
});
|
|
628
|
+
const items = response.body?.items || [];
|
|
629
|
+
return {
|
|
630
|
+
options: items.map((item) => ({
|
|
631
|
+
label: item.name,
|
|
632
|
+
value: item.id,
|
|
633
|
+
})),
|
|
634
|
+
};
|
|
635
|
+
},
|
|
338
636
|
}),
|
|
339
|
-
billingCompany: pieces_framework_1.Property.
|
|
637
|
+
billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
|
|
340
638
|
displayName: 'Filter by Billing Company',
|
|
341
|
-
description: 'Only trigger for specific billing company
|
|
639
|
+
description: 'Only trigger for specific billing company',
|
|
342
640
|
required: false,
|
|
641
|
+
auth: auth_1.workbuddyAuth,
|
|
642
|
+
refreshers: [],
|
|
643
|
+
options: async ({ auth }) => {
|
|
644
|
+
const authValue = auth;
|
|
645
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
646
|
+
const baseUrl = authValue.props.baseUrl;
|
|
647
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
648
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
649
|
+
url: `${baseUrl}/api/v2/public/companies`,
|
|
650
|
+
headers: {
|
|
651
|
+
Authorization: `Bearer ${token}`,
|
|
652
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
653
|
+
},
|
|
654
|
+
});
|
|
655
|
+
const items = response.body?.items || [];
|
|
656
|
+
return {
|
|
657
|
+
options: items.map((item) => ({
|
|
658
|
+
label: item.name,
|
|
659
|
+
value: item.id,
|
|
660
|
+
})),
|
|
661
|
+
};
|
|
662
|
+
},
|
|
343
663
|
}),
|
|
344
|
-
tag: pieces_framework_1.Property.
|
|
664
|
+
tag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
345
665
|
displayName: 'Filter by Tags',
|
|
346
|
-
description: 'Only trigger for specific tags
|
|
666
|
+
description: 'Only trigger for specific tags',
|
|
347
667
|
required: false,
|
|
668
|
+
auth: auth_1.workbuddyAuth,
|
|
669
|
+
refreshers: [],
|
|
670
|
+
options: async ({ auth }) => {
|
|
671
|
+
const authValue = auth;
|
|
672
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
673
|
+
const baseUrl = authValue.props.baseUrl;
|
|
674
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
675
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
676
|
+
url: `${baseUrl}/api/v2/public/settings/tags`,
|
|
677
|
+
headers: {
|
|
678
|
+
Authorization: `Bearer ${token}`,
|
|
679
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
680
|
+
},
|
|
681
|
+
});
|
|
682
|
+
const items = response.body?.items || [];
|
|
683
|
+
return {
|
|
684
|
+
options: items.map((item) => ({
|
|
685
|
+
label: item.name,
|
|
686
|
+
value: item.id,
|
|
687
|
+
})),
|
|
688
|
+
};
|
|
689
|
+
},
|
|
348
690
|
}),
|
|
349
691
|
opportunityStage: pieces_framework_1.Property.Array({
|
|
350
692
|
displayName: 'Filter by Stage',
|
|
351
693
|
description: 'Only trigger for specific stage IDs',
|
|
352
694
|
required: false,
|
|
353
695
|
}),
|
|
354
|
-
owner: pieces_framework_1.Property.
|
|
696
|
+
owner: pieces_framework_1.Property.MultiSelectDropdown({
|
|
355
697
|
displayName: 'Filter by Owner',
|
|
356
|
-
description: 'Only trigger for specific owner
|
|
698
|
+
description: 'Only trigger for specific owner',
|
|
357
699
|
required: false,
|
|
700
|
+
auth: auth_1.workbuddyAuth,
|
|
701
|
+
refreshers: [],
|
|
702
|
+
options: async ({ auth }) => {
|
|
703
|
+
const authValue = auth;
|
|
704
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
705
|
+
const baseUrl = authValue.props.baseUrl;
|
|
706
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
707
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
708
|
+
url: `${baseUrl}/api/v2/public/employees`,
|
|
709
|
+
headers: {
|
|
710
|
+
Authorization: `Bearer ${token}`,
|
|
711
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
712
|
+
},
|
|
713
|
+
});
|
|
714
|
+
const items = response.body?.items || [];
|
|
715
|
+
return {
|
|
716
|
+
options: items.map((item) => ({
|
|
717
|
+
label: item.name,
|
|
718
|
+
value: item.id,
|
|
719
|
+
})),
|
|
720
|
+
};
|
|
721
|
+
},
|
|
358
722
|
}),
|
|
359
723
|
},
|
|
360
724
|
sampleData: {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
725
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
726
|
+
event: 'Opportunity Deleted',
|
|
727
|
+
action: 'remove',
|
|
728
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
729
|
+
webhookTimestamp: 1773465707307,
|
|
730
|
+
data: {
|
|
731
|
+
opportunity: {
|
|
732
|
+
id: '507f1f77bcf86cd799439011',
|
|
733
|
+
name: 'New Project Opportunity',
|
|
734
|
+
status: 'Open',
|
|
735
|
+
value: 50000.0,
|
|
736
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
737
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
738
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
739
|
+
},
|
|
369
740
|
},
|
|
370
741
|
},
|
|
371
742
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -384,7 +755,7 @@ exports.opportunity_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
384
755
|
filters.opportunityStage = context.propsValue.opportunityStage;
|
|
385
756
|
if (context.propsValue.owner?.length)
|
|
386
757
|
filters.owner = context.propsValue.owner;
|
|
387
|
-
// Register webhook with WorkBuddy v2 API
|
|
758
|
+
// Register webhook with WorkBuddy v2 API
|
|
388
759
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
389
760
|
method: pieces_common_1.HttpMethod.POST,
|
|
390
761
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -413,18 +784,15 @@ exports.opportunity_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
413
784
|
const baseUrl = context.auth.props.baseUrl;
|
|
414
785
|
const webhookId = await context.store.get('webhookId');
|
|
415
786
|
if (webhookId) {
|
|
416
|
-
//
|
|
787
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
417
788
|
await pieces_common_1.httpClient.sendRequest({
|
|
418
|
-
method: pieces_common_1.HttpMethod.
|
|
789
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
419
790
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
420
791
|
headers: {
|
|
421
792
|
Authorization: `Bearer ${token}`,
|
|
422
793
|
'Content-Type': 'application/json',
|
|
423
794
|
'X-WorkBuddy-Version': '2026-01',
|
|
424
795
|
},
|
|
425
|
-
body: {
|
|
426
|
-
status: 'paused',
|
|
427
|
-
},
|
|
428
796
|
});
|
|
429
797
|
}
|
|
430
798
|
},
|