@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
|
@@ -10,30 +10,140 @@ exports.stage_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
10
10
|
displayName: 'Stage Created',
|
|
11
11
|
description: 'Triggered when a new stage 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
|
-
resource: pieces_framework_1.Property.
|
|
94
|
+
resource: pieces_framework_1.Property.MultiSelectDropdown({
|
|
29
95
|
displayName: 'Filter by Resource',
|
|
30
|
-
description: 'Only trigger for specific resource
|
|
96
|
+
description: 'Only trigger for specific resource',
|
|
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/employees`,
|
|
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
|
-
workCategory: pieces_framework_1.Property.
|
|
121
|
+
workCategory: pieces_framework_1.Property.MultiSelectDropdown({
|
|
34
122
|
displayName: 'Filter by Work Category',
|
|
35
|
-
description: 'Only trigger for specific work category
|
|
123
|
+
description: 'Only trigger for specific work category',
|
|
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/work-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
148
|
stageStatus: pieces_framework_1.Property.StaticMultiSelectDropdown({
|
|
39
149
|
displayName: 'Filter by Status',
|
|
@@ -49,33 +159,80 @@ exports.stage_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
49
159
|
],
|
|
50
160
|
},
|
|
51
161
|
}),
|
|
52
|
-
schedulingTag: pieces_framework_1.Property.
|
|
162
|
+
schedulingTag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
53
163
|
displayName: 'Filter by Scheduling Tag',
|
|
54
|
-
description: 'Only trigger for specific scheduling tag
|
|
164
|
+
description: 'Only trigger for specific scheduling tag',
|
|
55
165
|
required: false,
|
|
166
|
+
auth: auth_1.workbuddyAuth,
|
|
167
|
+
refreshers: [],
|
|
168
|
+
options: async ({ auth }) => {
|
|
169
|
+
const authValue = auth;
|
|
170
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
171
|
+
const baseUrl = authValue.props.baseUrl;
|
|
172
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
173
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
174
|
+
url: `${baseUrl}/api/v2/public/settings/tags?type=scheduling`,
|
|
175
|
+
headers: {
|
|
176
|
+
Authorization: `Bearer ${token}`,
|
|
177
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
const items = response.body?.items || [];
|
|
181
|
+
return {
|
|
182
|
+
options: items.map((item) => ({
|
|
183
|
+
label: item.name,
|
|
184
|
+
value: item.id,
|
|
185
|
+
})),
|
|
186
|
+
};
|
|
187
|
+
},
|
|
56
188
|
}),
|
|
57
189
|
},
|
|
58
190
|
sampleData: {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
191
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
192
|
+
event: 'Stage Created',
|
|
193
|
+
action: 'create',
|
|
194
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
195
|
+
webhookTimestamp: 1773465707307,
|
|
196
|
+
data: {
|
|
197
|
+
workOrder: {
|
|
198
|
+
id: '507f1f77bcf86cd799439011',
|
|
199
|
+
name: 'Foundation Work',
|
|
200
|
+
workOrderNumber: 'J10001-5039',
|
|
201
|
+
jobNumber: 'J10001',
|
|
202
|
+
description: 'Sample stage description',
|
|
203
|
+
status: 'In Progress',
|
|
204
|
+
previousStatus: 'Open',
|
|
205
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
206
|
+
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
207
|
+
startDate: '2026-03-05T08:00:00.000Z',
|
|
208
|
+
dueDate: '2026-03-10T17:00:00.000Z',
|
|
209
|
+
completedDate: null,
|
|
210
|
+
finalisedDate: null,
|
|
211
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
212
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
213
|
+
stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
|
|
214
|
+
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
215
|
+
subcontractor: null,
|
|
216
|
+
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
217
|
+
site: {
|
|
218
|
+
id: '507f1f77bcf86cd799439011',
|
|
219
|
+
name: 'Main Office',
|
|
220
|
+
address: {
|
|
221
|
+
street: '123 Main St',
|
|
222
|
+
suburb: 'Sydney',
|
|
223
|
+
state: 'NSW',
|
|
224
|
+
postcode: '2000',
|
|
225
|
+
country: 'Australia',
|
|
226
|
+
formatted: '123 Main St, Sydney NSW 2000',
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
|
|
230
|
+
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
231
|
+
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
232
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
233
|
+
},
|
|
76
234
|
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
77
|
-
|
|
78
|
-
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
235
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
79
236
|
site: {
|
|
80
237
|
id: '507f1f77bcf86cd799439011',
|
|
81
238
|
name: 'Main Office',
|
|
@@ -88,24 +245,6 @@ exports.stage_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
88
245
|
formatted: '123 Main St, Sydney NSW 2000',
|
|
89
246
|
},
|
|
90
247
|
},
|
|
91
|
-
workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
|
|
92
|
-
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
93
|
-
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
94
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
95
|
-
},
|
|
96
|
-
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
97
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
98
|
-
site: {
|
|
99
|
-
id: '507f1f77bcf86cd799439011',
|
|
100
|
-
name: 'Main Office',
|
|
101
|
-
address: {
|
|
102
|
-
street: '123 Main St',
|
|
103
|
-
suburb: 'Sydney',
|
|
104
|
-
state: 'NSW',
|
|
105
|
-
postcode: '2000',
|
|
106
|
-
country: 'Australia',
|
|
107
|
-
formatted: '123 Main St, Sydney NSW 2000',
|
|
108
|
-
},
|
|
109
248
|
},
|
|
110
249
|
},
|
|
111
250
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -128,7 +267,7 @@ exports.stage_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
128
267
|
filters.stageStatus = context.propsValue.stageStatus.map((v) => JSON.parse(v));
|
|
129
268
|
if (context.propsValue.schedulingTag?.length)
|
|
130
269
|
filters.schedulingTag = context.propsValue.schedulingTag;
|
|
131
|
-
// Register webhook with WorkBuddy v2 API
|
|
270
|
+
// Register webhook with WorkBuddy v2 API
|
|
132
271
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
133
272
|
method: pieces_common_1.HttpMethod.POST,
|
|
134
273
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -157,18 +296,15 @@ exports.stage_created_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
157
296
|
const baseUrl = context.auth.props.baseUrl;
|
|
158
297
|
const webhookId = await context.store.get('webhookId');
|
|
159
298
|
if (webhookId) {
|
|
160
|
-
//
|
|
299
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
161
300
|
await pieces_common_1.httpClient.sendRequest({
|
|
162
|
-
method: pieces_common_1.HttpMethod.
|
|
301
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
163
302
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
164
303
|
headers: {
|
|
165
304
|
Authorization: `Bearer ${token}`,
|
|
166
305
|
'Content-Type': 'application/json',
|
|
167
306
|
'X-WorkBuddy-Version': '2026-01',
|
|
168
307
|
},
|
|
169
|
-
body: {
|
|
170
|
-
status: 'paused',
|
|
171
|
-
},
|
|
172
308
|
});
|
|
173
309
|
}
|
|
174
310
|
},
|
|
@@ -182,30 +318,140 @@ exports.stage_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
182
318
|
displayName: 'Stage Updated',
|
|
183
319
|
description: 'Triggered when a stage is updated',
|
|
184
320
|
props: {
|
|
185
|
-
customer: pieces_framework_1.Property.
|
|
321
|
+
customer: pieces_framework_1.Property.MultiSelectDropdown({
|
|
186
322
|
displayName: 'Filter by Customer',
|
|
187
|
-
description: 'Only trigger for specific customer
|
|
323
|
+
description: 'Only trigger for specific customer',
|
|
188
324
|
required: false,
|
|
325
|
+
auth: auth_1.workbuddyAuth,
|
|
326
|
+
refreshers: [],
|
|
327
|
+
options: async ({ auth }) => {
|
|
328
|
+
const authValue = auth;
|
|
329
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
330
|
+
const baseUrl = authValue.props.baseUrl;
|
|
331
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
332
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
333
|
+
url: `${baseUrl}/api/v2/public/customers`,
|
|
334
|
+
headers: {
|
|
335
|
+
Authorization: `Bearer ${token}`,
|
|
336
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
const items = response.body?.items || [];
|
|
340
|
+
return {
|
|
341
|
+
options: items.map((item) => ({
|
|
342
|
+
label: item.name,
|
|
343
|
+
value: item.id,
|
|
344
|
+
})),
|
|
345
|
+
};
|
|
346
|
+
},
|
|
189
347
|
}),
|
|
190
|
-
billingCompany: pieces_framework_1.Property.
|
|
348
|
+
billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
|
|
191
349
|
displayName: 'Filter by Billing Company',
|
|
192
|
-
description: 'Only trigger for specific billing company
|
|
350
|
+
description: 'Only trigger for specific billing company',
|
|
193
351
|
required: false,
|
|
352
|
+
auth: auth_1.workbuddyAuth,
|
|
353
|
+
refreshers: [],
|
|
354
|
+
options: async ({ auth }) => {
|
|
355
|
+
const authValue = auth;
|
|
356
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
357
|
+
const baseUrl = authValue.props.baseUrl;
|
|
358
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
359
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
360
|
+
url: `${baseUrl}/api/v2/public/companies`,
|
|
361
|
+
headers: {
|
|
362
|
+
Authorization: `Bearer ${token}`,
|
|
363
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
364
|
+
},
|
|
365
|
+
});
|
|
366
|
+
const items = response.body?.items || [];
|
|
367
|
+
return {
|
|
368
|
+
options: items.map((item) => ({
|
|
369
|
+
label: item.name,
|
|
370
|
+
value: item.id,
|
|
371
|
+
})),
|
|
372
|
+
};
|
|
373
|
+
},
|
|
194
374
|
}),
|
|
195
|
-
tag: pieces_framework_1.Property.
|
|
375
|
+
tag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
196
376
|
displayName: 'Filter by Tags',
|
|
197
|
-
description: 'Only trigger for specific tags
|
|
377
|
+
description: 'Only trigger for specific tags',
|
|
198
378
|
required: false,
|
|
379
|
+
auth: auth_1.workbuddyAuth,
|
|
380
|
+
refreshers: [],
|
|
381
|
+
options: async ({ auth }) => {
|
|
382
|
+
const authValue = auth;
|
|
383
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
384
|
+
const baseUrl = authValue.props.baseUrl;
|
|
385
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
386
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
387
|
+
url: `${baseUrl}/api/v2/public/settings/tags`,
|
|
388
|
+
headers: {
|
|
389
|
+
Authorization: `Bearer ${token}`,
|
|
390
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
391
|
+
},
|
|
392
|
+
});
|
|
393
|
+
const items = response.body?.items || [];
|
|
394
|
+
return {
|
|
395
|
+
options: items.map((item) => ({
|
|
396
|
+
label: item.name,
|
|
397
|
+
value: item.id,
|
|
398
|
+
})),
|
|
399
|
+
};
|
|
400
|
+
},
|
|
199
401
|
}),
|
|
200
|
-
resource: pieces_framework_1.Property.
|
|
402
|
+
resource: pieces_framework_1.Property.MultiSelectDropdown({
|
|
201
403
|
displayName: 'Filter by Resource',
|
|
202
|
-
description: 'Only trigger for specific resource
|
|
404
|
+
description: 'Only trigger for specific resource',
|
|
203
405
|
required: false,
|
|
406
|
+
auth: auth_1.workbuddyAuth,
|
|
407
|
+
refreshers: [],
|
|
408
|
+
options: async ({ auth }) => {
|
|
409
|
+
const authValue = auth;
|
|
410
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
411
|
+
const baseUrl = authValue.props.baseUrl;
|
|
412
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
413
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
414
|
+
url: `${baseUrl}/api/v2/public/employees`,
|
|
415
|
+
headers: {
|
|
416
|
+
Authorization: `Bearer ${token}`,
|
|
417
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
418
|
+
},
|
|
419
|
+
});
|
|
420
|
+
const items = response.body?.items || [];
|
|
421
|
+
return {
|
|
422
|
+
options: items.map((item) => ({
|
|
423
|
+
label: item.name,
|
|
424
|
+
value: item.id,
|
|
425
|
+
})),
|
|
426
|
+
};
|
|
427
|
+
},
|
|
204
428
|
}),
|
|
205
|
-
workCategory: pieces_framework_1.Property.
|
|
429
|
+
workCategory: pieces_framework_1.Property.MultiSelectDropdown({
|
|
206
430
|
displayName: 'Filter by Work Category',
|
|
207
|
-
description: 'Only trigger for specific work category
|
|
431
|
+
description: 'Only trigger for specific work category',
|
|
208
432
|
required: false,
|
|
433
|
+
auth: auth_1.workbuddyAuth,
|
|
434
|
+
refreshers: [],
|
|
435
|
+
options: async ({ auth }) => {
|
|
436
|
+
const authValue = auth;
|
|
437
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
438
|
+
const baseUrl = authValue.props.baseUrl;
|
|
439
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
440
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
441
|
+
url: `${baseUrl}/api/v2/public/settings/work-types`,
|
|
442
|
+
headers: {
|
|
443
|
+
Authorization: `Bearer ${token}`,
|
|
444
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
445
|
+
},
|
|
446
|
+
});
|
|
447
|
+
const items = response.body?.items || [];
|
|
448
|
+
return {
|
|
449
|
+
options: items.map((item) => ({
|
|
450
|
+
label: item.name,
|
|
451
|
+
value: item.id,
|
|
452
|
+
})),
|
|
453
|
+
};
|
|
454
|
+
},
|
|
209
455
|
}),
|
|
210
456
|
stageStatus: pieces_framework_1.Property.StaticMultiSelectDropdown({
|
|
211
457
|
displayName: 'Filter by Status',
|
|
@@ -221,33 +467,80 @@ exports.stage_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
221
467
|
],
|
|
222
468
|
},
|
|
223
469
|
}),
|
|
224
|
-
schedulingTag: pieces_framework_1.Property.
|
|
470
|
+
schedulingTag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
225
471
|
displayName: 'Filter by Scheduling Tag',
|
|
226
|
-
description: 'Only trigger for specific scheduling tag
|
|
472
|
+
description: 'Only trigger for specific scheduling tag',
|
|
227
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/tags?type=scheduling`,
|
|
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
|
+
},
|
|
228
496
|
}),
|
|
229
497
|
},
|
|
230
498
|
sampleData: {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
499
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
500
|
+
event: 'Stage Updated',
|
|
501
|
+
action: 'update',
|
|
502
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
503
|
+
webhookTimestamp: 1773465707307,
|
|
504
|
+
data: {
|
|
505
|
+
workOrder: {
|
|
506
|
+
id: '507f1f77bcf86cd799439011',
|
|
507
|
+
name: 'Foundation Work',
|
|
508
|
+
workOrderNumber: 'J10001-5039',
|
|
509
|
+
jobNumber: 'J10001',
|
|
510
|
+
description: 'Sample stage description',
|
|
511
|
+
status: 'In Progress',
|
|
512
|
+
previousStatus: 'Open',
|
|
513
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
514
|
+
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
515
|
+
startDate: '2026-03-05T08:00:00.000Z',
|
|
516
|
+
dueDate: '2026-03-10T17:00:00.000Z',
|
|
517
|
+
completedDate: null,
|
|
518
|
+
finalisedDate: null,
|
|
519
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
520
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
521
|
+
stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
|
|
522
|
+
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
523
|
+
subcontractor: null,
|
|
524
|
+
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
525
|
+
site: {
|
|
526
|
+
id: '507f1f77bcf86cd799439011',
|
|
527
|
+
name: 'Main Office',
|
|
528
|
+
address: {
|
|
529
|
+
street: '123 Main St',
|
|
530
|
+
suburb: 'Sydney',
|
|
531
|
+
state: 'NSW',
|
|
532
|
+
postcode: '2000',
|
|
533
|
+
country: 'Australia',
|
|
534
|
+
formatted: '123 Main St, Sydney NSW 2000',
|
|
535
|
+
},
|
|
536
|
+
},
|
|
537
|
+
workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
|
|
538
|
+
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
539
|
+
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
540
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
541
|
+
},
|
|
248
542
|
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
249
|
-
|
|
250
|
-
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
543
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
251
544
|
site: {
|
|
252
545
|
id: '507f1f77bcf86cd799439011',
|
|
253
546
|
name: 'Main Office',
|
|
@@ -260,24 +553,6 @@ exports.stage_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
260
553
|
formatted: '123 Main St, Sydney NSW 2000',
|
|
261
554
|
},
|
|
262
555
|
},
|
|
263
|
-
workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
|
|
264
|
-
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
265
|
-
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
266
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
267
|
-
},
|
|
268
|
-
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
269
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
270
|
-
site: {
|
|
271
|
-
id: '507f1f77bcf86cd799439011',
|
|
272
|
-
name: 'Main Office',
|
|
273
|
-
address: {
|
|
274
|
-
street: '123 Main St',
|
|
275
|
-
suburb: 'Sydney',
|
|
276
|
-
state: 'NSW',
|
|
277
|
-
postcode: '2000',
|
|
278
|
-
country: 'Australia',
|
|
279
|
-
formatted: '123 Main St, Sydney NSW 2000',
|
|
280
|
-
},
|
|
281
556
|
},
|
|
282
557
|
},
|
|
283
558
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -300,7 +575,7 @@ exports.stage_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
300
575
|
filters.stageStatus = context.propsValue.stageStatus.map((v) => JSON.parse(v));
|
|
301
576
|
if (context.propsValue.schedulingTag?.length)
|
|
302
577
|
filters.schedulingTag = context.propsValue.schedulingTag;
|
|
303
|
-
// Register webhook with WorkBuddy v2 API
|
|
578
|
+
// Register webhook with WorkBuddy v2 API
|
|
304
579
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
305
580
|
method: pieces_common_1.HttpMethod.POST,
|
|
306
581
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -329,18 +604,15 @@ exports.stage_updated_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
329
604
|
const baseUrl = context.auth.props.baseUrl;
|
|
330
605
|
const webhookId = await context.store.get('webhookId');
|
|
331
606
|
if (webhookId) {
|
|
332
|
-
//
|
|
607
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
333
608
|
await pieces_common_1.httpClient.sendRequest({
|
|
334
|
-
method: pieces_common_1.HttpMethod.
|
|
609
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
335
610
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
336
611
|
headers: {
|
|
337
612
|
Authorization: `Bearer ${token}`,
|
|
338
613
|
'Content-Type': 'application/json',
|
|
339
614
|
'X-WorkBuddy-Version': '2026-01',
|
|
340
615
|
},
|
|
341
|
-
body: {
|
|
342
|
-
status: 'paused',
|
|
343
|
-
},
|
|
344
616
|
});
|
|
345
617
|
}
|
|
346
618
|
},
|
|
@@ -354,30 +626,140 @@ exports.stage_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
354
626
|
displayName: 'Stage Status Changed',
|
|
355
627
|
description: 'Triggered when a stage status changes',
|
|
356
628
|
props: {
|
|
357
|
-
customer: pieces_framework_1.Property.
|
|
629
|
+
customer: pieces_framework_1.Property.MultiSelectDropdown({
|
|
358
630
|
displayName: 'Filter by Customer',
|
|
359
|
-
description: 'Only trigger for specific customer
|
|
631
|
+
description: 'Only trigger for specific customer',
|
|
360
632
|
required: false,
|
|
633
|
+
auth: auth_1.workbuddyAuth,
|
|
634
|
+
refreshers: [],
|
|
635
|
+
options: async ({ auth }) => {
|
|
636
|
+
const authValue = auth;
|
|
637
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
638
|
+
const baseUrl = authValue.props.baseUrl;
|
|
639
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
640
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
641
|
+
url: `${baseUrl}/api/v2/public/customers`,
|
|
642
|
+
headers: {
|
|
643
|
+
Authorization: `Bearer ${token}`,
|
|
644
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
645
|
+
},
|
|
646
|
+
});
|
|
647
|
+
const items = response.body?.items || [];
|
|
648
|
+
return {
|
|
649
|
+
options: items.map((item) => ({
|
|
650
|
+
label: item.name,
|
|
651
|
+
value: item.id,
|
|
652
|
+
})),
|
|
653
|
+
};
|
|
654
|
+
},
|
|
361
655
|
}),
|
|
362
|
-
billingCompany: pieces_framework_1.Property.
|
|
656
|
+
billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
|
|
363
657
|
displayName: 'Filter by Billing Company',
|
|
364
|
-
description: 'Only trigger for specific billing company
|
|
658
|
+
description: 'Only trigger for specific billing company',
|
|
365
659
|
required: false,
|
|
660
|
+
auth: auth_1.workbuddyAuth,
|
|
661
|
+
refreshers: [],
|
|
662
|
+
options: async ({ auth }) => {
|
|
663
|
+
const authValue = auth;
|
|
664
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
665
|
+
const baseUrl = authValue.props.baseUrl;
|
|
666
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
667
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
668
|
+
url: `${baseUrl}/api/v2/public/companies`,
|
|
669
|
+
headers: {
|
|
670
|
+
Authorization: `Bearer ${token}`,
|
|
671
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
672
|
+
},
|
|
673
|
+
});
|
|
674
|
+
const items = response.body?.items || [];
|
|
675
|
+
return {
|
|
676
|
+
options: items.map((item) => ({
|
|
677
|
+
label: item.name,
|
|
678
|
+
value: item.id,
|
|
679
|
+
})),
|
|
680
|
+
};
|
|
681
|
+
},
|
|
366
682
|
}),
|
|
367
|
-
tag: pieces_framework_1.Property.
|
|
683
|
+
tag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
368
684
|
displayName: 'Filter by Tags',
|
|
369
|
-
description: 'Only trigger for specific tags
|
|
685
|
+
description: 'Only trigger for specific tags',
|
|
370
686
|
required: false,
|
|
687
|
+
auth: auth_1.workbuddyAuth,
|
|
688
|
+
refreshers: [],
|
|
689
|
+
options: async ({ auth }) => {
|
|
690
|
+
const authValue = auth;
|
|
691
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
692
|
+
const baseUrl = authValue.props.baseUrl;
|
|
693
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
694
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
695
|
+
url: `${baseUrl}/api/v2/public/settings/tags`,
|
|
696
|
+
headers: {
|
|
697
|
+
Authorization: `Bearer ${token}`,
|
|
698
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
699
|
+
},
|
|
700
|
+
});
|
|
701
|
+
const items = response.body?.items || [];
|
|
702
|
+
return {
|
|
703
|
+
options: items.map((item) => ({
|
|
704
|
+
label: item.name,
|
|
705
|
+
value: item.id,
|
|
706
|
+
})),
|
|
707
|
+
};
|
|
708
|
+
},
|
|
371
709
|
}),
|
|
372
|
-
resource: pieces_framework_1.Property.
|
|
710
|
+
resource: pieces_framework_1.Property.MultiSelectDropdown({
|
|
373
711
|
displayName: 'Filter by Resource',
|
|
374
|
-
description: 'Only trigger for specific resource
|
|
712
|
+
description: 'Only trigger for specific resource',
|
|
375
713
|
required: false,
|
|
714
|
+
auth: auth_1.workbuddyAuth,
|
|
715
|
+
refreshers: [],
|
|
716
|
+
options: async ({ auth }) => {
|
|
717
|
+
const authValue = auth;
|
|
718
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
719
|
+
const baseUrl = authValue.props.baseUrl;
|
|
720
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
721
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
722
|
+
url: `${baseUrl}/api/v2/public/employees`,
|
|
723
|
+
headers: {
|
|
724
|
+
Authorization: `Bearer ${token}`,
|
|
725
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
726
|
+
},
|
|
727
|
+
});
|
|
728
|
+
const items = response.body?.items || [];
|
|
729
|
+
return {
|
|
730
|
+
options: items.map((item) => ({
|
|
731
|
+
label: item.name,
|
|
732
|
+
value: item.id,
|
|
733
|
+
})),
|
|
734
|
+
};
|
|
735
|
+
},
|
|
376
736
|
}),
|
|
377
|
-
workCategory: pieces_framework_1.Property.
|
|
737
|
+
workCategory: pieces_framework_1.Property.MultiSelectDropdown({
|
|
378
738
|
displayName: 'Filter by Work Category',
|
|
379
|
-
description: 'Only trigger for specific work category
|
|
739
|
+
description: 'Only trigger for specific work category',
|
|
380
740
|
required: false,
|
|
741
|
+
auth: auth_1.workbuddyAuth,
|
|
742
|
+
refreshers: [],
|
|
743
|
+
options: async ({ auth }) => {
|
|
744
|
+
const authValue = auth;
|
|
745
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
746
|
+
const baseUrl = authValue.props.baseUrl;
|
|
747
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
748
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
749
|
+
url: `${baseUrl}/api/v2/public/settings/work-types`,
|
|
750
|
+
headers: {
|
|
751
|
+
Authorization: `Bearer ${token}`,
|
|
752
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
753
|
+
},
|
|
754
|
+
});
|
|
755
|
+
const items = response.body?.items || [];
|
|
756
|
+
return {
|
|
757
|
+
options: items.map((item) => ({
|
|
758
|
+
label: item.name,
|
|
759
|
+
value: item.id,
|
|
760
|
+
})),
|
|
761
|
+
};
|
|
762
|
+
},
|
|
381
763
|
}),
|
|
382
764
|
stageStatus: pieces_framework_1.Property.StaticMultiSelectDropdown({
|
|
383
765
|
displayName: 'Filter by Status',
|
|
@@ -393,33 +775,80 @@ exports.stage_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
393
775
|
],
|
|
394
776
|
},
|
|
395
777
|
}),
|
|
396
|
-
schedulingTag: pieces_framework_1.Property.
|
|
778
|
+
schedulingTag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
397
779
|
displayName: 'Filter by Scheduling Tag',
|
|
398
|
-
description: 'Only trigger for specific scheduling tag
|
|
780
|
+
description: 'Only trigger for specific scheduling tag',
|
|
399
781
|
required: false,
|
|
782
|
+
auth: auth_1.workbuddyAuth,
|
|
783
|
+
refreshers: [],
|
|
784
|
+
options: async ({ auth }) => {
|
|
785
|
+
const authValue = auth;
|
|
786
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
787
|
+
const baseUrl = authValue.props.baseUrl;
|
|
788
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
789
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
790
|
+
url: `${baseUrl}/api/v2/public/settings/tags?type=scheduling`,
|
|
791
|
+
headers: {
|
|
792
|
+
Authorization: `Bearer ${token}`,
|
|
793
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
794
|
+
},
|
|
795
|
+
});
|
|
796
|
+
const items = response.body?.items || [];
|
|
797
|
+
return {
|
|
798
|
+
options: items.map((item) => ({
|
|
799
|
+
label: item.name,
|
|
800
|
+
value: item.id,
|
|
801
|
+
})),
|
|
802
|
+
};
|
|
803
|
+
},
|
|
400
804
|
}),
|
|
401
805
|
},
|
|
402
806
|
sampleData: {
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
807
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
808
|
+
event: 'Stage Status Changed',
|
|
809
|
+
action: 'update',
|
|
810
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
811
|
+
webhookTimestamp: 1773465707307,
|
|
812
|
+
data: {
|
|
813
|
+
workOrder: {
|
|
814
|
+
id: '507f1f77bcf86cd799439011',
|
|
815
|
+
name: 'Foundation Work',
|
|
816
|
+
workOrderNumber: 'J10001-5039',
|
|
817
|
+
jobNumber: 'J10001',
|
|
818
|
+
description: 'Sample stage description',
|
|
819
|
+
status: 'In Progress',
|
|
820
|
+
previousStatus: 'Open',
|
|
821
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
822
|
+
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
823
|
+
startDate: '2026-03-05T08:00:00.000Z',
|
|
824
|
+
dueDate: '2026-03-10T17:00:00.000Z',
|
|
825
|
+
completedDate: null,
|
|
826
|
+
finalisedDate: null,
|
|
827
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
828
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
829
|
+
stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
|
|
830
|
+
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
831
|
+
subcontractor: null,
|
|
832
|
+
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
833
|
+
site: {
|
|
834
|
+
id: '507f1f77bcf86cd799439011',
|
|
835
|
+
name: 'Main Office',
|
|
836
|
+
address: {
|
|
837
|
+
street: '123 Main St',
|
|
838
|
+
suburb: 'Sydney',
|
|
839
|
+
state: 'NSW',
|
|
840
|
+
postcode: '2000',
|
|
841
|
+
country: 'Australia',
|
|
842
|
+
formatted: '123 Main St, Sydney NSW 2000',
|
|
843
|
+
},
|
|
844
|
+
},
|
|
845
|
+
workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
|
|
846
|
+
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
847
|
+
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
848
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
849
|
+
},
|
|
420
850
|
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
421
|
-
|
|
422
|
-
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
851
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
423
852
|
site: {
|
|
424
853
|
id: '507f1f77bcf86cd799439011',
|
|
425
854
|
name: 'Main Office',
|
|
@@ -432,24 +861,6 @@ exports.stage_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
432
861
|
formatted: '123 Main St, Sydney NSW 2000',
|
|
433
862
|
},
|
|
434
863
|
},
|
|
435
|
-
workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
|
|
436
|
-
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
437
|
-
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
438
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
439
|
-
},
|
|
440
|
-
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
441
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
442
|
-
site: {
|
|
443
|
-
id: '507f1f77bcf86cd799439011',
|
|
444
|
-
name: 'Main Office',
|
|
445
|
-
address: {
|
|
446
|
-
street: '123 Main St',
|
|
447
|
-
suburb: 'Sydney',
|
|
448
|
-
state: 'NSW',
|
|
449
|
-
postcode: '2000',
|
|
450
|
-
country: 'Australia',
|
|
451
|
-
formatted: '123 Main St, Sydney NSW 2000',
|
|
452
|
-
},
|
|
453
864
|
},
|
|
454
865
|
},
|
|
455
866
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -472,7 +883,7 @@ exports.stage_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
472
883
|
filters.stageStatus = context.propsValue.stageStatus.map((v) => JSON.parse(v));
|
|
473
884
|
if (context.propsValue.schedulingTag?.length)
|
|
474
885
|
filters.schedulingTag = context.propsValue.schedulingTag;
|
|
475
|
-
// Register webhook with WorkBuddy v2 API
|
|
886
|
+
// Register webhook with WorkBuddy v2 API
|
|
476
887
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
477
888
|
method: pieces_common_1.HttpMethod.POST,
|
|
478
889
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -501,18 +912,15 @@ exports.stage_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
501
912
|
const baseUrl = context.auth.props.baseUrl;
|
|
502
913
|
const webhookId = await context.store.get('webhookId');
|
|
503
914
|
if (webhookId) {
|
|
504
|
-
//
|
|
915
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
505
916
|
await pieces_common_1.httpClient.sendRequest({
|
|
506
|
-
method: pieces_common_1.HttpMethod.
|
|
917
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
507
918
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
508
919
|
headers: {
|
|
509
920
|
Authorization: `Bearer ${token}`,
|
|
510
921
|
'Content-Type': 'application/json',
|
|
511
922
|
'X-WorkBuddy-Version': '2026-01',
|
|
512
923
|
},
|
|
513
|
-
body: {
|
|
514
|
-
status: 'paused',
|
|
515
|
-
},
|
|
516
924
|
});
|
|
517
925
|
}
|
|
518
926
|
},
|
|
@@ -526,30 +934,140 @@ exports.stage_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
526
934
|
displayName: 'Stage Deleted',
|
|
527
935
|
description: 'Triggered when a stage is deleted',
|
|
528
936
|
props: {
|
|
529
|
-
customer: pieces_framework_1.Property.
|
|
937
|
+
customer: pieces_framework_1.Property.MultiSelectDropdown({
|
|
530
938
|
displayName: 'Filter by Customer',
|
|
531
|
-
description: 'Only trigger for specific customer
|
|
939
|
+
description: 'Only trigger for specific customer',
|
|
532
940
|
required: false,
|
|
941
|
+
auth: auth_1.workbuddyAuth,
|
|
942
|
+
refreshers: [],
|
|
943
|
+
options: async ({ auth }) => {
|
|
944
|
+
const authValue = auth;
|
|
945
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
946
|
+
const baseUrl = authValue.props.baseUrl;
|
|
947
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
948
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
949
|
+
url: `${baseUrl}/api/v2/public/customers`,
|
|
950
|
+
headers: {
|
|
951
|
+
Authorization: `Bearer ${token}`,
|
|
952
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
953
|
+
},
|
|
954
|
+
});
|
|
955
|
+
const items = response.body?.items || [];
|
|
956
|
+
return {
|
|
957
|
+
options: items.map((item) => ({
|
|
958
|
+
label: item.name,
|
|
959
|
+
value: item.id,
|
|
960
|
+
})),
|
|
961
|
+
};
|
|
962
|
+
},
|
|
533
963
|
}),
|
|
534
|
-
billingCompany: pieces_framework_1.Property.
|
|
964
|
+
billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
|
|
535
965
|
displayName: 'Filter by Billing Company',
|
|
536
|
-
description: 'Only trigger for specific billing company
|
|
966
|
+
description: 'Only trigger for specific billing company',
|
|
537
967
|
required: false,
|
|
968
|
+
auth: auth_1.workbuddyAuth,
|
|
969
|
+
refreshers: [],
|
|
970
|
+
options: async ({ auth }) => {
|
|
971
|
+
const authValue = auth;
|
|
972
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
973
|
+
const baseUrl = authValue.props.baseUrl;
|
|
974
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
975
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
976
|
+
url: `${baseUrl}/api/v2/public/companies`,
|
|
977
|
+
headers: {
|
|
978
|
+
Authorization: `Bearer ${token}`,
|
|
979
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
980
|
+
},
|
|
981
|
+
});
|
|
982
|
+
const items = response.body?.items || [];
|
|
983
|
+
return {
|
|
984
|
+
options: items.map((item) => ({
|
|
985
|
+
label: item.name,
|
|
986
|
+
value: item.id,
|
|
987
|
+
})),
|
|
988
|
+
};
|
|
989
|
+
},
|
|
538
990
|
}),
|
|
539
|
-
tag: pieces_framework_1.Property.
|
|
991
|
+
tag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
540
992
|
displayName: 'Filter by Tags',
|
|
541
|
-
description: 'Only trigger for specific tags
|
|
993
|
+
description: 'Only trigger for specific tags',
|
|
542
994
|
required: false,
|
|
995
|
+
auth: auth_1.workbuddyAuth,
|
|
996
|
+
refreshers: [],
|
|
997
|
+
options: async ({ auth }) => {
|
|
998
|
+
const authValue = auth;
|
|
999
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1000
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1001
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1002
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1003
|
+
url: `${baseUrl}/api/v2/public/settings/tags`,
|
|
1004
|
+
headers: {
|
|
1005
|
+
Authorization: `Bearer ${token}`,
|
|
1006
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1007
|
+
},
|
|
1008
|
+
});
|
|
1009
|
+
const items = response.body?.items || [];
|
|
1010
|
+
return {
|
|
1011
|
+
options: items.map((item) => ({
|
|
1012
|
+
label: item.name,
|
|
1013
|
+
value: item.id,
|
|
1014
|
+
})),
|
|
1015
|
+
};
|
|
1016
|
+
},
|
|
543
1017
|
}),
|
|
544
|
-
resource: pieces_framework_1.Property.
|
|
1018
|
+
resource: pieces_framework_1.Property.MultiSelectDropdown({
|
|
545
1019
|
displayName: 'Filter by Resource',
|
|
546
|
-
description: 'Only trigger for specific resource
|
|
1020
|
+
description: 'Only trigger for specific resource',
|
|
547
1021
|
required: false,
|
|
1022
|
+
auth: auth_1.workbuddyAuth,
|
|
1023
|
+
refreshers: [],
|
|
1024
|
+
options: async ({ auth }) => {
|
|
1025
|
+
const authValue = auth;
|
|
1026
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1027
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1028
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1029
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1030
|
+
url: `${baseUrl}/api/v2/public/employees`,
|
|
1031
|
+
headers: {
|
|
1032
|
+
Authorization: `Bearer ${token}`,
|
|
1033
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1034
|
+
},
|
|
1035
|
+
});
|
|
1036
|
+
const items = response.body?.items || [];
|
|
1037
|
+
return {
|
|
1038
|
+
options: items.map((item) => ({
|
|
1039
|
+
label: item.name,
|
|
1040
|
+
value: item.id,
|
|
1041
|
+
})),
|
|
1042
|
+
};
|
|
1043
|
+
},
|
|
548
1044
|
}),
|
|
549
|
-
workCategory: pieces_framework_1.Property.
|
|
1045
|
+
workCategory: pieces_framework_1.Property.MultiSelectDropdown({
|
|
550
1046
|
displayName: 'Filter by Work Category',
|
|
551
|
-
description: 'Only trigger for specific work category
|
|
1047
|
+
description: 'Only trigger for specific work category',
|
|
552
1048
|
required: false,
|
|
1049
|
+
auth: auth_1.workbuddyAuth,
|
|
1050
|
+
refreshers: [],
|
|
1051
|
+
options: async ({ auth }) => {
|
|
1052
|
+
const authValue = auth;
|
|
1053
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1054
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1055
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1056
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1057
|
+
url: `${baseUrl}/api/v2/public/settings/work-types`,
|
|
1058
|
+
headers: {
|
|
1059
|
+
Authorization: `Bearer ${token}`,
|
|
1060
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1061
|
+
},
|
|
1062
|
+
});
|
|
1063
|
+
const items = response.body?.items || [];
|
|
1064
|
+
return {
|
|
1065
|
+
options: items.map((item) => ({
|
|
1066
|
+
label: item.name,
|
|
1067
|
+
value: item.id,
|
|
1068
|
+
})),
|
|
1069
|
+
};
|
|
1070
|
+
},
|
|
553
1071
|
}),
|
|
554
1072
|
stageStatus: pieces_framework_1.Property.StaticMultiSelectDropdown({
|
|
555
1073
|
displayName: 'Filter by Status',
|
|
@@ -565,33 +1083,80 @@ exports.stage_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
565
1083
|
],
|
|
566
1084
|
},
|
|
567
1085
|
}),
|
|
568
|
-
schedulingTag: pieces_framework_1.Property.
|
|
1086
|
+
schedulingTag: pieces_framework_1.Property.MultiSelectDropdown({
|
|
569
1087
|
displayName: 'Filter by Scheduling Tag',
|
|
570
|
-
description: 'Only trigger for specific scheduling tag
|
|
1088
|
+
description: 'Only trigger for specific scheduling tag',
|
|
571
1089
|
required: false,
|
|
1090
|
+
auth: auth_1.workbuddyAuth,
|
|
1091
|
+
refreshers: [],
|
|
1092
|
+
options: async ({ auth }) => {
|
|
1093
|
+
const authValue = auth;
|
|
1094
|
+
const token = await (0, auth_1.getAccessToken)(authValue);
|
|
1095
|
+
const baseUrl = authValue.props.baseUrl;
|
|
1096
|
+
const response = await pieces_common_1.httpClient.sendRequest({
|
|
1097
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
1098
|
+
url: `${baseUrl}/api/v2/public/settings/tags?type=scheduling`,
|
|
1099
|
+
headers: {
|
|
1100
|
+
Authorization: `Bearer ${token}`,
|
|
1101
|
+
'X-WorkBuddy-Version': '2026-01',
|
|
1102
|
+
},
|
|
1103
|
+
});
|
|
1104
|
+
const items = response.body?.items || [];
|
|
1105
|
+
return {
|
|
1106
|
+
options: items.map((item) => ({
|
|
1107
|
+
label: item.name,
|
|
1108
|
+
value: item.id,
|
|
1109
|
+
})),
|
|
1110
|
+
};
|
|
1111
|
+
},
|
|
572
1112
|
}),
|
|
573
1113
|
},
|
|
574
1114
|
sampleData: {
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
1115
|
+
id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
|
|
1116
|
+
event: 'Stage Deleted',
|
|
1117
|
+
action: 'remove',
|
|
1118
|
+
createdAt: '2026-03-14T05:21:47.307Z',
|
|
1119
|
+
webhookTimestamp: 1773465707307,
|
|
1120
|
+
data: {
|
|
1121
|
+
workOrder: {
|
|
1122
|
+
id: '507f1f77bcf86cd799439011',
|
|
1123
|
+
name: 'Foundation Work',
|
|
1124
|
+
workOrderNumber: 'J10001-5039',
|
|
1125
|
+
jobNumber: 'J10001',
|
|
1126
|
+
description: 'Sample stage description',
|
|
1127
|
+
status: 'In Progress',
|
|
1128
|
+
previousStatus: 'Open',
|
|
1129
|
+
createdAt: '2026-03-05T10:00:00.000Z',
|
|
1130
|
+
updatedAt: '2026-03-05T10:00:00.000Z',
|
|
1131
|
+
startDate: '2026-03-05T08:00:00.000Z',
|
|
1132
|
+
dueDate: '2026-03-10T17:00:00.000Z',
|
|
1133
|
+
completedDate: null,
|
|
1134
|
+
finalisedDate: null,
|
|
1135
|
+
customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
1136
|
+
owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
|
|
1137
|
+
stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
|
|
1138
|
+
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
1139
|
+
subcontractor: null,
|
|
1140
|
+
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
1141
|
+
site: {
|
|
1142
|
+
id: '507f1f77bcf86cd799439011',
|
|
1143
|
+
name: 'Main Office',
|
|
1144
|
+
address: {
|
|
1145
|
+
street: '123 Main St',
|
|
1146
|
+
suburb: 'Sydney',
|
|
1147
|
+
state: 'NSW',
|
|
1148
|
+
postcode: '2000',
|
|
1149
|
+
country: 'Australia',
|
|
1150
|
+
formatted: '123 Main St, Sydney NSW 2000',
|
|
1151
|
+
},
|
|
1152
|
+
},
|
|
1153
|
+
workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
|
|
1154
|
+
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
1155
|
+
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
1156
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
1157
|
+
},
|
|
592
1158
|
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
593
|
-
|
|
594
|
-
priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
|
|
1159
|
+
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
595
1160
|
site: {
|
|
596
1161
|
id: '507f1f77bcf86cd799439011',
|
|
597
1162
|
name: 'Main Office',
|
|
@@ -604,24 +1169,6 @@ exports.stage_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
604
1169
|
formatted: '123 Main St, Sydney NSW 2000',
|
|
605
1170
|
},
|
|
606
1171
|
},
|
|
607
|
-
workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
|
|
608
|
-
labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
|
|
609
|
-
zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
|
|
610
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
611
|
-
},
|
|
612
|
-
technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
|
|
613
|
-
billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
|
|
614
|
-
site: {
|
|
615
|
-
id: '507f1f77bcf86cd799439011',
|
|
616
|
-
name: 'Main Office',
|
|
617
|
-
address: {
|
|
618
|
-
street: '123 Main St',
|
|
619
|
-
suburb: 'Sydney',
|
|
620
|
-
state: 'NSW',
|
|
621
|
-
postcode: '2000',
|
|
622
|
-
country: 'Australia',
|
|
623
|
-
formatted: '123 Main St, Sydney NSW 2000',
|
|
624
|
-
},
|
|
625
1172
|
},
|
|
626
1173
|
},
|
|
627
1174
|
type: pieces_framework_1.TriggerStrategy.WEBHOOK,
|
|
@@ -644,7 +1191,7 @@ exports.stage_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
644
1191
|
filters.stageStatus = context.propsValue.stageStatus.map((v) => JSON.parse(v));
|
|
645
1192
|
if (context.propsValue.schedulingTag?.length)
|
|
646
1193
|
filters.schedulingTag = context.propsValue.schedulingTag;
|
|
647
|
-
// Register webhook with WorkBuddy v2 API
|
|
1194
|
+
// Register webhook with WorkBuddy v2 API
|
|
648
1195
|
const response = await pieces_common_1.httpClient.sendRequest({
|
|
649
1196
|
method: pieces_common_1.HttpMethod.POST,
|
|
650
1197
|
url: `${baseUrl}/api/v2/public/webhooks`,
|
|
@@ -673,18 +1220,15 @@ exports.stage_deleted_trigger = (0, pieces_framework_1.createTrigger)({
|
|
|
673
1220
|
const baseUrl = context.auth.props.baseUrl;
|
|
674
1221
|
const webhookId = await context.store.get('webhookId');
|
|
675
1222
|
if (webhookId) {
|
|
676
|
-
//
|
|
1223
|
+
// Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
|
|
677
1224
|
await pieces_common_1.httpClient.sendRequest({
|
|
678
|
-
method: pieces_common_1.HttpMethod.
|
|
1225
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
679
1226
|
url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
|
|
680
1227
|
headers: {
|
|
681
1228
|
Authorization: `Bearer ${token}`,
|
|
682
1229
|
'Content-Type': 'application/json',
|
|
683
1230
|
'X-WorkBuddy-Version': '2026-01',
|
|
684
1231
|
},
|
|
685
|
-
body: {
|
|
686
|
-
status: 'paused',
|
|
687
|
-
},
|
|
688
1232
|
});
|
|
689
1233
|
}
|
|
690
1234
|
},
|