@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.
Files changed (208) hide show
  1. package/package.json +1 -1
  2. package/src/index.d.ts.map +1 -1
  3. package/src/index.js +89 -83
  4. package/src/index.js.map +1 -1
  5. package/src/index.ts +29 -17
  6. package/src/lib/actions/agents.d.ts.map +1 -1
  7. package/src/lib/actions/agents.js +6 -4
  8. package/src/lib/actions/agents.js.map +1 -1
  9. package/src/lib/actions/agents.ts +8 -4
  10. package/src/lib/actions/attachments.d.ts.map +1 -1
  11. package/src/lib/actions/attachments.js +2 -1
  12. package/src/lib/actions/attachments.js.map +1 -1
  13. package/src/lib/actions/attachments.ts +3 -1
  14. package/src/lib/actions/{crm->-companies.d.ts → crm-companies.d.ts} +1 -1
  15. package/src/lib/actions/crm-companies.d.ts.map +1 -0
  16. package/src/lib/actions/{crm->-companies.js → crm-companies.js} +1 -1
  17. package/src/lib/actions/{crm->-invites.js.map → crm-companies.js.map} +1 -1
  18. package/src/lib/actions/{crm->-contacts.d.ts → crm-contacts.d.ts} +1 -1
  19. package/src/lib/actions/crm-contacts.d.ts.map +1 -0
  20. package/src/lib/actions/{crm->-contacts.js → crm-contacts.js} +1 -1
  21. package/src/lib/actions/crm-contacts.js.map +1 -0
  22. package/src/lib/actions/{crm->-contractors.d.ts → crm-contractors.d.ts} +1 -1
  23. package/src/lib/actions/crm-contractors.d.ts.map +1 -0
  24. package/src/lib/actions/{crm->-contractors.js → crm-contractors.js} +1 -1
  25. package/src/lib/actions/{crm->-employees.js.map → crm-contractors.js.map} +1 -1
  26. package/src/lib/actions/{crm->-customers.d.ts → crm-customers.d.ts} +1 -1
  27. package/src/lib/actions/crm-customers.d.ts.map +1 -0
  28. package/src/lib/actions/{crm->-customers.js → crm-customers.js} +1 -1
  29. package/src/lib/actions/crm-customers.js.map +1 -0
  30. package/src/lib/actions/{crm->-employees.d.ts → crm-employees.d.ts} +1 -1
  31. package/src/lib/actions/crm-employees.d.ts.map +1 -0
  32. package/src/lib/actions/{crm->-employees.js → crm-employees.js} +1 -1
  33. package/src/lib/actions/crm-employees.js.map +1 -0
  34. package/src/lib/actions/{crm->-external-users.d.ts → crm-external-users.d.ts} +1 -1
  35. package/src/lib/actions/crm-external-users.d.ts.map +1 -0
  36. package/src/lib/actions/{crm->-external-users.js → crm-external-users.js} +1 -1
  37. package/src/lib/actions/crm-external-users.js.map +1 -0
  38. package/src/lib/actions/{crm->-invites.d.ts → crm-invites.d.ts} +1 -1
  39. package/src/lib/actions/crm-invites.d.ts.map +1 -0
  40. package/src/lib/actions/{crm->-invites.js → crm-invites.js} +1 -1
  41. package/src/lib/actions/crm-invites.js.map +1 -0
  42. package/src/lib/actions/{crm->-sites.d.ts → crm-sites.d.ts} +1 -1
  43. package/src/lib/actions/crm-sites.d.ts.map +1 -0
  44. package/src/lib/actions/{crm->-sites.js → crm-sites.js} +1 -1
  45. package/src/lib/actions/crm-sites.js.map +1 -0
  46. package/src/lib/actions/{crm->-suppliers.d.ts → crm-suppliers.d.ts} +1 -1
  47. package/src/lib/actions/crm-suppliers.d.ts.map +1 -0
  48. package/src/lib/actions/{crm->-suppliers.js → crm-suppliers.js} +1 -1
  49. package/src/lib/actions/crm-suppliers.js.map +1 -0
  50. package/src/lib/actions/flags.d.ts +34 -0
  51. package/src/lib/actions/flags.d.ts.map +1 -0
  52. package/src/lib/actions/flags.js +185 -0
  53. package/src/lib/actions/flags.js.map +1 -0
  54. package/src/lib/actions/flags.ts +201 -0
  55. package/src/lib/actions/index.d.ts +18 -17
  56. package/src/lib/actions/index.d.ts.map +1 -1
  57. package/src/lib/actions/index.js +18 -17
  58. package/src/lib/actions/index.js.map +1 -1
  59. package/src/lib/actions/index.ts +18 -17
  60. package/src/lib/actions/{jobs->-activities.d.ts → jobs-activities.d.ts} +15 -5
  61. package/src/lib/actions/jobs-activities.d.ts.map +1 -0
  62. package/src/lib/actions/{jobs->-activities.js → jobs-activities.js} +110 -59
  63. package/src/lib/actions/jobs-activities.js.map +1 -0
  64. package/src/lib/actions/{jobs->-activities.ts → jobs-activities.ts} +118 -57
  65. package/src/lib/actions/{jobs->-contacts.d.ts → jobs-contacts.d.ts} +1 -1
  66. package/src/lib/actions/jobs-contacts.d.ts.map +1 -0
  67. package/src/lib/actions/{jobs->-contacts.js → jobs-contacts.js} +5 -5
  68. package/src/lib/actions/jobs-contacts.js.map +1 -0
  69. package/src/lib/actions/{jobs->-contacts.ts → jobs-contacts.ts} +4 -4
  70. package/src/lib/actions/{jobs->-files.d.ts → jobs-files.d.ts} +1 -1
  71. package/src/lib/actions/jobs-files.d.ts.map +1 -0
  72. package/src/lib/actions/{jobs->-files.js → jobs-files.js} +9 -9
  73. package/src/lib/actions/jobs-files.js.map +1 -0
  74. package/src/lib/actions/{jobs->-files.ts → jobs-files.ts} +8 -8
  75. package/src/lib/actions/{jobs->-tasks.d.ts → jobs-tasks.d.ts} +4 -2
  76. package/src/lib/actions/jobs-tasks.d.ts.map +1 -0
  77. package/src/lib/actions/{jobs->-tasks.js → jobs-tasks.js} +61 -37
  78. package/src/lib/actions/jobs-tasks.js.map +1 -0
  79. package/src/lib/actions/{jobs->-tasks.ts → jobs-tasks.ts} +64 -36
  80. package/src/lib/actions/jobs.d.ts +4 -3
  81. package/src/lib/actions/jobs.d.ts.map +1 -1
  82. package/src/lib/actions/jobs.js +90 -72
  83. package/src/lib/actions/jobs.js.map +1 -1
  84. package/src/lib/actions/jobs.ts +94 -72
  85. package/src/lib/actions/mcp.d.ts +1 -1
  86. package/src/lib/actions/mcp.d.ts.map +1 -1
  87. package/src/lib/actions/mcp.js +7 -6
  88. package/src/lib/actions/mcp.js.map +1 -1
  89. package/src/lib/actions/mcp.ts +8 -6
  90. package/src/lib/actions/settings.js +1 -1
  91. package/src/lib/actions/settings.js.map +1 -1
  92. package/src/lib/actions/settings.ts +1 -1
  93. package/src/lib/actions/{stages->-activities.d.ts → stages-activities.d.ts} +24 -5
  94. package/src/lib/actions/stages-activities.d.ts.map +1 -0
  95. package/src/lib/actions/{stages->-activities.js → stages-activities.js} +164 -68
  96. package/src/lib/actions/stages-activities.js.map +1 -0
  97. package/src/lib/actions/{stages->-activities.ts → stages-activities.ts} +172 -66
  98. package/src/lib/actions/{stages->-files.d.ts → stages-files.d.ts} +5 -1
  99. package/src/lib/actions/stages-files.d.ts.map +1 -0
  100. package/src/lib/actions/{stages->-files.js → stages-files.js} +35 -15
  101. package/src/lib/actions/stages-files.js.map +1 -0
  102. package/src/lib/actions/{stages->-files.ts → stages-files.ts} +34 -14
  103. package/src/lib/actions/{stages->-resources.d.ts → stages-resources.d.ts} +1 -1
  104. package/src/lib/actions/stages-resources.d.ts.map +1 -0
  105. package/src/lib/actions/{stages->-resources.js → stages-resources.js} +7 -5
  106. package/src/lib/actions/stages-resources.js.map +1 -0
  107. package/src/lib/actions/{stages->-resources.ts → stages-resources.ts} +8 -4
  108. package/src/lib/actions/{stages->-tasks.d.ts → stages-tasks.d.ts} +8 -2
  109. package/src/lib/actions/stages-tasks.d.ts.map +1 -0
  110. package/src/lib/actions/{stages->-tasks.js → stages-tasks.js} +91 -47
  111. package/src/lib/actions/stages-tasks.js.map +1 -0
  112. package/src/lib/actions/{stages->-tasks.ts → stages-tasks.ts} +94 -46
  113. package/src/lib/actions/stages.d.ts +6 -2
  114. package/src/lib/actions/stages.d.ts.map +1 -1
  115. package/src/lib/actions/stages.js +77 -27
  116. package/src/lib/actions/stages.js.map +1 -1
  117. package/src/lib/actions/stages.ts +88 -27
  118. package/src/lib/actions/webhooks-v2.js +15 -15
  119. package/src/lib/actions/webhooks-v2.js.map +1 -1
  120. package/src/lib/actions/webhooks-v2.ts +15 -15
  121. package/src/lib/auth.js +2 -2
  122. package/src/lib/auth.js.map +1 -1
  123. package/src/lib/auth.ts +2 -2
  124. package/src/lib/triggers/activity.d.ts.map +1 -1
  125. package/src/lib/triggers/activity.js +54 -42
  126. package/src/lib/triggers/activity.js.map +1 -1
  127. package/src/lib/triggers/activity.ts +54 -42
  128. package/src/lib/triggers/bill.d.ts +240 -48
  129. package/src/lib/triggers/bill.d.ts.map +1 -1
  130. package/src/lib/triggers/bill.js +368 -88
  131. package/src/lib/triggers/bill.js.map +1 -1
  132. package/src/lib/triggers/bill.ts +368 -88
  133. package/src/lib/triggers/invoice.d.ts +240 -48
  134. package/src/lib/triggers/invoice.d.ts.map +1 -1
  135. package/src/lib/triggers/invoice.js +368 -88
  136. package/src/lib/triggers/invoice.js.map +1 -1
  137. package/src/lib/triggers/invoice.ts +368 -88
  138. package/src/lib/triggers/job.d.ts +640 -128
  139. package/src/lib/triggers/job.d.ts.map +1 -1
  140. package/src/lib/triggers/job.js +928 -208
  141. package/src/lib/triggers/job.js.map +1 -1
  142. package/src/lib/triggers/job.ts +928 -208
  143. package/src/lib/triggers/lead.d.ts +400 -80
  144. package/src/lib/triggers/lead.d.ts.map +1 -1
  145. package/src/lib/triggers/lead.js +552 -96
  146. package/src/lib/triggers/lead.js.map +1 -1
  147. package/src/lib/triggers/lead.ts +552 -96
  148. package/src/lib/triggers/opportunity.d.ts +320 -64
  149. package/src/lib/triggers/opportunity.d.ts.map +1 -1
  150. package/src/lib/triggers/opportunity.js +456 -88
  151. package/src/lib/triggers/opportunity.js.map +1 -1
  152. package/src/lib/triggers/opportunity.ts +456 -88
  153. package/src/lib/triggers/quote.d.ts +240 -48
  154. package/src/lib/triggers/quote.d.ts.map +1 -1
  155. package/src/lib/triggers/quote.js +368 -88
  156. package/src/lib/triggers/quote.js.map +1 -1
  157. package/src/lib/triggers/quote.ts +368 -88
  158. package/src/lib/triggers/stage.d.ts +480 -96
  159. package/src/lib/triggers/stage.d.ts.map +1 -1
  160. package/src/lib/triggers/stage.js +764 -220
  161. package/src/lib/triggers/stage.js.map +1 -1
  162. package/src/lib/triggers/stage.ts +764 -220
  163. package/src/lib/triggers/task.d.ts +80 -16
  164. package/src/lib/triggers/task.d.ts.map +1 -1
  165. package/src/lib/triggers/task.js +172 -68
  166. package/src/lib/triggers/task.js.map +1 -1
  167. package/src/lib/triggers/task.ts +172 -68
  168. package/src/lib/actions/crm->-companies.d.ts.map +0 -1
  169. package/src/lib/actions/crm->-companies.js.map +0 -1
  170. package/src/lib/actions/crm->-contacts.d.ts.map +0 -1
  171. package/src/lib/actions/crm->-contacts.js.map +0 -1
  172. package/src/lib/actions/crm->-contractors.d.ts.map +0 -1
  173. package/src/lib/actions/crm->-contractors.js.map +0 -1
  174. package/src/lib/actions/crm->-customers.d.ts.map +0 -1
  175. package/src/lib/actions/crm->-customers.js.map +0 -1
  176. package/src/lib/actions/crm->-employees.d.ts.map +0 -1
  177. package/src/lib/actions/crm->-external-users.d.ts.map +0 -1
  178. package/src/lib/actions/crm->-external-users.js.map +0 -1
  179. package/src/lib/actions/crm->-invites.d.ts.map +0 -1
  180. package/src/lib/actions/crm->-sites.d.ts.map +0 -1
  181. package/src/lib/actions/crm->-sites.js.map +0 -1
  182. package/src/lib/actions/crm->-suppliers.d.ts.map +0 -1
  183. package/src/lib/actions/crm->-suppliers.js.map +0 -1
  184. package/src/lib/actions/jobs->-activities.d.ts.map +0 -1
  185. package/src/lib/actions/jobs->-activities.js.map +0 -1
  186. package/src/lib/actions/jobs->-contacts.d.ts.map +0 -1
  187. package/src/lib/actions/jobs->-contacts.js.map +0 -1
  188. package/src/lib/actions/jobs->-files.d.ts.map +0 -1
  189. package/src/lib/actions/jobs->-files.js.map +0 -1
  190. package/src/lib/actions/jobs->-tasks.d.ts.map +0 -1
  191. package/src/lib/actions/jobs->-tasks.js.map +0 -1
  192. package/src/lib/actions/stages->-activities.d.ts.map +0 -1
  193. package/src/lib/actions/stages->-activities.js.map +0 -1
  194. package/src/lib/actions/stages->-files.d.ts.map +0 -1
  195. package/src/lib/actions/stages->-files.js.map +0 -1
  196. package/src/lib/actions/stages->-resources.d.ts.map +0 -1
  197. package/src/lib/actions/stages->-resources.js.map +0 -1
  198. package/src/lib/actions/stages->-tasks.d.ts.map +0 -1
  199. package/src/lib/actions/stages->-tasks.js.map +0 -1
  200. /package/src/lib/actions/{crm->-companies.ts → crm-companies.ts} +0 -0
  201. /package/src/lib/actions/{crm->-contacts.ts → crm-contacts.ts} +0 -0
  202. /package/src/lib/actions/{crm->-contractors.ts → crm-contractors.ts} +0 -0
  203. /package/src/lib/actions/{crm->-customers.ts → crm-customers.ts} +0 -0
  204. /package/src/lib/actions/{crm->-employees.ts → crm-employees.ts} +0 -0
  205. /package/src/lib/actions/{crm->-external-users.ts → crm-external-users.ts} +0 -0
  206. /package/src/lib/actions/{crm->-invites.ts → crm-invites.ts} +0 -0
  207. /package/src/lib/actions/{crm->-sites.ts → crm-sites.ts} +0 -0
  208. /package/src/lib/actions/{crm->-suppliers.ts → crm-suppliers.ts} +0 -0
@@ -10,20 +10,86 @@ exports.lead_created_trigger = (0, pieces_framework_1.createTrigger)({
10
10
  displayName: 'Lead Created',
11
11
  description: 'Triggered when a new lead is created',
12
12
  props: {
13
- customer: pieces_framework_1.Property.Array({
13
+ customer: pieces_framework_1.Property.MultiSelectDropdown({
14
14
  displayName: 'Filter by Customer',
15
- description: 'Only trigger for specific customer IDs',
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.Array({
40
+ billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
19
41
  displayName: 'Filter by Billing Company',
20
- description: 'Only trigger for specific billing company IDs',
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.Array({
67
+ tag: pieces_framework_1.Property.MultiSelectDropdown({
24
68
  displayName: 'Filter by Tags',
25
- description: 'Only trigger for specific tags IDs',
69
+ description: 'Only trigger for specific tags',
26
70
  required: false,
71
+ auth: auth_1.workbuddyAuth,
72
+ refreshers: [],
73
+ options: async ({ auth }) => {
74
+ const authValue = auth;
75
+ const token = await (0, auth_1.getAccessToken)(authValue);
76
+ const baseUrl = authValue.props.baseUrl;
77
+ const response = await pieces_common_1.httpClient.sendRequest({
78
+ method: pieces_common_1.HttpMethod.GET,
79
+ url: `${baseUrl}/api/v2/public/settings/tags`,
80
+ headers: {
81
+ Authorization: `Bearer ${token}`,
82
+ 'X-WorkBuddy-Version': '2026-01',
83
+ },
84
+ });
85
+ const items = response.body?.items || [];
86
+ return {
87
+ options: items.map((item) => ({
88
+ label: item.name,
89
+ value: item.id,
90
+ })),
91
+ };
92
+ },
27
93
  }),
28
94
  leadStage: pieces_framework_1.Property.Array({
29
95
  displayName: 'Filter by Stage',
@@ -35,26 +101,77 @@ exports.lead_created_trigger = (0, pieces_framework_1.createTrigger)({
35
101
  description: 'Only trigger for specific source IDs',
36
102
  required: false,
37
103
  }),
38
- owner: pieces_framework_1.Property.Array({
104
+ owner: pieces_framework_1.Property.MultiSelectDropdown({
39
105
  displayName: 'Filter by Owner',
40
- description: 'Only trigger for specific owner IDs',
106
+ description: 'Only trigger for specific owner',
41
107
  required: false,
108
+ auth: auth_1.workbuddyAuth,
109
+ refreshers: [],
110
+ options: async ({ auth }) => {
111
+ const authValue = auth;
112
+ const token = await (0, auth_1.getAccessToken)(authValue);
113
+ const baseUrl = authValue.props.baseUrl;
114
+ const response = await pieces_common_1.httpClient.sendRequest({
115
+ method: pieces_common_1.HttpMethod.GET,
116
+ url: `${baseUrl}/api/v2/public/employees`,
117
+ headers: {
118
+ Authorization: `Bearer ${token}`,
119
+ 'X-WorkBuddy-Version': '2026-01',
120
+ },
121
+ });
122
+ const items = response.body?.items || [];
123
+ return {
124
+ options: items.map((item) => ({
125
+ label: item.name,
126
+ value: item.id,
127
+ })),
128
+ };
129
+ },
42
130
  }),
43
- type: pieces_framework_1.Property.Array({
131
+ type: pieces_framework_1.Property.MultiSelectDropdown({
44
132
  displayName: 'Filter by Job Type',
45
- description: 'Only trigger for specific job type IDs',
133
+ description: 'Only trigger for specific job type',
46
134
  required: false,
135
+ auth: auth_1.workbuddyAuth,
136
+ refreshers: [],
137
+ options: async ({ auth }) => {
138
+ const authValue = auth;
139
+ const token = await (0, auth_1.getAccessToken)(authValue);
140
+ const baseUrl = authValue.props.baseUrl;
141
+ const response = await pieces_common_1.httpClient.sendRequest({
142
+ method: pieces_common_1.HttpMethod.GET,
143
+ url: `${baseUrl}/api/v2/public/settings/job-types`,
144
+ headers: {
145
+ Authorization: `Bearer ${token}`,
146
+ 'X-WorkBuddy-Version': '2026-01',
147
+ },
148
+ });
149
+ const items = response.body?.items || [];
150
+ return {
151
+ options: items.map((item) => ({
152
+ label: item.name,
153
+ value: item.id,
154
+ })),
155
+ };
156
+ },
47
157
  }),
48
158
  },
49
159
  sampleData: {
50
- lead: {
51
- id: '507f1f77bcf86cd799439011',
52
- name: 'New Lead',
53
- status: 'New',
54
- source: 'website',
55
- createdAt: '2026-03-05T10:00:00.000Z',
56
- customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
57
- owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
160
+ id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
161
+ event: 'Lead Created',
162
+ action: 'create',
163
+ createdAt: '2026-03-14T05:21:47.307Z',
164
+ webhookTimestamp: 1773465707307,
165
+ data: {
166
+ lead: {
167
+ id: '507f1f77bcf86cd799439011',
168
+ name: 'New Lead',
169
+ status: 'New',
170
+ source: 'website',
171
+ createdAt: '2026-03-05T10:00:00.000Z',
172
+ customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
173
+ owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
174
+ },
58
175
  },
59
176
  },
60
177
  type: pieces_framework_1.TriggerStrategy.WEBHOOK,
@@ -77,7 +194,7 @@ exports.lead_created_trigger = (0, pieces_framework_1.createTrigger)({
77
194
  filters.owner = context.propsValue.owner;
78
195
  if (context.propsValue.type?.length)
79
196
  filters.type = context.propsValue.type;
80
- // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
197
+ // Register webhook with WorkBuddy v2 API
81
198
  const response = await pieces_common_1.httpClient.sendRequest({
82
199
  method: pieces_common_1.HttpMethod.POST,
83
200
  url: `${baseUrl}/api/v2/public/webhooks`,
@@ -106,18 +223,15 @@ exports.lead_created_trigger = (0, pieces_framework_1.createTrigger)({
106
223
  const baseUrl = context.auth.props.baseUrl;
107
224
  const webhookId = await context.store.get('webhookId');
108
225
  if (webhookId) {
109
- // Pause webhook (server keeps it for potential reactivation)
226
+ // Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
110
227
  await pieces_common_1.httpClient.sendRequest({
111
- method: pieces_common_1.HttpMethod.PATCH,
228
+ method: pieces_common_1.HttpMethod.DELETE,
112
229
  url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
113
230
  headers: {
114
231
  Authorization: `Bearer ${token}`,
115
232
  'Content-Type': 'application/json',
116
233
  'X-WorkBuddy-Version': '2026-01',
117
234
  },
118
- body: {
119
- status: 'paused',
120
- },
121
235
  });
122
236
  }
123
237
  },
@@ -131,20 +245,86 @@ exports.lead_updated_trigger = (0, pieces_framework_1.createTrigger)({
131
245
  displayName: 'Lead Updated',
132
246
  description: 'Triggered when a lead is updated',
133
247
  props: {
134
- customer: pieces_framework_1.Property.Array({
248
+ customer: pieces_framework_1.Property.MultiSelectDropdown({
135
249
  displayName: 'Filter by Customer',
136
- description: 'Only trigger for specific customer IDs',
250
+ description: 'Only trigger for specific customer',
137
251
  required: false,
252
+ auth: auth_1.workbuddyAuth,
253
+ refreshers: [],
254
+ options: async ({ auth }) => {
255
+ const authValue = auth;
256
+ const token = await (0, auth_1.getAccessToken)(authValue);
257
+ const baseUrl = authValue.props.baseUrl;
258
+ const response = await pieces_common_1.httpClient.sendRequest({
259
+ method: pieces_common_1.HttpMethod.GET,
260
+ url: `${baseUrl}/api/v2/public/customers`,
261
+ headers: {
262
+ Authorization: `Bearer ${token}`,
263
+ 'X-WorkBuddy-Version': '2026-01',
264
+ },
265
+ });
266
+ const items = response.body?.items || [];
267
+ return {
268
+ options: items.map((item) => ({
269
+ label: item.name,
270
+ value: item.id,
271
+ })),
272
+ };
273
+ },
138
274
  }),
139
- billingCompany: pieces_framework_1.Property.Array({
275
+ billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
140
276
  displayName: 'Filter by Billing Company',
141
- description: 'Only trigger for specific billing company IDs',
277
+ description: 'Only trigger for specific billing company',
142
278
  required: false,
279
+ auth: auth_1.workbuddyAuth,
280
+ refreshers: [],
281
+ options: async ({ auth }) => {
282
+ const authValue = auth;
283
+ const token = await (0, auth_1.getAccessToken)(authValue);
284
+ const baseUrl = authValue.props.baseUrl;
285
+ const response = await pieces_common_1.httpClient.sendRequest({
286
+ method: pieces_common_1.HttpMethod.GET,
287
+ url: `${baseUrl}/api/v2/public/companies`,
288
+ headers: {
289
+ Authorization: `Bearer ${token}`,
290
+ 'X-WorkBuddy-Version': '2026-01',
291
+ },
292
+ });
293
+ const items = response.body?.items || [];
294
+ return {
295
+ options: items.map((item) => ({
296
+ label: item.name,
297
+ value: item.id,
298
+ })),
299
+ };
300
+ },
143
301
  }),
144
- tag: pieces_framework_1.Property.Array({
302
+ tag: pieces_framework_1.Property.MultiSelectDropdown({
145
303
  displayName: 'Filter by Tags',
146
- description: 'Only trigger for specific tags IDs',
304
+ description: 'Only trigger for specific tags',
147
305
  required: false,
306
+ auth: auth_1.workbuddyAuth,
307
+ refreshers: [],
308
+ options: async ({ auth }) => {
309
+ const authValue = auth;
310
+ const token = await (0, auth_1.getAccessToken)(authValue);
311
+ const baseUrl = authValue.props.baseUrl;
312
+ const response = await pieces_common_1.httpClient.sendRequest({
313
+ method: pieces_common_1.HttpMethod.GET,
314
+ url: `${baseUrl}/api/v2/public/settings/tags`,
315
+ headers: {
316
+ Authorization: `Bearer ${token}`,
317
+ 'X-WorkBuddy-Version': '2026-01',
318
+ },
319
+ });
320
+ const items = response.body?.items || [];
321
+ return {
322
+ options: items.map((item) => ({
323
+ label: item.name,
324
+ value: item.id,
325
+ })),
326
+ };
327
+ },
148
328
  }),
149
329
  leadStage: pieces_framework_1.Property.Array({
150
330
  displayName: 'Filter by Stage',
@@ -156,26 +336,77 @@ exports.lead_updated_trigger = (0, pieces_framework_1.createTrigger)({
156
336
  description: 'Only trigger for specific source IDs',
157
337
  required: false,
158
338
  }),
159
- owner: pieces_framework_1.Property.Array({
339
+ owner: pieces_framework_1.Property.MultiSelectDropdown({
160
340
  displayName: 'Filter by Owner',
161
- description: 'Only trigger for specific owner IDs',
341
+ description: 'Only trigger for specific owner',
162
342
  required: false,
343
+ auth: auth_1.workbuddyAuth,
344
+ refreshers: [],
345
+ options: async ({ auth }) => {
346
+ const authValue = auth;
347
+ const token = await (0, auth_1.getAccessToken)(authValue);
348
+ const baseUrl = authValue.props.baseUrl;
349
+ const response = await pieces_common_1.httpClient.sendRequest({
350
+ method: pieces_common_1.HttpMethod.GET,
351
+ url: `${baseUrl}/api/v2/public/employees`,
352
+ headers: {
353
+ Authorization: `Bearer ${token}`,
354
+ 'X-WorkBuddy-Version': '2026-01',
355
+ },
356
+ });
357
+ const items = response.body?.items || [];
358
+ return {
359
+ options: items.map((item) => ({
360
+ label: item.name,
361
+ value: item.id,
362
+ })),
363
+ };
364
+ },
163
365
  }),
164
- type: pieces_framework_1.Property.Array({
366
+ type: pieces_framework_1.Property.MultiSelectDropdown({
165
367
  displayName: 'Filter by Job Type',
166
- description: 'Only trigger for specific job type IDs',
368
+ description: 'Only trigger for specific job type',
167
369
  required: false,
370
+ auth: auth_1.workbuddyAuth,
371
+ refreshers: [],
372
+ options: async ({ auth }) => {
373
+ const authValue = auth;
374
+ const token = await (0, auth_1.getAccessToken)(authValue);
375
+ const baseUrl = authValue.props.baseUrl;
376
+ const response = await pieces_common_1.httpClient.sendRequest({
377
+ method: pieces_common_1.HttpMethod.GET,
378
+ url: `${baseUrl}/api/v2/public/settings/job-types`,
379
+ headers: {
380
+ Authorization: `Bearer ${token}`,
381
+ 'X-WorkBuddy-Version': '2026-01',
382
+ },
383
+ });
384
+ const items = response.body?.items || [];
385
+ return {
386
+ options: items.map((item) => ({
387
+ label: item.name,
388
+ value: item.id,
389
+ })),
390
+ };
391
+ },
168
392
  }),
169
393
  },
170
394
  sampleData: {
171
- lead: {
172
- id: '507f1f77bcf86cd799439011',
173
- name: 'New Lead',
174
- status: 'New',
175
- source: 'website',
176
- createdAt: '2026-03-05T10:00:00.000Z',
177
- customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
178
- owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
395
+ id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
396
+ event: 'Lead Updated',
397
+ action: 'update',
398
+ createdAt: '2026-03-14T05:21:47.307Z',
399
+ webhookTimestamp: 1773465707307,
400
+ data: {
401
+ lead: {
402
+ id: '507f1f77bcf86cd799439011',
403
+ name: 'New Lead',
404
+ status: 'New',
405
+ source: 'website',
406
+ createdAt: '2026-03-05T10:00:00.000Z',
407
+ customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
408
+ owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
409
+ },
179
410
  },
180
411
  },
181
412
  type: pieces_framework_1.TriggerStrategy.WEBHOOK,
@@ -198,7 +429,7 @@ exports.lead_updated_trigger = (0, pieces_framework_1.createTrigger)({
198
429
  filters.owner = context.propsValue.owner;
199
430
  if (context.propsValue.type?.length)
200
431
  filters.type = context.propsValue.type;
201
- // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
432
+ // Register webhook with WorkBuddy v2 API
202
433
  const response = await pieces_common_1.httpClient.sendRequest({
203
434
  method: pieces_common_1.HttpMethod.POST,
204
435
  url: `${baseUrl}/api/v2/public/webhooks`,
@@ -227,18 +458,15 @@ exports.lead_updated_trigger = (0, pieces_framework_1.createTrigger)({
227
458
  const baseUrl = context.auth.props.baseUrl;
228
459
  const webhookId = await context.store.get('webhookId');
229
460
  if (webhookId) {
230
- // Pause webhook (server keeps it for potential reactivation)
461
+ // Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
231
462
  await pieces_common_1.httpClient.sendRequest({
232
- method: pieces_common_1.HttpMethod.PATCH,
463
+ method: pieces_common_1.HttpMethod.DELETE,
233
464
  url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
234
465
  headers: {
235
466
  Authorization: `Bearer ${token}`,
236
467
  'Content-Type': 'application/json',
237
468
  'X-WorkBuddy-Version': '2026-01',
238
469
  },
239
- body: {
240
- status: 'paused',
241
- },
242
470
  });
243
471
  }
244
472
  },
@@ -252,20 +480,86 @@ exports.lead_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
252
480
  displayName: 'Lead Status Changed',
253
481
  description: 'Triggered when a lead status changes',
254
482
  props: {
255
- customer: pieces_framework_1.Property.Array({
483
+ customer: pieces_framework_1.Property.MultiSelectDropdown({
256
484
  displayName: 'Filter by Customer',
257
- description: 'Only trigger for specific customer IDs',
485
+ description: 'Only trigger for specific customer',
258
486
  required: false,
487
+ auth: auth_1.workbuddyAuth,
488
+ refreshers: [],
489
+ options: async ({ auth }) => {
490
+ const authValue = auth;
491
+ const token = await (0, auth_1.getAccessToken)(authValue);
492
+ const baseUrl = authValue.props.baseUrl;
493
+ const response = await pieces_common_1.httpClient.sendRequest({
494
+ method: pieces_common_1.HttpMethod.GET,
495
+ url: `${baseUrl}/api/v2/public/customers`,
496
+ headers: {
497
+ Authorization: `Bearer ${token}`,
498
+ 'X-WorkBuddy-Version': '2026-01',
499
+ },
500
+ });
501
+ const items = response.body?.items || [];
502
+ return {
503
+ options: items.map((item) => ({
504
+ label: item.name,
505
+ value: item.id,
506
+ })),
507
+ };
508
+ },
259
509
  }),
260
- billingCompany: pieces_framework_1.Property.Array({
510
+ billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
261
511
  displayName: 'Filter by Billing Company',
262
- description: 'Only trigger for specific billing company IDs',
512
+ description: 'Only trigger for specific billing company',
263
513
  required: false,
514
+ auth: auth_1.workbuddyAuth,
515
+ refreshers: [],
516
+ options: async ({ auth }) => {
517
+ const authValue = auth;
518
+ const token = await (0, auth_1.getAccessToken)(authValue);
519
+ const baseUrl = authValue.props.baseUrl;
520
+ const response = await pieces_common_1.httpClient.sendRequest({
521
+ method: pieces_common_1.HttpMethod.GET,
522
+ url: `${baseUrl}/api/v2/public/companies`,
523
+ headers: {
524
+ Authorization: `Bearer ${token}`,
525
+ 'X-WorkBuddy-Version': '2026-01',
526
+ },
527
+ });
528
+ const items = response.body?.items || [];
529
+ return {
530
+ options: items.map((item) => ({
531
+ label: item.name,
532
+ value: item.id,
533
+ })),
534
+ };
535
+ },
264
536
  }),
265
- tag: pieces_framework_1.Property.Array({
537
+ tag: pieces_framework_1.Property.MultiSelectDropdown({
266
538
  displayName: 'Filter by Tags',
267
- description: 'Only trigger for specific tags IDs',
539
+ description: 'Only trigger for specific tags',
268
540
  required: false,
541
+ auth: auth_1.workbuddyAuth,
542
+ refreshers: [],
543
+ options: async ({ auth }) => {
544
+ const authValue = auth;
545
+ const token = await (0, auth_1.getAccessToken)(authValue);
546
+ const baseUrl = authValue.props.baseUrl;
547
+ const response = await pieces_common_1.httpClient.sendRequest({
548
+ method: pieces_common_1.HttpMethod.GET,
549
+ url: `${baseUrl}/api/v2/public/settings/tags`,
550
+ headers: {
551
+ Authorization: `Bearer ${token}`,
552
+ 'X-WorkBuddy-Version': '2026-01',
553
+ },
554
+ });
555
+ const items = response.body?.items || [];
556
+ return {
557
+ options: items.map((item) => ({
558
+ label: item.name,
559
+ value: item.id,
560
+ })),
561
+ };
562
+ },
269
563
  }),
270
564
  leadStage: pieces_framework_1.Property.Array({
271
565
  displayName: 'Filter by Stage',
@@ -277,26 +571,77 @@ exports.lead_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
277
571
  description: 'Only trigger for specific source IDs',
278
572
  required: false,
279
573
  }),
280
- owner: pieces_framework_1.Property.Array({
574
+ owner: pieces_framework_1.Property.MultiSelectDropdown({
281
575
  displayName: 'Filter by Owner',
282
- description: 'Only trigger for specific owner IDs',
576
+ description: 'Only trigger for specific owner',
283
577
  required: false,
578
+ auth: auth_1.workbuddyAuth,
579
+ refreshers: [],
580
+ options: async ({ auth }) => {
581
+ const authValue = auth;
582
+ const token = await (0, auth_1.getAccessToken)(authValue);
583
+ const baseUrl = authValue.props.baseUrl;
584
+ const response = await pieces_common_1.httpClient.sendRequest({
585
+ method: pieces_common_1.HttpMethod.GET,
586
+ url: `${baseUrl}/api/v2/public/employees`,
587
+ headers: {
588
+ Authorization: `Bearer ${token}`,
589
+ 'X-WorkBuddy-Version': '2026-01',
590
+ },
591
+ });
592
+ const items = response.body?.items || [];
593
+ return {
594
+ options: items.map((item) => ({
595
+ label: item.name,
596
+ value: item.id,
597
+ })),
598
+ };
599
+ },
284
600
  }),
285
- type: pieces_framework_1.Property.Array({
601
+ type: pieces_framework_1.Property.MultiSelectDropdown({
286
602
  displayName: 'Filter by Job Type',
287
- description: 'Only trigger for specific job type IDs',
603
+ description: 'Only trigger for specific job type',
288
604
  required: false,
605
+ auth: auth_1.workbuddyAuth,
606
+ refreshers: [],
607
+ options: async ({ auth }) => {
608
+ const authValue = auth;
609
+ const token = await (0, auth_1.getAccessToken)(authValue);
610
+ const baseUrl = authValue.props.baseUrl;
611
+ const response = await pieces_common_1.httpClient.sendRequest({
612
+ method: pieces_common_1.HttpMethod.GET,
613
+ url: `${baseUrl}/api/v2/public/settings/job-types`,
614
+ headers: {
615
+ Authorization: `Bearer ${token}`,
616
+ 'X-WorkBuddy-Version': '2026-01',
617
+ },
618
+ });
619
+ const items = response.body?.items || [];
620
+ return {
621
+ options: items.map((item) => ({
622
+ label: item.name,
623
+ value: item.id,
624
+ })),
625
+ };
626
+ },
289
627
  }),
290
628
  },
291
629
  sampleData: {
292
- lead: {
293
- id: '507f1f77bcf86cd799439011',
294
- name: 'New Lead',
295
- status: 'New',
296
- source: 'website',
297
- createdAt: '2026-03-05T10:00:00.000Z',
298
- customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
299
- owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
630
+ id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
631
+ event: 'Lead Status Changed',
632
+ action: 'update',
633
+ createdAt: '2026-03-14T05:21:47.307Z',
634
+ webhookTimestamp: 1773465707307,
635
+ data: {
636
+ lead: {
637
+ id: '507f1f77bcf86cd799439011',
638
+ name: 'New Lead',
639
+ status: 'New',
640
+ source: 'website',
641
+ createdAt: '2026-03-05T10:00:00.000Z',
642
+ customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
643
+ owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
644
+ },
300
645
  },
301
646
  },
302
647
  type: pieces_framework_1.TriggerStrategy.WEBHOOK,
@@ -319,7 +664,7 @@ exports.lead_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
319
664
  filters.owner = context.propsValue.owner;
320
665
  if (context.propsValue.type?.length)
321
666
  filters.type = context.propsValue.type;
322
- // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
667
+ // Register webhook with WorkBuddy v2 API
323
668
  const response = await pieces_common_1.httpClient.sendRequest({
324
669
  method: pieces_common_1.HttpMethod.POST,
325
670
  url: `${baseUrl}/api/v2/public/webhooks`,
@@ -348,18 +693,15 @@ exports.lead_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
348
693
  const baseUrl = context.auth.props.baseUrl;
349
694
  const webhookId = await context.store.get('webhookId');
350
695
  if (webhookId) {
351
- // Pause webhook (server keeps it for potential reactivation)
696
+ // Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
352
697
  await pieces_common_1.httpClient.sendRequest({
353
- method: pieces_common_1.HttpMethod.PATCH,
698
+ method: pieces_common_1.HttpMethod.DELETE,
354
699
  url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
355
700
  headers: {
356
701
  Authorization: `Bearer ${token}`,
357
702
  'Content-Type': 'application/json',
358
703
  'X-WorkBuddy-Version': '2026-01',
359
704
  },
360
- body: {
361
- status: 'paused',
362
- },
363
705
  });
364
706
  }
365
707
  },
@@ -373,20 +715,86 @@ exports.lead_deleted_trigger = (0, pieces_framework_1.createTrigger)({
373
715
  displayName: 'Lead Deleted',
374
716
  description: 'Triggered when a lead is deleted',
375
717
  props: {
376
- customer: pieces_framework_1.Property.Array({
718
+ customer: pieces_framework_1.Property.MultiSelectDropdown({
377
719
  displayName: 'Filter by Customer',
378
- description: 'Only trigger for specific customer IDs',
720
+ description: 'Only trigger for specific customer',
379
721
  required: false,
722
+ auth: auth_1.workbuddyAuth,
723
+ refreshers: [],
724
+ options: async ({ auth }) => {
725
+ const authValue = auth;
726
+ const token = await (0, auth_1.getAccessToken)(authValue);
727
+ const baseUrl = authValue.props.baseUrl;
728
+ const response = await pieces_common_1.httpClient.sendRequest({
729
+ method: pieces_common_1.HttpMethod.GET,
730
+ url: `${baseUrl}/api/v2/public/customers`,
731
+ headers: {
732
+ Authorization: `Bearer ${token}`,
733
+ 'X-WorkBuddy-Version': '2026-01',
734
+ },
735
+ });
736
+ const items = response.body?.items || [];
737
+ return {
738
+ options: items.map((item) => ({
739
+ label: item.name,
740
+ value: item.id,
741
+ })),
742
+ };
743
+ },
380
744
  }),
381
- billingCompany: pieces_framework_1.Property.Array({
745
+ billingCompany: pieces_framework_1.Property.MultiSelectDropdown({
382
746
  displayName: 'Filter by Billing Company',
383
- description: 'Only trigger for specific billing company IDs',
747
+ description: 'Only trigger for specific billing company',
384
748
  required: false,
749
+ auth: auth_1.workbuddyAuth,
750
+ refreshers: [],
751
+ options: async ({ auth }) => {
752
+ const authValue = auth;
753
+ const token = await (0, auth_1.getAccessToken)(authValue);
754
+ const baseUrl = authValue.props.baseUrl;
755
+ const response = await pieces_common_1.httpClient.sendRequest({
756
+ method: pieces_common_1.HttpMethod.GET,
757
+ url: `${baseUrl}/api/v2/public/companies`,
758
+ headers: {
759
+ Authorization: `Bearer ${token}`,
760
+ 'X-WorkBuddy-Version': '2026-01',
761
+ },
762
+ });
763
+ const items = response.body?.items || [];
764
+ return {
765
+ options: items.map((item) => ({
766
+ label: item.name,
767
+ value: item.id,
768
+ })),
769
+ };
770
+ },
385
771
  }),
386
- tag: pieces_framework_1.Property.Array({
772
+ tag: pieces_framework_1.Property.MultiSelectDropdown({
387
773
  displayName: 'Filter by Tags',
388
- description: 'Only trigger for specific tags IDs',
774
+ description: 'Only trigger for specific tags',
389
775
  required: false,
776
+ auth: auth_1.workbuddyAuth,
777
+ refreshers: [],
778
+ options: async ({ auth }) => {
779
+ const authValue = auth;
780
+ const token = await (0, auth_1.getAccessToken)(authValue);
781
+ const baseUrl = authValue.props.baseUrl;
782
+ const response = await pieces_common_1.httpClient.sendRequest({
783
+ method: pieces_common_1.HttpMethod.GET,
784
+ url: `${baseUrl}/api/v2/public/settings/tags`,
785
+ headers: {
786
+ Authorization: `Bearer ${token}`,
787
+ 'X-WorkBuddy-Version': '2026-01',
788
+ },
789
+ });
790
+ const items = response.body?.items || [];
791
+ return {
792
+ options: items.map((item) => ({
793
+ label: item.name,
794
+ value: item.id,
795
+ })),
796
+ };
797
+ },
390
798
  }),
391
799
  leadStage: pieces_framework_1.Property.Array({
392
800
  displayName: 'Filter by Stage',
@@ -398,26 +806,77 @@ exports.lead_deleted_trigger = (0, pieces_framework_1.createTrigger)({
398
806
  description: 'Only trigger for specific source IDs',
399
807
  required: false,
400
808
  }),
401
- owner: pieces_framework_1.Property.Array({
809
+ owner: pieces_framework_1.Property.MultiSelectDropdown({
402
810
  displayName: 'Filter by Owner',
403
- description: 'Only trigger for specific owner IDs',
811
+ description: 'Only trigger for specific owner',
404
812
  required: false,
813
+ auth: auth_1.workbuddyAuth,
814
+ refreshers: [],
815
+ options: async ({ auth }) => {
816
+ const authValue = auth;
817
+ const token = await (0, auth_1.getAccessToken)(authValue);
818
+ const baseUrl = authValue.props.baseUrl;
819
+ const response = await pieces_common_1.httpClient.sendRequest({
820
+ method: pieces_common_1.HttpMethod.GET,
821
+ url: `${baseUrl}/api/v2/public/employees`,
822
+ headers: {
823
+ Authorization: `Bearer ${token}`,
824
+ 'X-WorkBuddy-Version': '2026-01',
825
+ },
826
+ });
827
+ const items = response.body?.items || [];
828
+ return {
829
+ options: items.map((item) => ({
830
+ label: item.name,
831
+ value: item.id,
832
+ })),
833
+ };
834
+ },
405
835
  }),
406
- type: pieces_framework_1.Property.Array({
836
+ type: pieces_framework_1.Property.MultiSelectDropdown({
407
837
  displayName: 'Filter by Job Type',
408
- description: 'Only trigger for specific job type IDs',
838
+ description: 'Only trigger for specific job type',
409
839
  required: false,
840
+ auth: auth_1.workbuddyAuth,
841
+ refreshers: [],
842
+ options: async ({ auth }) => {
843
+ const authValue = auth;
844
+ const token = await (0, auth_1.getAccessToken)(authValue);
845
+ const baseUrl = authValue.props.baseUrl;
846
+ const response = await pieces_common_1.httpClient.sendRequest({
847
+ method: pieces_common_1.HttpMethod.GET,
848
+ url: `${baseUrl}/api/v2/public/settings/job-types`,
849
+ headers: {
850
+ Authorization: `Bearer ${token}`,
851
+ 'X-WorkBuddy-Version': '2026-01',
852
+ },
853
+ });
854
+ const items = response.body?.items || [];
855
+ return {
856
+ options: items.map((item) => ({
857
+ label: item.name,
858
+ value: item.id,
859
+ })),
860
+ };
861
+ },
410
862
  }),
411
863
  },
412
864
  sampleData: {
413
- lead: {
414
- id: '507f1f77bcf86cd799439011',
415
- name: 'New Lead',
416
- status: 'New',
417
- source: 'website',
418
- createdAt: '2026-03-05T10:00:00.000Z',
419
- customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
420
- owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
865
+ id: 'whd_019ceacb-232b-764f-8dfd-748e1a226de2',
866
+ event: 'Lead Deleted',
867
+ action: 'remove',
868
+ createdAt: '2026-03-14T05:21:47.307Z',
869
+ webhookTimestamp: 1773465707307,
870
+ data: {
871
+ lead: {
872
+ id: '507f1f77bcf86cd799439011',
873
+ name: 'New Lead',
874
+ status: 'New',
875
+ source: 'website',
876
+ createdAt: '2026-03-05T10:00:00.000Z',
877
+ customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
878
+ owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
879
+ },
421
880
  },
422
881
  },
423
882
  type: pieces_framework_1.TriggerStrategy.WEBHOOK,
@@ -440,7 +899,7 @@ exports.lead_deleted_trigger = (0, pieces_framework_1.createTrigger)({
440
899
  filters.owner = context.propsValue.owner;
441
900
  if (context.propsValue.type?.length)
442
901
  filters.type = context.propsValue.type;
443
- // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
902
+ // Register webhook with WorkBuddy v2 API
444
903
  const response = await pieces_common_1.httpClient.sendRequest({
445
904
  method: pieces_common_1.HttpMethod.POST,
446
905
  url: `${baseUrl}/api/v2/public/webhooks`,
@@ -469,18 +928,15 @@ exports.lead_deleted_trigger = (0, pieces_framework_1.createTrigger)({
469
928
  const baseUrl = context.auth.props.baseUrl;
470
929
  const webhookId = await context.store.get('webhookId');
471
930
  if (webhookId) {
472
- // Pause webhook (server keeps it for potential reactivation)
931
+ // Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
473
932
  await pieces_common_1.httpClient.sendRequest({
474
- method: pieces_common_1.HttpMethod.PATCH,
933
+ method: pieces_common_1.HttpMethod.DELETE,
475
934
  url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
476
935
  headers: {
477
936
  Authorization: `Bearer ${token}`,
478
937
  'Content-Type': 'application/json',
479
938
  'X-WorkBuddy-Version': '2026-01',
480
939
  },
481
- body: {
482
- status: 'paused',
483
- },
484
940
  });
485
941
  }
486
942
  },