@workbuddy/piece-workbuddy-vnext 1.0.4 → 1.0.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.
- 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
package/src/lib/triggers/job.js
CHANGED
|
@@ -10,45 +10,221 @@ exports.job_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
10
10
|
displayName: 'Job Created',
|
|
11
11
|
description: 'Triggered when a new job 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
|
-
site: pieces_framework_1.Property.
|
|
94
|
+
site: pieces_framework_1.Property.MultiSelectDropdown({
|
|
29
95
|
displayName: 'Filter by Site',
|
|
30
|
-
description: 'Only trigger for specific site
|
|
96
|
+
description: 'Only trigger for specific site',
|
|
31
97
|
required: false,
|
|
98
|
+
auth: auth_1.workbuddyAuth,
|
|
99
|
+
refreshers: [],
|
|
100
|
+
options: async ({ auth }) => {
|
|
101
|
+
const authValue = auth;
|
|
102
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
103
|
+
const baseUrl = authValue.props.baseUrl;
|
|
104
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
105
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
106
|
+
url: `${baseUrl}/api/v2/public/sites`,
|
|
107
|
+
headers: {
|
|
108
|
+
Authorization: `Bearer ${token}`,
|
|
109
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
const items = response.body?.items || [];
|
|
113
|
+
return {
|
|
114
|
+
options: items.map((item) => ({
|
|
115
|
+
label: item.name,
|
|
116
|
+
value: item.id,
|
|
117
|
+
})),
|
|
118
|
+
};
|
|
119
|
+
},
|
|
32
120
|
}),
|
|
33
|
-
type: pieces_framework_1.Property.
|
|
121
|
+
type: pieces_framework_1.Property.MultiSelectDropdown({
|
|
34
122
|
displayName: 'Filter by Job Type',
|
|
35
|
-
description: 'Only trigger for specific job type
|
|
123
|
+
description: 'Only trigger for specific job type',
|
|
36
124
|
required: false,
|
|
125
|
+
auth: auth_1.workbuddyAuth,
|
|
126
|
+
refreshers: [],
|
|
127
|
+
options: async ({ auth }) => {
|
|
128
|
+
const authValue = auth;
|
|
129
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
130
|
+
const baseUrl = authValue.props.baseUrl;
|
|
131
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
132
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
133
|
+
url: `${baseUrl}/api/v2/public/settings/job-types`,
|
|
134
|
+
headers: {
|
|
135
|
+
Authorization: `Bearer ${token}`,
|
|
136
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
const items = response.body?.items || [];
|
|
140
|
+
return {
|
|
141
|
+
options: items.map((item) => ({
|
|
142
|
+
label: item.name,
|
|
143
|
+
value: item.id,
|
|
144
|
+
})),
|
|
145
|
+
};
|
|
146
|
+
},
|
|
37
147
|
}),
|
|
38
|
-
priority: pieces_framework_1.Property.
|
|
148
|
+
priority: pieces_framework_1.Property.MultiSelectDropdown({
|
|
39
149
|
displayName: 'Filter by Priority',
|
|
40
|
-
description: 'Only trigger for specific priority
|
|
150
|
+
description: 'Only trigger for specific priority',
|
|
41
151
|
required: false,
|
|
152
|
+
auth: auth_1.workbuddyAuth,
|
|
153
|
+
refreshers: [],
|
|
154
|
+
options: async ({ auth }) => {
|
|
155
|
+
const authValue = auth;
|
|
156
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
157
|
+
const baseUrl = authValue.props.baseUrl;
|
|
158
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
159
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
160
|
+
url: `${baseUrl}/api/v2/public/settings/priorities`,
|
|
161
|
+
headers: {
|
|
162
|
+
Authorization: `Bearer ${token}`,
|
|
163
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
const items = response.body?.items || [];
|
|
167
|
+
return {
|
|
168
|
+
options: items.map((item) => ({
|
|
169
|
+
label: item.name,
|
|
170
|
+
value: item.id,
|
|
171
|
+
})),
|
|
172
|
+
};
|
|
173
|
+
},
|
|
42
174
|
}),
|
|
43
|
-
owner: pieces_framework_1.Property.
|
|
175
|
+
owner: pieces_framework_1.Property.MultiSelectDropdown({
|
|
44
176
|
displayName: 'Filter by Owner',
|
|
45
|
-
description: 'Only trigger for specific owner
|
|
177
|
+
description: 'Only trigger for specific owner',
|
|
46
178
|
required: false,
|
|
179
|
+
auth: auth_1.workbuddyAuth,
|
|
180
|
+
refreshers: [],
|
|
181
|
+
options: async ({ auth }) => {
|
|
182
|
+
const authValue = auth;
|
|
183
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
184
|
+
const baseUrl = authValue.props.baseUrl;
|
|
185
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
186
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
187
|
+
url: `${baseUrl}/api/v2/public/employees`,
|
|
188
|
+
headers: {
|
|
189
|
+
Authorization: `Bearer ${token}`,
|
|
190
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
const items = response.body?.items || [];
|
|
194
|
+
return {
|
|
195
|
+
options: items.map((item) => ({
|
|
196
|
+
label: item.name,
|
|
197
|
+
value: item.id,
|
|
198
|
+
})),
|
|
199
|
+
};
|
|
200
|
+
},
|
|
47
201
|
}),
|
|
48
|
-
zone: pieces_framework_1.Property.
|
|
202
|
+
zone: pieces_framework_1.Property.MultiSelectDropdown({
|
|
49
203
|
displayName: 'Filter by Zone',
|
|
50
|
-
description: 'Only trigger for specific zone
|
|
204
|
+
description: 'Only trigger for specific zone',
|
|
51
205
|
required: false,
|
|
206
|
+
auth: auth_1.workbuddyAuth,
|
|
207
|
+
refreshers: [],
|
|
208
|
+
options: async ({ auth }) => {
|
|
209
|
+
const authValue = auth;
|
|
210
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
211
|
+
const baseUrl = authValue.props.baseUrl;
|
|
212
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
213
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
214
|
+
url: `${baseUrl}/api/v2/public/settings/zones`,
|
|
215
|
+
headers: {
|
|
216
|
+
Authorization: `Bearer ${token}`,
|
|
217
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
218
|
+
},
|
|
219
|
+
});
|
|
220
|
+
const items = response.body?.items || [];
|
|
221
|
+
return {
|
|
222
|
+
options: items.map((item) => ({
|
|
223
|
+
label: item.name,
|
|
224
|
+
value: item.id,
|
|
225
|
+
})),
|
|
226
|
+
};
|
|
227
|
+
},
|
|
52
228
|
}),
|
|
53
229
|
status: pieces_framework_1.Property.StaticMultiSelectDropdown({
|
|
54
230
|
displayName: 'Filter by Status',
|
|
@@ -66,39 +242,46 @@ exports.job_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
66
242
|
}),
|
|
67
243
|
},
|
|
68
244
|
sampleData: {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
createdAt: '2026-03-05T10:00:00.000Z',
|
|
77
|
-
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
78
|
-
startDate: '2026-03-05T10:00:00.000Z',
|
|
79
|
-
dueDate: '2026-03-15T10:00:00.000Z',
|
|
80
|
-
completedDate: null,
|
|
81
|
-
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
82
|
-
customerPO: 'PO-1234',
|
|
83
|
-
customerWO: 'WO-5678',
|
|
84
|
-
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
85
|
-
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
86
|
-
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
87
|
-
site: {
|
|
245
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
246
|
+
event: 'Job Created',
|
|
247
|
+
action: 'create',
|
|
248
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
249
|
+
webhookTimestamp: 1773465707307,
|
|
250
|
+
data: {
|
|
251
|
+
job: {
|
|
88
252
|
id: '507f1f77bcf86cd799439011',
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
253
|
+
mode: 'job',
|
|
254
|
+
jobNumber: 'J10001',
|
|
255
|
+
description: 'Sample job description',
|
|
256
|
+
status: 'Open',
|
|
257
|
+
source: 'web',
|
|
258
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
259
|
+
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
260
|
+
startDate: '2026-03-05T10:00:00.000Z',
|
|
261
|
+
dueDate: '2026-03-15T10:00:00.000Z',
|
|
262
|
+
completedDate: null,
|
|
263
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
264
|
+
customerPO: 'PO-1234',
|
|
265
|
+
customerWO: 'WO-5678',
|
|
266
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
267
|
+
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
268
|
+
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
269
|
+
site: {
|
|
270
|
+
id: '507f1f77bcf86cd799439011',
|
|
271
|
+
name: 'Main Office',
|
|
272
|
+
address: {
|
|
273
|
+
street: '123 Main St',
|
|
274
|
+
suburb: 'Sydney',
|
|
275
|
+
state: 'NSW',
|
|
276
|
+
postcode: '2000',
|
|
277
|
+
country: 'Australia',
|
|
278
|
+
formatted: '123 Main St, Sydney NSW 2000',
|
|
279
|
+
},
|
|
97
280
|
},
|
|
281
|
+
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
282
|
+
type: { id: '507f1f77bcf86cd799439011', name: 'Maintenance' },
|
|
283
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
98
284
|
},
|
|
99
|
-
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
100
|
-
type: { id: '507f1f77bcf86cd799439011', name: 'Maintenance' },
|
|
101
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
102
285
|
},
|
|
103
286
|
},
|
|
104
287
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -125,7 +308,7 @@ exports.job_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
125
308
|
filters.zone = context.propsValue.zone;
|
|
126
309
|
if (context.propsValue.status?.length)
|
|
127
310
|
filters.status = context.propsValue.status.map((v) => JSON.parse(v));
|
|
128
|
-
// Register webhook with WorkBuddy v2 API
|
|
311
|
+
// Register webhook with WorkBuddy v2 API
|
|
129
312
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
130
313
|
method: pieces_common_1.HttpMethod.POST,
|
|
131
314
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -154,18 +337,15 @@ exports.job_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
154
337
|
const baseUrl = context.auth.props.baseUrl;
|
|
155
338
|
const webhookId = await context.store.get('webhookId');
|
|
156
339
|
if (webhookId) {
|
|
157
|
-
//
|
|
340
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
158
341
|
await pieces_common_1.httpClient.sendRequest({
|
|
159
|
-
method: pieces_common_1.HttpMethod.
|
|
342
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
160
343
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
161
344
|
headers: {
|
|
162
345
|
Authorization: `Bearer ${token}`,
|
|
163
346
|
'Content-Type': 'application/json',
|
|
164
347
|
'X-WorkBuddy-Version': '2026-01',
|
|
165
348
|
},
|
|
166
|
-
body: {
|
|
167
|
-
status: 'paused',
|
|
168
|
-
},
|
|
169
349
|
});
|
|
170
350
|
}
|
|
171
351
|
},
|
|
@@ -179,45 +359,221 @@ exports.job_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
179
359
|
displayName: 'Job Updated',
|
|
180
360
|
description: 'Triggered when a job is updated',
|
|
181
361
|
props: {
|
|
182
|
-
customer: pieces_framework_1.Property.
|
|
362
|
+
customer: pieces_framework_1.Property.MultiSelectDropdown({
|
|
183
363
|
displayName: 'Filter by Customer',
|
|
184
|
-
description: 'Only trigger for specific customer
|
|
364
|
+
description: 'Only trigger for specific customer',
|
|
185
365
|
required: false,
|
|
366
|
+
auth: auth_1.workbuddyAuth,
|
|
367
|
+
refreshers: [],
|
|
368
|
+
options: async ({ auth }) => {
|
|
369
|
+
const authValue = auth;
|
|
370
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
371
|
+
const baseUrl = authValue.props.baseUrl;
|
|
372
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
373
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
374
|
+
url: `${baseUrl}/api/v2/public/customers`,
|
|
375
|
+
headers: {
|
|
376
|
+
Authorization: `Bearer ${token}`,
|
|
377
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
378
|
+
},
|
|
379
|
+
});
|
|
380
|
+
const items = response.body?.items || [];
|
|
381
|
+
return {
|
|
382
|
+
options: items.map((item) => ({
|
|
383
|
+
label: item.name,
|
|
384
|
+
value: item.id,
|
|
385
|
+
})),
|
|
386
|
+
};
|
|
387
|
+
},
|
|
186
388
|
}),
|
|
187
|
-
billingCompany: pieces_framework_1.Property.
|
|
389
|
+
billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
|
|
188
390
|
displayName: 'Filter by Billing Company',
|
|
189
|
-
description: 'Only trigger for specific billing company
|
|
391
|
+
description: 'Only trigger for specific billing company',
|
|
190
392
|
required: false,
|
|
393
|
+
auth: auth_1.workbuddyAuth,
|
|
394
|
+
refreshers: [],
|
|
395
|
+
options: async ({ auth }) => {
|
|
396
|
+
const authValue = auth;
|
|
397
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
398
|
+
const baseUrl = authValue.props.baseUrl;
|
|
399
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
400
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
401
|
+
url: `${baseUrl}/api/v2/public/companies`,
|
|
402
|
+
headers: {
|
|
403
|
+
Authorization: `Bearer ${token}`,
|
|
404
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
405
|
+
},
|
|
406
|
+
});
|
|
407
|
+
const items = response.body?.items || [];
|
|
408
|
+
return {
|
|
409
|
+
options: items.map((item) => ({
|
|
410
|
+
label: item.name,
|
|
411
|
+
value: item.id,
|
|
412
|
+
})),
|
|
413
|
+
};
|
|
414
|
+
},
|
|
191
415
|
}),
|
|
192
|
-
tag: pieces_framework_1.Property.
|
|
416
|
+
tag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
193
417
|
displayName: 'Filter by Tags',
|
|
194
|
-
description: 'Only trigger for specific tags
|
|
418
|
+
description: 'Only trigger for specific tags',
|
|
195
419
|
required: false,
|
|
420
|
+
auth: auth_1.workbuddyAuth,
|
|
421
|
+
refreshers: [],
|
|
422
|
+
options: async ({ auth }) => {
|
|
423
|
+
const authValue = auth;
|
|
424
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
425
|
+
const baseUrl = authValue.props.baseUrl;
|
|
426
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
427
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
428
|
+
url: `${baseUrl}/api/v2/public/settings/tags`,
|
|
429
|
+
headers: {
|
|
430
|
+
Authorization: `Bearer ${token}`,
|
|
431
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
432
|
+
},
|
|
433
|
+
});
|
|
434
|
+
const items = response.body?.items || [];
|
|
435
|
+
return {
|
|
436
|
+
options: items.map((item) => ({
|
|
437
|
+
label: item.name,
|
|
438
|
+
value: item.id,
|
|
439
|
+
})),
|
|
440
|
+
};
|
|
441
|
+
},
|
|
196
442
|
}),
|
|
197
|
-
site: pieces_framework_1.Property.
|
|
443
|
+
site: pieces_framework_1.Property.MultiSelectDropdown({
|
|
198
444
|
displayName: 'Filter by Site',
|
|
199
|
-
description: 'Only trigger for specific site
|
|
445
|
+
description: 'Only trigger for specific site',
|
|
200
446
|
required: false,
|
|
447
|
+
auth: auth_1.workbuddyAuth,
|
|
448
|
+
refreshers: [],
|
|
449
|
+
options: async ({ auth }) => {
|
|
450
|
+
const authValue = auth;
|
|
451
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
452
|
+
const baseUrl = authValue.props.baseUrl;
|
|
453
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
454
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
455
|
+
url: `${baseUrl}/api/v2/public/sites`,
|
|
456
|
+
headers: {
|
|
457
|
+
Authorization: `Bearer ${token}`,
|
|
458
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
459
|
+
},
|
|
460
|
+
});
|
|
461
|
+
const items = response.body?.items || [];
|
|
462
|
+
return {
|
|
463
|
+
options: items.map((item) => ({
|
|
464
|
+
label: item.name,
|
|
465
|
+
value: item.id,
|
|
466
|
+
})),
|
|
467
|
+
};
|
|
468
|
+
},
|
|
201
469
|
}),
|
|
202
|
-
type: pieces_framework_1.Property.
|
|
470
|
+
type: pieces_framework_1.Property.MultiSelectDropdown({
|
|
203
471
|
displayName: 'Filter by Job Type',
|
|
204
|
-
description: 'Only trigger for specific job type
|
|
472
|
+
description: 'Only trigger for specific job type',
|
|
205
473
|
required: false,
|
|
474
|
+
auth: auth_1.workbuddyAuth,
|
|
475
|
+
refreshers: [],
|
|
476
|
+
options: async ({ auth }) => {
|
|
477
|
+
const authValue = auth;
|
|
478
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
479
|
+
const baseUrl = authValue.props.baseUrl;
|
|
480
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
481
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
482
|
+
url: `${baseUrl}/api/v2/public/settings/job-types`,
|
|
483
|
+
headers: {
|
|
484
|
+
Authorization: `Bearer ${token}`,
|
|
485
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
486
|
+
},
|
|
487
|
+
});
|
|
488
|
+
const items = response.body?.items || [];
|
|
489
|
+
return {
|
|
490
|
+
options: items.map((item) => ({
|
|
491
|
+
label: item.name,
|
|
492
|
+
value: item.id,
|
|
493
|
+
})),
|
|
494
|
+
};
|
|
495
|
+
},
|
|
206
496
|
}),
|
|
207
|
-
priority: pieces_framework_1.Property.
|
|
497
|
+
priority: pieces_framework_1.Property.MultiSelectDropdown({
|
|
208
498
|
displayName: 'Filter by Priority',
|
|
209
|
-
description: 'Only trigger for specific priority
|
|
499
|
+
description: 'Only trigger for specific priority',
|
|
210
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/settings/priorities`,
|
|
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
|
+
},
|
|
211
523
|
}),
|
|
212
|
-
owner: pieces_framework_1.Property.
|
|
524
|
+
owner: pieces_framework_1.Property.MultiSelectDropdown({
|
|
213
525
|
displayName: 'Filter by Owner',
|
|
214
|
-
description: 'Only trigger for specific owner
|
|
526
|
+
description: 'Only trigger for specific owner',
|
|
215
527
|
required: false,
|
|
528
|
+
auth: auth_1.workbuddyAuth,
|
|
529
|
+
refreshers: [],
|
|
530
|
+
options: async ({ auth }) => {
|
|
531
|
+
const authValue = auth;
|
|
532
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
533
|
+
const baseUrl = authValue.props.baseUrl;
|
|
534
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
535
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
536
|
+
url: `${baseUrl}/api/v2/public/employees`,
|
|
537
|
+
headers: {
|
|
538
|
+
Authorization: `Bearer ${token}`,
|
|
539
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
540
|
+
},
|
|
541
|
+
});
|
|
542
|
+
const items = response.body?.items || [];
|
|
543
|
+
return {
|
|
544
|
+
options: items.map((item) => ({
|
|
545
|
+
label: item.name,
|
|
546
|
+
value: item.id,
|
|
547
|
+
})),
|
|
548
|
+
};
|
|
549
|
+
},
|
|
216
550
|
}),
|
|
217
|
-
zone: pieces_framework_1.Property.
|
|
551
|
+
zone: pieces_framework_1.Property.MultiSelectDropdown({
|
|
218
552
|
displayName: 'Filter by Zone',
|
|
219
|
-
description: 'Only trigger for specific zone
|
|
553
|
+
description: 'Only trigger for specific zone',
|
|
220
554
|
required: false,
|
|
555
|
+
auth: auth_1.workbuddyAuth,
|
|
556
|
+
refreshers: [],
|
|
557
|
+
options: async ({ auth }) => {
|
|
558
|
+
const authValue = auth;
|
|
559
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
560
|
+
const baseUrl = authValue.props.baseUrl;
|
|
561
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
562
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
563
|
+
url: `${baseUrl}/api/v2/public/settings/zones`,
|
|
564
|
+
headers: {
|
|
565
|
+
Authorization: `Bearer ${token}`,
|
|
566
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
567
|
+
},
|
|
568
|
+
});
|
|
569
|
+
const items = response.body?.items || [];
|
|
570
|
+
return {
|
|
571
|
+
options: items.map((item) => ({
|
|
572
|
+
label: item.name,
|
|
573
|
+
value: item.id,
|
|
574
|
+
})),
|
|
575
|
+
};
|
|
576
|
+
},
|
|
221
577
|
}),
|
|
222
578
|
status: pieces_framework_1.Property.StaticMultiSelectDropdown({
|
|
223
579
|
displayName: 'Filter by Status',
|
|
@@ -235,39 +591,46 @@ exports.job_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
235
591
|
}),
|
|
236
592
|
},
|
|
237
593
|
sampleData: {
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
createdAt: '2026-03-05T10:00:00.000Z',
|
|
246
|
-
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
247
|
-
startDate: '2026-03-05T10:00:00.000Z',
|
|
248
|
-
dueDate: '2026-03-15T10:00:00.000Z',
|
|
249
|
-
completedDate: null,
|
|
250
|
-
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
251
|
-
customerPO: 'PO-1234',
|
|
252
|
-
customerWO: 'WO-5678',
|
|
253
|
-
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
254
|
-
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
255
|
-
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
256
|
-
site: {
|
|
594
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
595
|
+
event: 'Job Updated',
|
|
596
|
+
action: 'update',
|
|
597
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
598
|
+
webhookTimestamp: 1773465707307,
|
|
599
|
+
data: {
|
|
600
|
+
job: {
|
|
257
601
|
id: '507f1f77bcf86cd799439011',
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
602
|
+
mode: 'job',
|
|
603
|
+
jobNumber: 'J10001',
|
|
604
|
+
description: 'Sample job description',
|
|
605
|
+
status: 'Open',
|
|
606
|
+
source: 'web',
|
|
607
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
608
|
+
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
609
|
+
startDate: '2026-03-05T10:00:00.000Z',
|
|
610
|
+
dueDate: '2026-03-15T10:00:00.000Z',
|
|
611
|
+
completedDate: null,
|
|
612
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
613
|
+
customerPO: 'PO-1234',
|
|
614
|
+
customerWO: 'WO-5678',
|
|
615
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
616
|
+
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
617
|
+
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
618
|
+
site: {
|
|
619
|
+
id: '507f1f77bcf86cd799439011',
|
|
620
|
+
name: 'Main Office',
|
|
621
|
+
address: {
|
|
622
|
+
street: '123 Main St',
|
|
623
|
+
suburb: 'Sydney',
|
|
624
|
+
state: 'NSW',
|
|
625
|
+
postcode: '2000',
|
|
626
|
+
country: 'Australia',
|
|
627
|
+
formatted: '123 Main St, Sydney NSW 2000',
|
|
628
|
+
},
|
|
266
629
|
},
|
|
630
|
+
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
631
|
+
type: { id: '507f1f77bcf86cd799439011', name: 'Maintenance' },
|
|
632
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
267
633
|
},
|
|
268
|
-
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
269
|
-
type: { id: '507f1f77bcf86cd799439011', name: 'Maintenance' },
|
|
270
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
271
634
|
},
|
|
272
635
|
},
|
|
273
636
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -294,7 +657,7 @@ exports.job_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
294
657
|
filters.zone = context.propsValue.zone;
|
|
295
658
|
if (context.propsValue.status?.length)
|
|
296
659
|
filters.status = context.propsValue.status.map((v) => JSON.parse(v));
|
|
297
|
-
// Register webhook with WorkBuddy v2 API
|
|
660
|
+
// Register webhook with WorkBuddy v2 API
|
|
298
661
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
299
662
|
method: pieces_common_1.HttpMethod.POST,
|
|
300
663
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -323,18 +686,15 @@ exports.job_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
323
686
|
const baseUrl = context.auth.props.baseUrl;
|
|
324
687
|
const webhookId = await context.store.get('webhookId');
|
|
325
688
|
if (webhookId) {
|
|
326
|
-
//
|
|
689
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
327
690
|
await pieces_common_1.httpClient.sendRequest({
|
|
328
|
-
method: pieces_common_1.HttpMethod.
|
|
691
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
329
692
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
330
693
|
headers: {
|
|
331
694
|
Authorization: `Bearer ${token}`,
|
|
332
695
|
'Content-Type': 'application/json',
|
|
333
696
|
'X-WorkBuddy-Version': '2026-01',
|
|
334
697
|
},
|
|
335
|
-
body: {
|
|
336
|
-
status: 'paused',
|
|
337
|
-
},
|
|
338
698
|
});
|
|
339
699
|
}
|
|
340
700
|
},
|
|
@@ -348,45 +708,221 @@ exports.job_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
348
708
|
displayName: 'Job Status Changed',
|
|
349
709
|
description: 'Triggered when a job status changes',
|
|
350
710
|
props: {
|
|
351
|
-
customer: pieces_framework_1.Property.
|
|
711
|
+
customer: pieces_framework_1.Property.MultiSelectDropdown({
|
|
352
712
|
displayName: 'Filter by Customer',
|
|
353
|
-
description: 'Only trigger for specific customer
|
|
713
|
+
description: 'Only trigger for specific customer',
|
|
354
714
|
required: false,
|
|
715
|
+
auth: auth_1.workbuddyAuth,
|
|
716
|
+
refreshers: [],
|
|
717
|
+
options: async ({ auth }) => {
|
|
718
|
+
const authValue = auth;
|
|
719
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
720
|
+
const baseUrl = authValue.props.baseUrl;
|
|
721
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
722
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
723
|
+
url: `${baseUrl}/api/v2/public/customers`,
|
|
724
|
+
headers: {
|
|
725
|
+
Authorization: `Bearer ${token}`,
|
|
726
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
727
|
+
},
|
|
728
|
+
});
|
|
729
|
+
const items = response.body?.items || [];
|
|
730
|
+
return {
|
|
731
|
+
options: items.map((item) => ({
|
|
732
|
+
label: item.name,
|
|
733
|
+
value: item.id,
|
|
734
|
+
})),
|
|
735
|
+
};
|
|
736
|
+
},
|
|
355
737
|
}),
|
|
356
|
-
billingCompany: pieces_framework_1.Property.
|
|
738
|
+
billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
|
|
357
739
|
displayName: 'Filter by Billing Company',
|
|
358
|
-
description: 'Only trigger for specific billing company
|
|
740
|
+
description: 'Only trigger for specific billing company',
|
|
359
741
|
required: false,
|
|
742
|
+
auth: auth_1.workbuddyAuth,
|
|
743
|
+
refreshers: [],
|
|
744
|
+
options: async ({ auth }) => {
|
|
745
|
+
const authValue = auth;
|
|
746
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
747
|
+
const baseUrl = authValue.props.baseUrl;
|
|
748
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
749
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
750
|
+
url: `${baseUrl}/api/v2/public/companies`,
|
|
751
|
+
headers: {
|
|
752
|
+
Authorization: `Bearer ${token}`,
|
|
753
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
754
|
+
},
|
|
755
|
+
});
|
|
756
|
+
const items = response.body?.items || [];
|
|
757
|
+
return {
|
|
758
|
+
options: items.map((item) => ({
|
|
759
|
+
label: item.name,
|
|
760
|
+
value: item.id,
|
|
761
|
+
})),
|
|
762
|
+
};
|
|
763
|
+
},
|
|
360
764
|
}),
|
|
361
|
-
tag: pieces_framework_1.Property.
|
|
765
|
+
tag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
362
766
|
displayName: 'Filter by Tags',
|
|
363
|
-
description: 'Only trigger for specific tags
|
|
767
|
+
description: 'Only trigger for specific tags',
|
|
364
768
|
required: false,
|
|
769
|
+
auth: auth_1.workbuddyAuth,
|
|
770
|
+
refreshers: [],
|
|
771
|
+
options: async ({ auth }) => {
|
|
772
|
+
const authValue = auth;
|
|
773
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
774
|
+
const baseUrl = authValue.props.baseUrl;
|
|
775
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
776
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
777
|
+
url: `${baseUrl}/api/v2/public/settings/tags`,
|
|
778
|
+
headers: {
|
|
779
|
+
Authorization: `Bearer ${token}`,
|
|
780
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
781
|
+
},
|
|
782
|
+
});
|
|
783
|
+
const items = response.body?.items || [];
|
|
784
|
+
return {
|
|
785
|
+
options: items.map((item) => ({
|
|
786
|
+
label: item.name,
|
|
787
|
+
value: item.id,
|
|
788
|
+
})),
|
|
789
|
+
};
|
|
790
|
+
},
|
|
365
791
|
}),
|
|
366
|
-
site: pieces_framework_1.Property.
|
|
792
|
+
site: pieces_framework_1.Property.MultiSelectDropdown({
|
|
367
793
|
displayName: 'Filter by Site',
|
|
368
|
-
description: 'Only trigger for specific site
|
|
794
|
+
description: 'Only trigger for specific site',
|
|
369
795
|
required: false,
|
|
796
|
+
auth: auth_1.workbuddyAuth,
|
|
797
|
+
refreshers: [],
|
|
798
|
+
options: async ({ auth }) => {
|
|
799
|
+
const authValue = auth;
|
|
800
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
801
|
+
const baseUrl = authValue.props.baseUrl;
|
|
802
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
803
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
804
|
+
url: `${baseUrl}/api/v2/public/sites`,
|
|
805
|
+
headers: {
|
|
806
|
+
Authorization: `Bearer ${token}`,
|
|
807
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
808
|
+
},
|
|
809
|
+
});
|
|
810
|
+
const items = response.body?.items || [];
|
|
811
|
+
return {
|
|
812
|
+
options: items.map((item) => ({
|
|
813
|
+
label: item.name,
|
|
814
|
+
value: item.id,
|
|
815
|
+
})),
|
|
816
|
+
};
|
|
817
|
+
},
|
|
370
818
|
}),
|
|
371
|
-
type: pieces_framework_1.Property.
|
|
819
|
+
type: pieces_framework_1.Property.MultiSelectDropdown({
|
|
372
820
|
displayName: 'Filter by Job Type',
|
|
373
|
-
description: 'Only trigger for specific job type
|
|
821
|
+
description: 'Only trigger for specific job type',
|
|
374
822
|
required: false,
|
|
823
|
+
auth: auth_1.workbuddyAuth,
|
|
824
|
+
refreshers: [],
|
|
825
|
+
options: async ({ auth }) => {
|
|
826
|
+
const authValue = auth;
|
|
827
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
828
|
+
const baseUrl = authValue.props.baseUrl;
|
|
829
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
830
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
831
|
+
url: `${baseUrl}/api/v2/public/settings/job-types`,
|
|
832
|
+
headers: {
|
|
833
|
+
Authorization: `Bearer ${token}`,
|
|
834
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
835
|
+
},
|
|
836
|
+
});
|
|
837
|
+
const items = response.body?.items || [];
|
|
838
|
+
return {
|
|
839
|
+
options: items.map((item) => ({
|
|
840
|
+
label: item.name,
|
|
841
|
+
value: item.id,
|
|
842
|
+
})),
|
|
843
|
+
};
|
|
844
|
+
},
|
|
375
845
|
}),
|
|
376
|
-
priority: pieces_framework_1.Property.
|
|
846
|
+
priority: pieces_framework_1.Property.MultiSelectDropdown({
|
|
377
847
|
displayName: 'Filter by Priority',
|
|
378
|
-
description: 'Only trigger for specific priority
|
|
848
|
+
description: 'Only trigger for specific priority',
|
|
379
849
|
required: false,
|
|
850
|
+
auth: auth_1.workbuddyAuth,
|
|
851
|
+
refreshers: [],
|
|
852
|
+
options: async ({ auth }) => {
|
|
853
|
+
const authValue = auth;
|
|
854
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
855
|
+
const baseUrl = authValue.props.baseUrl;
|
|
856
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
857
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
858
|
+
url: `${baseUrl}/api/v2/public/settings/priorities`,
|
|
859
|
+
headers: {
|
|
860
|
+
Authorization: `Bearer ${token}`,
|
|
861
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
862
|
+
},
|
|
863
|
+
});
|
|
864
|
+
const items = response.body?.items || [];
|
|
865
|
+
return {
|
|
866
|
+
options: items.map((item) => ({
|
|
867
|
+
label: item.name,
|
|
868
|
+
value: item.id,
|
|
869
|
+
})),
|
|
870
|
+
};
|
|
871
|
+
},
|
|
380
872
|
}),
|
|
381
|
-
owner: pieces_framework_1.Property.
|
|
873
|
+
owner: pieces_framework_1.Property.MultiSelectDropdown({
|
|
382
874
|
displayName: 'Filter by Owner',
|
|
383
|
-
description: 'Only trigger for specific owner
|
|
875
|
+
description: 'Only trigger for specific owner',
|
|
384
876
|
required: false,
|
|
877
|
+
auth: auth_1.workbuddyAuth,
|
|
878
|
+
refreshers: [],
|
|
879
|
+
options: async ({ auth }) => {
|
|
880
|
+
const authValue = auth;
|
|
881
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
882
|
+
const baseUrl = authValue.props.baseUrl;
|
|
883
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
884
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
885
|
+
url: `${baseUrl}/api/v2/public/employees`,
|
|
886
|
+
headers: {
|
|
887
|
+
Authorization: `Bearer ${token}`,
|
|
888
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
889
|
+
},
|
|
890
|
+
});
|
|
891
|
+
const items = response.body?.items || [];
|
|
892
|
+
return {
|
|
893
|
+
options: items.map((item) => ({
|
|
894
|
+
label: item.name,
|
|
895
|
+
value: item.id,
|
|
896
|
+
})),
|
|
897
|
+
};
|
|
898
|
+
},
|
|
385
899
|
}),
|
|
386
|
-
zone: pieces_framework_1.Property.
|
|
900
|
+
zone: pieces_framework_1.Property.MultiSelectDropdown({
|
|
387
901
|
displayName: 'Filter by Zone',
|
|
388
|
-
description: 'Only trigger for specific zone
|
|
902
|
+
description: 'Only trigger for specific zone',
|
|
389
903
|
required: false,
|
|
904
|
+
auth: auth_1.workbuddyAuth,
|
|
905
|
+
refreshers: [],
|
|
906
|
+
options: async ({ auth }) => {
|
|
907
|
+
const authValue = auth;
|
|
908
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
909
|
+
const baseUrl = authValue.props.baseUrl;
|
|
910
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
911
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
912
|
+
url: `${baseUrl}/api/v2/public/settings/zones`,
|
|
913
|
+
headers: {
|
|
914
|
+
Authorization: `Bearer ${token}`,
|
|
915
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
916
|
+
},
|
|
917
|
+
});
|
|
918
|
+
const items = response.body?.items || [];
|
|
919
|
+
return {
|
|
920
|
+
options: items.map((item) => ({
|
|
921
|
+
label: item.name,
|
|
922
|
+
value: item.id,
|
|
923
|
+
})),
|
|
924
|
+
};
|
|
925
|
+
},
|
|
390
926
|
}),
|
|
391
927
|
status: pieces_framework_1.Property.StaticMultiSelectDropdown({
|
|
392
928
|
displayName: 'Filter by Status',
|
|
@@ -404,39 +940,46 @@ exports.job_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
404
940
|
}),
|
|
405
941
|
},
|
|
406
942
|
sampleData: {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
createdAt: '2026-03-05T10:00:00.000Z',
|
|
415
|
-
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
416
|
-
startDate: '2026-03-05T10:00:00.000Z',
|
|
417
|
-
dueDate: '2026-03-15T10:00:00.000Z',
|
|
418
|
-
completedDate: null,
|
|
419
|
-
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
420
|
-
customerPO: 'PO-1234',
|
|
421
|
-
customerWO: 'WO-5678',
|
|
422
|
-
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
423
|
-
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
424
|
-
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
425
|
-
site: {
|
|
943
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
944
|
+
event: 'Job Status Changed',
|
|
945
|
+
action: 'update',
|
|
946
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
947
|
+
webhookTimestamp: 1773465707307,
|
|
948
|
+
data: {
|
|
949
|
+
job: {
|
|
426
950
|
id: '507f1f77bcf86cd799439011',
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
951
|
+
mode: 'job',
|
|
952
|
+
jobNumber: 'J10001',
|
|
953
|
+
description: 'Sample job description',
|
|
954
|
+
status: 'Open',
|
|
955
|
+
source: 'web',
|
|
956
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
957
|
+
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
958
|
+
startDate: '2026-03-05T10:00:00.000Z',
|
|
959
|
+
dueDate: '2026-03-15T10:00:00.000Z',
|
|
960
|
+
completedDate: null,
|
|
961
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
962
|
+
customerPO: 'PO-1234',
|
|
963
|
+
customerWO: 'WO-5678',
|
|
964
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
965
|
+
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
966
|
+
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
967
|
+
site: {
|
|
968
|
+
id: '507f1f77bcf86cd799439011',
|
|
969
|
+
name: 'Main Office',
|
|
970
|
+
address: {
|
|
971
|
+
street: '123 Main St',
|
|
972
|
+
suburb: 'Sydney',
|
|
973
|
+
state: 'NSW',
|
|
974
|
+
postcode: '2000',
|
|
975
|
+
country: 'Australia',
|
|
976
|
+
formatted: '123 Main St, Sydney NSW 2000',
|
|
977
|
+
},
|
|
435
978
|
},
|
|
979
|
+
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
980
|
+
type: { id: '507f1f77bcf86cd799439011', name: 'Maintenance' },
|
|
981
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
436
982
|
},
|
|
437
|
-
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
438
|
-
type: { id: '507f1f77bcf86cd799439011', name: 'Maintenance' },
|
|
439
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
440
983
|
},
|
|
441
984
|
},
|
|
442
985
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -463,7 +1006,7 @@ exports.job_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
463
1006
|
filters.zone = context.propsValue.zone;
|
|
464
1007
|
if (context.propsValue.status?.length)
|
|
465
1008
|
filters.status = context.propsValue.status.map((v) => JSON.parse(v));
|
|
466
|
-
// Register webhook with WorkBuddy v2 API
|
|
1009
|
+
// Register webhook with WorkBuddy v2 API
|
|
467
1010
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
468
1011
|
method: pieces_common_1.HttpMethod.POST,
|
|
469
1012
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -492,18 +1035,15 @@ exports.job_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
492
1035
|
const baseUrl = context.auth.props.baseUrl;
|
|
493
1036
|
const webhookId = await context.store.get('webhookId');
|
|
494
1037
|
if (webhookId) {
|
|
495
|
-
//
|
|
1038
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
496
1039
|
await pieces_common_1.httpClient.sendRequest({
|
|
497
|
-
method: pieces_common_1.HttpMethod.
|
|
1040
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
498
1041
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
499
1042
|
headers: {
|
|
500
1043
|
Authorization: `Bearer ${token}`,
|
|
501
1044
|
'Content-Type': 'application/json',
|
|
502
1045
|
'X-WorkBuddy-Version': '2026-01',
|
|
503
1046
|
},
|
|
504
|
-
body: {
|
|
505
|
-
status: 'paused',
|
|
506
|
-
},
|
|
507
1047
|
});
|
|
508
1048
|
}
|
|
509
1049
|
},
|
|
@@ -517,45 +1057,221 @@ exports.job_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
517
1057
|
displayName: 'Job Deleted',
|
|
518
1058
|
description: 'Triggered when a job is deleted',
|
|
519
1059
|
props: {
|
|
520
|
-
customer: pieces_framework_1.Property.
|
|
1060
|
+
customer: pieces_framework_1.Property.MultiSelectDropdown({
|
|
521
1061
|
displayName: 'Filter by Customer',
|
|
522
|
-
description: 'Only trigger for specific customer
|
|
1062
|
+
description: 'Only trigger for specific customer',
|
|
523
1063
|
required: false,
|
|
1064
|
+
auth: auth_1.workbuddyAuth,
|
|
1065
|
+
refreshers: [],
|
|
1066
|
+
options: async ({ auth }) => {
|
|
1067
|
+
const authValue = auth;
|
|
1068
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1069
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1070
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1071
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1072
|
+
url: `${baseUrl}/api/v2/public/customers`,
|
|
1073
|
+
headers: {
|
|
1074
|
+
Authorization: `Bearer ${token}`,
|
|
1075
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1076
|
+
},
|
|
1077
|
+
});
|
|
1078
|
+
const items = response.body?.items || [];
|
|
1079
|
+
return {
|
|
1080
|
+
options: items.map((item) => ({
|
|
1081
|
+
label: item.name,
|
|
1082
|
+
value: item.id,
|
|
1083
|
+
})),
|
|
1084
|
+
};
|
|
1085
|
+
},
|
|
524
1086
|
}),
|
|
525
|
-
billingCompany: pieces_framework_1.Property.
|
|
1087
|
+
billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
|
|
526
1088
|
displayName: 'Filter by Billing Company',
|
|
527
|
-
description: 'Only trigger for specific billing company
|
|
1089
|
+
description: 'Only trigger for specific billing company',
|
|
528
1090
|
required: false,
|
|
1091
|
+
auth: auth_1.workbuddyAuth,
|
|
1092
|
+
refreshers: [],
|
|
1093
|
+
options: async ({ auth }) => {
|
|
1094
|
+
const authValue = auth;
|
|
1095
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1096
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1097
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1098
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1099
|
+
url: `${baseUrl}/api/v2/public/companies`,
|
|
1100
|
+
headers: {
|
|
1101
|
+
Authorization: `Bearer ${token}`,
|
|
1102
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1103
|
+
},
|
|
1104
|
+
});
|
|
1105
|
+
const items = response.body?.items || [];
|
|
1106
|
+
return {
|
|
1107
|
+
options: items.map((item) => ({
|
|
1108
|
+
label: item.name,
|
|
1109
|
+
value: item.id,
|
|
1110
|
+
})),
|
|
1111
|
+
};
|
|
1112
|
+
},
|
|
529
1113
|
}),
|
|
530
|
-
tag: pieces_framework_1.Property.
|
|
1114
|
+
tag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
531
1115
|
displayName: 'Filter by Tags',
|
|
532
|
-
description: 'Only trigger for specific tags
|
|
1116
|
+
description: 'Only trigger for specific tags',
|
|
533
1117
|
required: false,
|
|
1118
|
+
auth: auth_1.workbuddyAuth,
|
|
1119
|
+
refreshers: [],
|
|
1120
|
+
options: async ({ auth }) => {
|
|
1121
|
+
const authValue = auth;
|
|
1122
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1123
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1124
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1125
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1126
|
+
url: `${baseUrl}/api/v2/public/settings/tags`,
|
|
1127
|
+
headers: {
|
|
1128
|
+
Authorization: `Bearer ${token}`,
|
|
1129
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1130
|
+
},
|
|
1131
|
+
});
|
|
1132
|
+
const items = response.body?.items || [];
|
|
1133
|
+
return {
|
|
1134
|
+
options: items.map((item) => ({
|
|
1135
|
+
label: item.name,
|
|
1136
|
+
value: item.id,
|
|
1137
|
+
})),
|
|
1138
|
+
};
|
|
1139
|
+
},
|
|
534
1140
|
}),
|
|
535
|
-
site: pieces_framework_1.Property.
|
|
1141
|
+
site: pieces_framework_1.Property.MultiSelectDropdown({
|
|
536
1142
|
displayName: 'Filter by Site',
|
|
537
|
-
description: 'Only trigger for specific site
|
|
1143
|
+
description: 'Only trigger for specific site',
|
|
538
1144
|
required: false,
|
|
1145
|
+
auth: auth_1.workbuddyAuth,
|
|
1146
|
+
refreshers: [],
|
|
1147
|
+
options: async ({ auth }) => {
|
|
1148
|
+
const authValue = auth;
|
|
1149
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1150
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1151
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1152
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1153
|
+
url: `${baseUrl}/api/v2/public/sites`,
|
|
1154
|
+
headers: {
|
|
1155
|
+
Authorization: `Bearer ${token}`,
|
|
1156
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1157
|
+
},
|
|
1158
|
+
});
|
|
1159
|
+
const items = response.body?.items || [];
|
|
1160
|
+
return {
|
|
1161
|
+
options: items.map((item) => ({
|
|
1162
|
+
label: item.name,
|
|
1163
|
+
value: item.id,
|
|
1164
|
+
})),
|
|
1165
|
+
};
|
|
1166
|
+
},
|
|
539
1167
|
}),
|
|
540
|
-
type: pieces_framework_1.Property.
|
|
1168
|
+
type: pieces_framework_1.Property.MultiSelectDropdown({
|
|
541
1169
|
displayName: 'Filter by Job Type',
|
|
542
|
-
description: 'Only trigger for specific job type
|
|
1170
|
+
description: 'Only trigger for specific job type',
|
|
543
1171
|
required: false,
|
|
1172
|
+
auth: auth_1.workbuddyAuth,
|
|
1173
|
+
refreshers: [],
|
|
1174
|
+
options: async ({ auth }) => {
|
|
1175
|
+
const authValue = auth;
|
|
1176
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1177
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1178
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1179
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1180
|
+
url: `${baseUrl}/api/v2/public/settings/job-types`,
|
|
1181
|
+
headers: {
|
|
1182
|
+
Authorization: `Bearer ${token}`,
|
|
1183
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1184
|
+
},
|
|
1185
|
+
});
|
|
1186
|
+
const items = response.body?.items || [];
|
|
1187
|
+
return {
|
|
1188
|
+
options: items.map((item) => ({
|
|
1189
|
+
label: item.name,
|
|
1190
|
+
value: item.id,
|
|
1191
|
+
})),
|
|
1192
|
+
};
|
|
1193
|
+
},
|
|
544
1194
|
}),
|
|
545
|
-
priority: pieces_framework_1.Property.
|
|
1195
|
+
priority: pieces_framework_1.Property.MultiSelectDropdown({
|
|
546
1196
|
displayName: 'Filter by Priority',
|
|
547
|
-
description: 'Only trigger for specific priority
|
|
1197
|
+
description: 'Only trigger for specific priority',
|
|
548
1198
|
required: false,
|
|
1199
|
+
auth: auth_1.workbuddyAuth,
|
|
1200
|
+
refreshers: [],
|
|
1201
|
+
options: async ({ auth }) => {
|
|
1202
|
+
const authValue = auth;
|
|
1203
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1204
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1205
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1206
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1207
|
+
url: `${baseUrl}/api/v2/public/settings/priorities`,
|
|
1208
|
+
headers: {
|
|
1209
|
+
Authorization: `Bearer ${token}`,
|
|
1210
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1211
|
+
},
|
|
1212
|
+
});
|
|
1213
|
+
const items = response.body?.items || [];
|
|
1214
|
+
return {
|
|
1215
|
+
options: items.map((item) => ({
|
|
1216
|
+
label: item.name,
|
|
1217
|
+
value: item.id,
|
|
1218
|
+
})),
|
|
1219
|
+
};
|
|
1220
|
+
},
|
|
549
1221
|
}),
|
|
550
|
-
owner: pieces_framework_1.Property.
|
|
1222
|
+
owner: pieces_framework_1.Property.MultiSelectDropdown({
|
|
551
1223
|
displayName: 'Filter by Owner',
|
|
552
|
-
description: 'Only trigger for specific owner
|
|
1224
|
+
description: 'Only trigger for specific owner',
|
|
553
1225
|
required: false,
|
|
1226
|
+
auth: auth_1.workbuddyAuth,
|
|
1227
|
+
refreshers: [],
|
|
1228
|
+
options: async ({ auth }) => {
|
|
1229
|
+
const authValue = auth;
|
|
1230
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1231
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1232
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1233
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1234
|
+
url: `${baseUrl}/api/v2/public/employees`,
|
|
1235
|
+
headers: {
|
|
1236
|
+
Authorization: `Bearer ${token}`,
|
|
1237
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1238
|
+
},
|
|
1239
|
+
});
|
|
1240
|
+
const items = response.body?.items || [];
|
|
1241
|
+
return {
|
|
1242
|
+
options: items.map((item) => ({
|
|
1243
|
+
label: item.name,
|
|
1244
|
+
value: item.id,
|
|
1245
|
+
})),
|
|
1246
|
+
};
|
|
1247
|
+
},
|
|
554
1248
|
}),
|
|
555
|
-
zone: pieces_framework_1.Property.
|
|
1249
|
+
zone: pieces_framework_1.Property.MultiSelectDropdown({
|
|
556
1250
|
displayName: 'Filter by Zone',
|
|
557
|
-
description: 'Only trigger for specific zone
|
|
1251
|
+
description: 'Only trigger for specific zone',
|
|
558
1252
|
required: false,
|
|
1253
|
+
auth: auth_1.workbuddyAuth,
|
|
1254
|
+
refreshers: [],
|
|
1255
|
+
options: async ({ auth }) => {
|
|
1256
|
+
const authValue = auth;
|
|
1257
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1258
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1259
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1260
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1261
|
+
url: `${baseUrl}/api/v2/public/settings/zones`,
|
|
1262
|
+
headers: {
|
|
1263
|
+
Authorization: `Bearer ${token}`,
|
|
1264
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1265
|
+
},
|
|
1266
|
+
});
|
|
1267
|
+
const items = response.body?.items || [];
|
|
1268
|
+
return {
|
|
1269
|
+
options: items.map((item) => ({
|
|
1270
|
+
label: item.name,
|
|
1271
|
+
value: item.id,
|
|
1272
|
+
})),
|
|
1273
|
+
};
|
|
1274
|
+
},
|
|
559
1275
|
}),
|
|
560
1276
|
status: pieces_framework_1.Property.StaticMultiSelectDropdown({
|
|
561
1277
|
displayName: 'Filter by Status',
|
|
@@ -573,39 +1289,46 @@ exports.job_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
573
1289
|
}),
|
|
574
1290
|
},
|
|
575
1291
|
sampleData: {
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
createdAt: '2026-03-05T10:00:00.000Z',
|
|
584
|
-
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
585
|
-
startDate: '2026-03-05T10:00:00.000Z',
|
|
586
|
-
dueDate: '2026-03-15T10:00:00.000Z',
|
|
587
|
-
completedDate: null,
|
|
588
|
-
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
589
|
-
customerPO: 'PO-1234',
|
|
590
|
-
customerWO: 'WO-5678',
|
|
591
|
-
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
592
|
-
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
593
|
-
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
594
|
-
site: {
|
|
1292
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
1293
|
+
event: 'Job Deleted',
|
|
1294
|
+
action: 'remove',
|
|
1295
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
1296
|
+
webhookTimestamp: 1773465707307,
|
|
1297
|
+
data: {
|
|
1298
|
+
job: {
|
|
595
1299
|
id: '507f1f77bcf86cd799439011',
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
1300
|
+
mode: 'job',
|
|
1301
|
+
jobNumber: 'J10001',
|
|
1302
|
+
description: 'Sample job description',
|
|
1303
|
+
status: 'Open',
|
|
1304
|
+
source: 'web',
|
|
1305
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
1306
|
+
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
1307
|
+
startDate: '2026-03-05T10:00:00.000Z',
|
|
1308
|
+
dueDate: '2026-03-15T10:00:00.000Z',
|
|
1309
|
+
completedDate: null,
|
|
1310
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
1311
|
+
customerPO: 'PO-1234',
|
|
1312
|
+
customerWO: 'WO-5678',
|
|
1313
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
1314
|
+
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
1315
|
+
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
1316
|
+
site: {
|
|
1317
|
+
id: '507f1f77bcf86cd799439011',
|
|
1318
|
+
name: 'Main Office',
|
|
1319
|
+
address: {
|
|
1320
|
+
street: '123 Main St',
|
|
1321
|
+
suburb: 'Sydney',
|
|
1322
|
+
state: 'NSW',
|
|
1323
|
+
postcode: '2000',
|
|
1324
|
+
country: 'Australia',
|
|
1325
|
+
formatted: '123 Main St, Sydney NSW 2000',
|
|
1326
|
+
},
|
|
604
1327
|
},
|
|
1328
|
+
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
1329
|
+
type: { id: '507f1f77bcf86cd799439011', name: 'Maintenance' },
|
|
1330
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
605
1331
|
},
|
|
606
|
-
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
607
|
-
type: { id: '507f1f77bcf86cd799439011', name: 'Maintenance' },
|
|
608
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
609
1332
|
},
|
|
610
1333
|
},
|
|
611
1334
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -632,7 +1355,7 @@ exports.job_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
632
1355
|
filters.zone = context.propsValue.zone;
|
|
633
1356
|
if (context.propsValue.status?.length)
|
|
634
1357
|
filters.status = context.propsValue.status.map((v) => JSON.parse(v));
|
|
635
|
-
// Register webhook with WorkBuddy v2 API
|
|
1358
|
+
// Register webhook with WorkBuddy v2 API
|
|
636
1359
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
637
1360
|
method: pieces_common_1.HttpMethod.POST,
|
|
638
1361
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -661,18 +1384,15 @@ exports.job_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
661
1384
|
const baseUrl = context.auth.props.baseUrl;
|
|
662
1385
|
const webhookId = await context.store.get('webhookId');
|
|
663
1386
|
if (webhookId) {
|
|
664
|
-
//
|
|
1387
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
665
1388
|
await pieces_common_1.httpClient.sendRequest({
|
|
666
|
-
method: pieces_common_1.HttpMethod.
|
|
1389
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
667
1390
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
668
1391
|
headers: {
|
|
669
1392
|
Authorization: `Bearer ${token}`,
|
|
670
1393
|
'Content-Type': 'application/json',
|
|
671
1394
|
'X-WorkBuddy-Version': '2026-01',
|
|
672
1395
|
},
|
|
673
|
-
body: {
|
|
674
|
-
status: 'paused',
|
|
675
|
-
},
|
|
676
1396
|
});
|
|
677
1397
|
}
|
|
678
1398
|
},
|