@workbuddy/piece-workbuddy-edge 1.0.0

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 (222) hide show
  1. package/package.json +24 -0
  2. package/src/index.d.ts +8 -0
  3. package/src/index.d.ts.map +1 -0
  4. package/src/index.js +199 -0
  5. package/src/index.js.map +1 -0
  6. package/src/index.ts +354 -0
  7. package/src/lib/actions/attachments.d.ts +17 -0
  8. package/src/lib/actions/attachments.d.ts.map +1 -0
  9. package/src/lib/actions/attachments.js +79 -0
  10. package/src/lib/actions/attachments.js.map +1 -0
  11. package/src/lib/actions/attachments.ts +85 -0
  12. package/src/lib/actions/crm->-companies.d.ts +16 -0
  13. package/src/lib/actions/crm->-companies.d.ts.map +1 -0
  14. package/src/lib/actions/crm->-companies.js +77 -0
  15. package/src/lib/actions/crm->-companies.js.map +1 -0
  16. package/src/lib/actions/crm->-companies.ts +84 -0
  17. package/src/lib/actions/crm->-contacts.d.ts +16 -0
  18. package/src/lib/actions/crm->-contacts.d.ts.map +1 -0
  19. package/src/lib/actions/crm->-contacts.js +77 -0
  20. package/src/lib/actions/crm->-contacts.js.map +1 -0
  21. package/src/lib/actions/crm->-contacts.ts +84 -0
  22. package/src/lib/actions/crm->-contractors.d.ts +16 -0
  23. package/src/lib/actions/crm->-contractors.d.ts.map +1 -0
  24. package/src/lib/actions/crm->-contractors.js +77 -0
  25. package/src/lib/actions/crm->-contractors.js.map +1 -0
  26. package/src/lib/actions/crm->-contractors.ts +84 -0
  27. package/src/lib/actions/crm->-customers.d.ts +35 -0
  28. package/src/lib/actions/crm->-customers.d.ts.map +1 -0
  29. package/src/lib/actions/crm->-customers.js +180 -0
  30. package/src/lib/actions/crm->-customers.js.map +1 -0
  31. package/src/lib/actions/crm->-customers.ts +203 -0
  32. package/src/lib/actions/crm->-employees.d.ts +16 -0
  33. package/src/lib/actions/crm->-employees.d.ts.map +1 -0
  34. package/src/lib/actions/crm->-employees.js +77 -0
  35. package/src/lib/actions/crm->-employees.js.map +1 -0
  36. package/src/lib/actions/crm->-employees.ts +84 -0
  37. package/src/lib/actions/crm->-external-users.d.ts +16 -0
  38. package/src/lib/actions/crm->-external-users.d.ts.map +1 -0
  39. package/src/lib/actions/crm->-external-users.js +77 -0
  40. package/src/lib/actions/crm->-external-users.js.map +1 -0
  41. package/src/lib/actions/crm->-external-users.ts +84 -0
  42. package/src/lib/actions/crm->-invites.d.ts +16 -0
  43. package/src/lib/actions/crm->-invites.d.ts.map +1 -0
  44. package/src/lib/actions/crm->-invites.js +77 -0
  45. package/src/lib/actions/crm->-invites.js.map +1 -0
  46. package/src/lib/actions/crm->-invites.ts +84 -0
  47. package/src/lib/actions/crm->-sites.d.ts +17 -0
  48. package/src/lib/actions/crm->-sites.d.ts.map +1 -0
  49. package/src/lib/actions/crm->-sites.js +86 -0
  50. package/src/lib/actions/crm->-sites.js.map +1 -0
  51. package/src/lib/actions/crm->-sites.ts +95 -0
  52. package/src/lib/actions/crm->-suppliers.d.ts +16 -0
  53. package/src/lib/actions/crm->-suppliers.d.ts.map +1 -0
  54. package/src/lib/actions/crm->-suppliers.js +77 -0
  55. package/src/lib/actions/crm->-suppliers.js.map +1 -0
  56. package/src/lib/actions/crm->-suppliers.ts +84 -0
  57. package/src/lib/actions/data-export.d.ts +11 -0
  58. package/src/lib/actions/data-export.d.ts.map +1 -0
  59. package/src/lib/actions/data-export.js +78 -0
  60. package/src/lib/actions/data-export.js.map +1 -0
  61. package/src/lib/actions/data-export.ts +82 -0
  62. package/src/lib/actions/index.d.ts +25 -0
  63. package/src/lib/actions/index.d.ts.map +1 -0
  64. package/src/lib/actions/index.js +41 -0
  65. package/src/lib/actions/index.js.map +1 -0
  66. package/src/lib/actions/index.ts +24 -0
  67. package/src/lib/actions/jobs->-activities.d.ts +87 -0
  68. package/src/lib/actions/jobs->-activities.d.ts.map +1 -0
  69. package/src/lib/actions/jobs->-activities.js +445 -0
  70. package/src/lib/actions/jobs->-activities.js.map +1 -0
  71. package/src/lib/actions/jobs->-activities.ts +473 -0
  72. package/src/lib/actions/jobs->-contacts.d.ts +31 -0
  73. package/src/lib/actions/jobs->-contacts.d.ts.map +1 -0
  74. package/src/lib/actions/jobs->-contacts.js +129 -0
  75. package/src/lib/actions/jobs->-contacts.js.map +1 -0
  76. package/src/lib/actions/jobs->-contacts.ts +141 -0
  77. package/src/lib/actions/jobs->-files.d.ts +31 -0
  78. package/src/lib/actions/jobs->-files.d.ts.map +1 -0
  79. package/src/lib/actions/jobs->-files.js +129 -0
  80. package/src/lib/actions/jobs->-files.js.map +1 -0
  81. package/src/lib/actions/jobs->-files.ts +141 -0
  82. package/src/lib/actions/jobs->-tasks.d.ts +75 -0
  83. package/src/lib/actions/jobs->-tasks.d.ts.map +1 -0
  84. package/src/lib/actions/jobs->-tasks.js +395 -0
  85. package/src/lib/actions/jobs->-tasks.js.map +1 -0
  86. package/src/lib/actions/jobs->-tasks.ts +417 -0
  87. package/src/lib/actions/jobs.d.ts +148 -0
  88. package/src/lib/actions/jobs.d.ts.map +1 -0
  89. package/src/lib/actions/jobs.js +800 -0
  90. package/src/lib/actions/jobs.js.map +1 -0
  91. package/src/lib/actions/jobs.ts +846 -0
  92. package/src/lib/actions/mcp-context.d.ts +16 -0
  93. package/src/lib/actions/mcp-context.d.ts.map +1 -0
  94. package/src/lib/actions/mcp-context.js +82 -0
  95. package/src/lib/actions/mcp-context.js.map +1 -0
  96. package/src/lib/actions/mcp-context.ts +86 -0
  97. package/src/lib/actions/mcp.d.ts +21 -0
  98. package/src/lib/actions/mcp.d.ts.map +1 -0
  99. package/src/lib/actions/mcp.js +104 -0
  100. package/src/lib/actions/mcp.js.map +1 -0
  101. package/src/lib/actions/mcp.ts +112 -0
  102. package/src/lib/actions/settings.d.ts +57 -0
  103. package/src/lib/actions/settings.d.ts.map +1 -0
  104. package/src/lib/actions/settings.js +257 -0
  105. package/src/lib/actions/settings.js.map +1 -0
  106. package/src/lib/actions/settings.ts +301 -0
  107. package/src/lib/actions/stages->-activities.d.ts +87 -0
  108. package/src/lib/actions/stages->-activities.d.ts.map +1 -0
  109. package/src/lib/actions/stages->-activities.js +445 -0
  110. package/src/lib/actions/stages->-activities.js.map +1 -0
  111. package/src/lib/actions/stages->-activities.ts +473 -0
  112. package/src/lib/actions/stages->-files.d.ts +31 -0
  113. package/src/lib/actions/stages->-files.d.ts.map +1 -0
  114. package/src/lib/actions/stages->-files.js +129 -0
  115. package/src/lib/actions/stages->-files.js.map +1 -0
  116. package/src/lib/actions/stages->-files.ts +141 -0
  117. package/src/lib/actions/stages->-resources.d.ts +58 -0
  118. package/src/lib/actions/stages->-resources.d.ts.map +1 -0
  119. package/src/lib/actions/stages->-resources.js +279 -0
  120. package/src/lib/actions/stages->-resources.js.map +1 -0
  121. package/src/lib/actions/stages->-resources.ts +302 -0
  122. package/src/lib/actions/stages->-tasks.d.ts +77 -0
  123. package/src/lib/actions/stages->-tasks.d.ts.map +1 -0
  124. package/src/lib/actions/stages->-tasks.js +405 -0
  125. package/src/lib/actions/stages->-tasks.js.map +1 -0
  126. package/src/lib/actions/stages->-tasks.ts +427 -0
  127. package/src/lib/actions/stages.d.ts +85 -0
  128. package/src/lib/actions/stages.d.ts.map +1 -0
  129. package/src/lib/actions/stages.js +417 -0
  130. package/src/lib/actions/stages.js.map +1 -0
  131. package/src/lib/actions/stages.ts +452 -0
  132. package/src/lib/actions/webhooks-v2.d.ts +72 -0
  133. package/src/lib/actions/webhooks-v2.d.ts.map +1 -0
  134. package/src/lib/actions/webhooks-v2.js +297 -0
  135. package/src/lib/actions/webhooks-v2.js.map +1 -0
  136. package/src/lib/actions/webhooks-v2.ts +337 -0
  137. package/src/lib/actions/webhooks.d.ts +48 -0
  138. package/src/lib/actions/webhooks.d.ts.map +1 -0
  139. package/src/lib/actions/webhooks.js +292 -0
  140. package/src/lib/actions/webhooks.js.map +1 -0
  141. package/src/lib/actions/webhooks.ts +318 -0
  142. package/src/lib/auth.d.ts +18 -0
  143. package/src/lib/auth.d.ts.map +1 -0
  144. package/src/lib/auth.js +77 -0
  145. package/src/lib/auth.js.map +1 -0
  146. package/src/lib/auth.ts +84 -0
  147. package/src/lib/common/index.d.ts +11 -0
  148. package/src/lib/common/index.d.ts.map +1 -0
  149. package/src/lib/common/index.js +8 -0
  150. package/src/lib/common/index.js.map +1 -0
  151. package/src/lib/common/index.ts +12 -0
  152. package/src/lib/triggers/activity.d.ts +77 -0
  153. package/src/lib/triggers/activity.d.ts.map +1 -0
  154. package/src/lib/triggers/activity.js +241 -0
  155. package/src/lib/triggers/activity.js.map +1 -0
  156. package/src/lib/triggers/activity.ts +261 -0
  157. package/src/lib/triggers/allocation.d.ts +53 -0
  158. package/src/lib/triggers/allocation.d.ts.map +1 -0
  159. package/src/lib/triggers/allocation.js +181 -0
  160. package/src/lib/triggers/allocation.js.map +1 -0
  161. package/src/lib/triggers/allocation.ts +198 -0
  162. package/src/lib/triggers/bill.d.ts +102 -0
  163. package/src/lib/triggers/bill.d.ts.map +1 -0
  164. package/src/lib/triggers/bill.js +327 -0
  165. package/src/lib/triggers/bill.js.map +1 -0
  166. package/src/lib/triggers/bill.ts +355 -0
  167. package/src/lib/triggers/form.d.ts +19 -0
  168. package/src/lib/triggers/form.d.ts.map +1 -0
  169. package/src/lib/triggers/form.js +65 -0
  170. package/src/lib/triggers/form.js.map +1 -0
  171. package/src/lib/triggers/form.ts +68 -0
  172. package/src/lib/triggers/index.d.ts +10 -0
  173. package/src/lib/triggers/index.d.ts.map +1 -0
  174. package/src/lib/triggers/index.js +26 -0
  175. package/src/lib/triggers/index.js.map +1 -0
  176. package/src/lib/triggers/index.ts +9 -0
  177. package/src/lib/triggers/invoice.d.ts +102 -0
  178. package/src/lib/triggers/invoice.d.ts.map +1 -0
  179. package/src/lib/triggers/invoice.js +327 -0
  180. package/src/lib/triggers/invoice.js.map +1 -0
  181. package/src/lib/triggers/invoice.ts +355 -0
  182. package/src/lib/triggers/item.d.ts +53 -0
  183. package/src/lib/triggers/item.d.ts.map +1 -0
  184. package/src/lib/triggers/item.js +181 -0
  185. package/src/lib/triggers/item.js.map +1 -0
  186. package/src/lib/triggers/item.ts +198 -0
  187. package/src/lib/triggers/job.d.ts +102 -0
  188. package/src/lib/triggers/job.d.ts.map +1 -0
  189. package/src/lib/triggers/job.js +419 -0
  190. package/src/lib/triggers/job.js.map +1 -0
  191. package/src/lib/triggers/job.ts +447 -0
  192. package/src/lib/triggers/lead.d.ts +102 -0
  193. package/src/lib/triggers/lead.d.ts.map +1 -0
  194. package/src/lib/triggers/lead.js +319 -0
  195. package/src/lib/triggers/lead.js.map +1 -0
  196. package/src/lib/triggers/lead.ts +347 -0
  197. package/src/lib/triggers/opportunity.d.ts +102 -0
  198. package/src/lib/triggers/opportunity.d.ts.map +1 -0
  199. package/src/lib/triggers/opportunity.js +319 -0
  200. package/src/lib/triggers/opportunity.js.map +1 -0
  201. package/src/lib/triggers/opportunity.ts +347 -0
  202. package/src/lib/triggers/quote.d.ts +102 -0
  203. package/src/lib/triggers/quote.d.ts.map +1 -0
  204. package/src/lib/triggers/quote.js +327 -0
  205. package/src/lib/triggers/quote.js.map +1 -0
  206. package/src/lib/triggers/quote.ts +355 -0
  207. package/src/lib/triggers/site.d.ts +19 -0
  208. package/src/lib/triggers/site.d.ts.map +1 -0
  209. package/src/lib/triggers/site.js +65 -0
  210. package/src/lib/triggers/site.js.map +1 -0
  211. package/src/lib/triggers/site.ts +68 -0
  212. package/src/lib/triggers/stage.d.ts +102 -0
  213. package/src/lib/triggers/stage.d.ts.map +1 -0
  214. package/src/lib/triggers/stage.js +487 -0
  215. package/src/lib/triggers/stage.js.map +1 -0
  216. package/src/lib/triggers/stage.ts +515 -0
  217. package/src/lib/triggers/task.d.ts +102 -0
  218. package/src/lib/triggers/task.d.ts.map +1 -0
  219. package/src/lib/triggers/task.js +323 -0
  220. package/src/lib/triggers/task.js.map +1 -0
  221. package/src/lib/triggers/task.ts +351 -0
  222. package/src/lib/workbuddy.svg +5 -0
@@ -0,0 +1,515 @@
1
+ import { createTrigger, TriggerStrategy, Property } from '@activepieces/pieces-framework';
2
+ import { HttpMethod, httpClient } from '@activepieces/pieces-common';
3
+ import { workbuddyAuth, getAccessToken } from '../auth';
4
+
5
+ export const stage_created_trigger = createTrigger({
6
+ name: 'StageCreated',
7
+ auth: workbuddyAuth,
8
+ displayName: 'Stage Created',
9
+ description: 'Triggered when a new stage is created',
10
+ props: {
11
+ filters: Property.Json({
12
+ displayName: 'Filters',
13
+ description:
14
+ 'Optional webhook filters object. Discover allowed fields with GET /webhooks/entities/:entity/filters.',
15
+ required: false,
16
+ defaultValue: {},
17
+ }),
18
+ },
19
+ sampleData: {
20
+ workOrder: {
21
+ id: '507f1f77bcf86cd799439011',
22
+ name: 'Foundation Work',
23
+ workOrderNumber: 'J10001-5039',
24
+ jobNumber: 'J10001',
25
+ description: 'Sample stage description',
26
+ status: 'In Progress',
27
+ previousStatus: 'Open',
28
+ createdAt: '2026-03-05T10:00:00.000Z',
29
+ updatedAt: '2026-03-05T10:00:00.000Z',
30
+ startDate: '2026-03-05T08:00:00.000Z',
31
+ dueDate: '2026-03-10T17:00:00.000Z',
32
+ completedDate: null,
33
+ finalisedDate: null,
34
+ customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
35
+ owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
36
+ stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
37
+ technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
38
+ subcontractor: null,
39
+ priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
40
+ site: {
41
+ id: '507f1f77bcf86cd799439011',
42
+ name: 'Main Office',
43
+ address: {
44
+ street: '123 Main St',
45
+ suburb: 'Sydney',
46
+ state: 'NSW',
47
+ postcode: '2000',
48
+ country: 'Australia',
49
+ formatted: '123 Main St, Sydney NSW 2000',
50
+ },
51
+ },
52
+ workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
53
+ labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
54
+ zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
55
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
56
+ },
57
+ technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
58
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
59
+ site: {
60
+ id: '507f1f77bcf86cd799439011',
61
+ name: 'Main Office',
62
+ address: {
63
+ street: '123 Main St',
64
+ suburb: 'Sydney',
65
+ state: 'NSW',
66
+ postcode: '2000',
67
+ country: 'Australia',
68
+ formatted: '123 Main St, Sydney NSW 2000',
69
+ },
70
+ },
71
+ },
72
+ type: TriggerStrategy.WEBHOOK,
73
+
74
+ async onEnable(context) {
75
+ const token = await getAccessToken(context.auth);
76
+ const baseUrl = context.auth.props.baseUrl;
77
+
78
+ // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
79
+ const response = await httpClient.sendRequest<{ data: { id: string } }>({
80
+ method: HttpMethod.POST,
81
+ url: `${baseUrl}/api/v2/public/webhooks`,
82
+ headers: {
83
+ Authorization: `Bearer ${token}`,
84
+ 'Content-Type': 'application/json',
85
+ 'X-WorkBuddy-Version': '2026-01',
86
+ },
87
+ body: {
88
+ name: `Activepieces: Stage Created`,
89
+ url: context.webhookUrl,
90
+ entity: 'stage',
91
+ events: ['Stage Created'],
92
+ ...(context.propsValue.filters && Object.keys(context.propsValue.filters).length > 0
93
+ ? { filters: context.propsValue.filters }
94
+ : {}),
95
+ workflow: {
96
+ platform: 'activepieces',
97
+ integrationId: context.webhookUrl,
98
+ },
99
+ },
100
+ });
101
+
102
+ // Store webhook ID for cleanup
103
+ await context.store.put('webhookId', response.body.data.id);
104
+ },
105
+
106
+ async onDisable(context) {
107
+ const token = await getAccessToken(context.auth);
108
+ const baseUrl = context.auth.props.baseUrl;
109
+ const webhookId = await context.store.get<string>('webhookId');
110
+
111
+ if (webhookId) {
112
+ // Pause webhook (server keeps it for potential reactivation)
113
+ await httpClient.sendRequest({
114
+ method: HttpMethod.PATCH,
115
+ url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
116
+ headers: {
117
+ Authorization: `Bearer ${token}`,
118
+ 'Content-Type': 'application/json',
119
+ 'X-WorkBuddy-Version': '2026-01',
120
+ },
121
+ body: {
122
+ status: 'paused',
123
+ },
124
+ });
125
+ }
126
+ },
127
+
128
+ async run(context) {
129
+ return [context.payload.body];
130
+ },
131
+ });
132
+
133
+ export const stage_updated_trigger = createTrigger({
134
+ name: 'StageUpdated',
135
+ auth: workbuddyAuth,
136
+ displayName: 'Stage Updated',
137
+ description: 'Triggered when a stage is updated',
138
+ props: {
139
+ filters: Property.Json({
140
+ displayName: 'Filters',
141
+ description:
142
+ 'Optional webhook filters object. Discover allowed fields with GET /webhooks/entities/:entity/filters.',
143
+ required: false,
144
+ defaultValue: {},
145
+ }),
146
+ },
147
+ sampleData: {
148
+ workOrder: {
149
+ id: '507f1f77bcf86cd799439011',
150
+ name: 'Foundation Work',
151
+ workOrderNumber: 'J10001-5039',
152
+ jobNumber: 'J10001',
153
+ description: 'Sample stage description',
154
+ status: 'In Progress',
155
+ previousStatus: 'Open',
156
+ createdAt: '2026-03-05T10:00:00.000Z',
157
+ updatedAt: '2026-03-05T10:00:00.000Z',
158
+ startDate: '2026-03-05T08:00:00.000Z',
159
+ dueDate: '2026-03-10T17:00:00.000Z',
160
+ completedDate: null,
161
+ finalisedDate: null,
162
+ customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
163
+ owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
164
+ stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
165
+ technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
166
+ subcontractor: null,
167
+ priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
168
+ site: {
169
+ id: '507f1f77bcf86cd799439011',
170
+ name: 'Main Office',
171
+ address: {
172
+ street: '123 Main St',
173
+ suburb: 'Sydney',
174
+ state: 'NSW',
175
+ postcode: '2000',
176
+ country: 'Australia',
177
+ formatted: '123 Main St, Sydney NSW 2000',
178
+ },
179
+ },
180
+ workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
181
+ labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
182
+ zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
183
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
184
+ },
185
+ technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
186
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
187
+ site: {
188
+ id: '507f1f77bcf86cd799439011',
189
+ name: 'Main Office',
190
+ address: {
191
+ street: '123 Main St',
192
+ suburb: 'Sydney',
193
+ state: 'NSW',
194
+ postcode: '2000',
195
+ country: 'Australia',
196
+ formatted: '123 Main St, Sydney NSW 2000',
197
+ },
198
+ },
199
+ },
200
+ type: TriggerStrategy.WEBHOOK,
201
+
202
+ async onEnable(context) {
203
+ const token = await getAccessToken(context.auth);
204
+ const baseUrl = context.auth.props.baseUrl;
205
+
206
+ // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
207
+ const response = await httpClient.sendRequest<{ data: { id: string } }>({
208
+ method: HttpMethod.POST,
209
+ url: `${baseUrl}/api/v2/public/webhooks`,
210
+ headers: {
211
+ Authorization: `Bearer ${token}`,
212
+ 'Content-Type': 'application/json',
213
+ 'X-WorkBuddy-Version': '2026-01',
214
+ },
215
+ body: {
216
+ name: `Activepieces: Stage Updated`,
217
+ url: context.webhookUrl,
218
+ entity: 'stage',
219
+ events: ['Stage Updated'],
220
+ ...(context.propsValue.filters && Object.keys(context.propsValue.filters).length > 0
221
+ ? { filters: context.propsValue.filters }
222
+ : {}),
223
+ workflow: {
224
+ platform: 'activepieces',
225
+ integrationId: context.webhookUrl,
226
+ },
227
+ },
228
+ });
229
+
230
+ // Store webhook ID for cleanup
231
+ await context.store.put('webhookId', response.body.data.id);
232
+ },
233
+
234
+ async onDisable(context) {
235
+ const token = await getAccessToken(context.auth);
236
+ const baseUrl = context.auth.props.baseUrl;
237
+ const webhookId = await context.store.get<string>('webhookId');
238
+
239
+ if (webhookId) {
240
+ // Pause webhook (server keeps it for potential reactivation)
241
+ await httpClient.sendRequest({
242
+ method: HttpMethod.PATCH,
243
+ url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
244
+ headers: {
245
+ Authorization: `Bearer ${token}`,
246
+ 'Content-Type': 'application/json',
247
+ 'X-WorkBuddy-Version': '2026-01',
248
+ },
249
+ body: {
250
+ status: 'paused',
251
+ },
252
+ });
253
+ }
254
+ },
255
+
256
+ async run(context) {
257
+ return [context.payload.body];
258
+ },
259
+ });
260
+
261
+ export const stage_status_changed_trigger = createTrigger({
262
+ name: 'StageStatusChanged',
263
+ auth: workbuddyAuth,
264
+ displayName: 'Stage Status Changed',
265
+ description: 'Triggered when a stage status changes',
266
+ props: {
267
+ filters: Property.Json({
268
+ displayName: 'Filters',
269
+ description:
270
+ 'Optional webhook filters object. Discover allowed fields with GET /webhooks/entities/:entity/filters.',
271
+ required: false,
272
+ defaultValue: {},
273
+ }),
274
+ },
275
+ sampleData: {
276
+ workOrder: {
277
+ id: '507f1f77bcf86cd799439011',
278
+ name: 'Foundation Work',
279
+ workOrderNumber: 'J10001-5039',
280
+ jobNumber: 'J10001',
281
+ description: 'Sample stage description',
282
+ status: 'In Progress',
283
+ previousStatus: 'Open',
284
+ createdAt: '2026-03-05T10:00:00.000Z',
285
+ updatedAt: '2026-03-05T10:00:00.000Z',
286
+ startDate: '2026-03-05T08:00:00.000Z',
287
+ dueDate: '2026-03-10T17:00:00.000Z',
288
+ completedDate: null,
289
+ finalisedDate: null,
290
+ customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
291
+ owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
292
+ stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
293
+ technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
294
+ subcontractor: null,
295
+ priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
296
+ site: {
297
+ id: '507f1f77bcf86cd799439011',
298
+ name: 'Main Office',
299
+ address: {
300
+ street: '123 Main St',
301
+ suburb: 'Sydney',
302
+ state: 'NSW',
303
+ postcode: '2000',
304
+ country: 'Australia',
305
+ formatted: '123 Main St, Sydney NSW 2000',
306
+ },
307
+ },
308
+ workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
309
+ labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
310
+ zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
311
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
312
+ },
313
+ technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
314
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
315
+ site: {
316
+ id: '507f1f77bcf86cd799439011',
317
+ name: 'Main Office',
318
+ address: {
319
+ street: '123 Main St',
320
+ suburb: 'Sydney',
321
+ state: 'NSW',
322
+ postcode: '2000',
323
+ country: 'Australia',
324
+ formatted: '123 Main St, Sydney NSW 2000',
325
+ },
326
+ },
327
+ },
328
+ type: TriggerStrategy.WEBHOOK,
329
+
330
+ async onEnable(context) {
331
+ const token = await getAccessToken(context.auth);
332
+ const baseUrl = context.auth.props.baseUrl;
333
+
334
+ // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
335
+ const response = await httpClient.sendRequest<{ data: { id: string } }>({
336
+ method: HttpMethod.POST,
337
+ url: `${baseUrl}/api/v2/public/webhooks`,
338
+ headers: {
339
+ Authorization: `Bearer ${token}`,
340
+ 'Content-Type': 'application/json',
341
+ 'X-WorkBuddy-Version': '2026-01',
342
+ },
343
+ body: {
344
+ name: `Activepieces: Stage Status Changed`,
345
+ url: context.webhookUrl,
346
+ entity: 'stage',
347
+ events: ['Stage Status Changed'],
348
+ ...(context.propsValue.filters && Object.keys(context.propsValue.filters).length > 0
349
+ ? { filters: context.propsValue.filters }
350
+ : {}),
351
+ workflow: {
352
+ platform: 'activepieces',
353
+ integrationId: context.webhookUrl,
354
+ },
355
+ },
356
+ });
357
+
358
+ // Store webhook ID for cleanup
359
+ await context.store.put('webhookId', response.body.data.id);
360
+ },
361
+
362
+ async onDisable(context) {
363
+ const token = await getAccessToken(context.auth);
364
+ const baseUrl = context.auth.props.baseUrl;
365
+ const webhookId = await context.store.get<string>('webhookId');
366
+
367
+ if (webhookId) {
368
+ // Pause webhook (server keeps it for potential reactivation)
369
+ await httpClient.sendRequest({
370
+ method: HttpMethod.PATCH,
371
+ url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
372
+ headers: {
373
+ Authorization: `Bearer ${token}`,
374
+ 'Content-Type': 'application/json',
375
+ 'X-WorkBuddy-Version': '2026-01',
376
+ },
377
+ body: {
378
+ status: 'paused',
379
+ },
380
+ });
381
+ }
382
+ },
383
+
384
+ async run(context) {
385
+ return [context.payload.body];
386
+ },
387
+ });
388
+
389
+ export const stage_deleted_trigger = createTrigger({
390
+ name: 'StageDeleted',
391
+ auth: workbuddyAuth,
392
+ displayName: 'Stage Deleted',
393
+ description: 'Triggered when a stage is deleted',
394
+ props: {
395
+ filters: Property.Json({
396
+ displayName: 'Filters',
397
+ description:
398
+ 'Optional webhook filters object. Discover allowed fields with GET /webhooks/entities/:entity/filters.',
399
+ required: false,
400
+ defaultValue: {},
401
+ }),
402
+ },
403
+ sampleData: {
404
+ workOrder: {
405
+ id: '507f1f77bcf86cd799439011',
406
+ name: 'Foundation Work',
407
+ workOrderNumber: 'J10001-5039',
408
+ jobNumber: 'J10001',
409
+ description: 'Sample stage description',
410
+ status: 'In Progress',
411
+ previousStatus: 'Open',
412
+ createdAt: '2026-03-05T10:00:00.000Z',
413
+ updatedAt: '2026-03-05T10:00:00.000Z',
414
+ startDate: '2026-03-05T08:00:00.000Z',
415
+ dueDate: '2026-03-10T17:00:00.000Z',
416
+ completedDate: null,
417
+ finalisedDate: null,
418
+ customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
419
+ owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
420
+ stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
421
+ technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
422
+ subcontractor: null,
423
+ priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
424
+ site: {
425
+ id: '507f1f77bcf86cd799439011',
426
+ name: 'Main Office',
427
+ address: {
428
+ street: '123 Main St',
429
+ suburb: 'Sydney',
430
+ state: 'NSW',
431
+ postcode: '2000',
432
+ country: 'Australia',
433
+ formatted: '123 Main St, Sydney NSW 2000',
434
+ },
435
+ },
436
+ workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
437
+ labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
438
+ zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
439
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
440
+ },
441
+ technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
442
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
443
+ site: {
444
+ id: '507f1f77bcf86cd799439011',
445
+ name: 'Main Office',
446
+ address: {
447
+ street: '123 Main St',
448
+ suburb: 'Sydney',
449
+ state: 'NSW',
450
+ postcode: '2000',
451
+ country: 'Australia',
452
+ formatted: '123 Main St, Sydney NSW 2000',
453
+ },
454
+ },
455
+ },
456
+ type: TriggerStrategy.WEBHOOK,
457
+
458
+ async onEnable(context) {
459
+ const token = await getAccessToken(context.auth);
460
+ const baseUrl = context.auth.props.baseUrl;
461
+
462
+ // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
463
+ const response = await httpClient.sendRequest<{ data: { id: string } }>({
464
+ method: HttpMethod.POST,
465
+ url: `${baseUrl}/api/v2/public/webhooks`,
466
+ headers: {
467
+ Authorization: `Bearer ${token}`,
468
+ 'Content-Type': 'application/json',
469
+ 'X-WorkBuddy-Version': '2026-01',
470
+ },
471
+ body: {
472
+ name: `Activepieces: Stage Deleted`,
473
+ url: context.webhookUrl,
474
+ entity: 'stage',
475
+ events: ['Stage Deleted'],
476
+ ...(context.propsValue.filters && Object.keys(context.propsValue.filters).length > 0
477
+ ? { filters: context.propsValue.filters }
478
+ : {}),
479
+ workflow: {
480
+ platform: 'activepieces',
481
+ integrationId: context.webhookUrl,
482
+ },
483
+ },
484
+ });
485
+
486
+ // Store webhook ID for cleanup
487
+ await context.store.put('webhookId', response.body.data.id);
488
+ },
489
+
490
+ async onDisable(context) {
491
+ const token = await getAccessToken(context.auth);
492
+ const baseUrl = context.auth.props.baseUrl;
493
+ const webhookId = await context.store.get<string>('webhookId');
494
+
495
+ if (webhookId) {
496
+ // Pause webhook (server keeps it for potential reactivation)
497
+ await httpClient.sendRequest({
498
+ method: HttpMethod.PATCH,
499
+ url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
500
+ headers: {
501
+ Authorization: `Bearer ${token}`,
502
+ 'Content-Type': 'application/json',
503
+ 'X-WorkBuddy-Version': '2026-01',
504
+ },
505
+ body: {
506
+ status: 'paused',
507
+ },
508
+ });
509
+ }
510
+ },
511
+
512
+ async run(context) {
513
+ return [context.payload.body];
514
+ },
515
+ });
@@ -0,0 +1,102 @@
1
+ import { TriggerStrategy } from '@activepieces/pieces-framework';
2
+ export declare const task_created_trigger: import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.WEBHOOK, import("@activepieces/pieces-framework").CustomAuthProperty<{
3
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
4
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
5
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
6
+ }>, {
7
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
8
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.POLLING, import("@activepieces/pieces-framework").CustomAuthProperty<{
9
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
10
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
11
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
12
+ }>, {
13
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
14
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.MANUAL, import("@activepieces/pieces-framework").CustomAuthProperty<{
15
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
16
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
17
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
18
+ }>, {
19
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
20
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.APP_WEBHOOK, import("@activepieces/pieces-framework").CustomAuthProperty<{
21
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
22
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
23
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
24
+ }>, {
25
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
26
+ }>;
27
+ export declare const task_updated_trigger: import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.WEBHOOK, import("@activepieces/pieces-framework").CustomAuthProperty<{
28
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
29
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
30
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
31
+ }>, {
32
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
33
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.POLLING, import("@activepieces/pieces-framework").CustomAuthProperty<{
34
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
35
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
36
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
37
+ }>, {
38
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
39
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.MANUAL, import("@activepieces/pieces-framework").CustomAuthProperty<{
40
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
41
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
42
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
43
+ }>, {
44
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
45
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.APP_WEBHOOK, import("@activepieces/pieces-framework").CustomAuthProperty<{
46
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
47
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
48
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
49
+ }>, {
50
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
51
+ }>;
52
+ export declare const task_status_changed_trigger: import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.WEBHOOK, import("@activepieces/pieces-framework").CustomAuthProperty<{
53
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
54
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
55
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
56
+ }>, {
57
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
58
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.POLLING, import("@activepieces/pieces-framework").CustomAuthProperty<{
59
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
60
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
61
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
62
+ }>, {
63
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
64
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.MANUAL, import("@activepieces/pieces-framework").CustomAuthProperty<{
65
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
66
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
67
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
68
+ }>, {
69
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
70
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.APP_WEBHOOK, import("@activepieces/pieces-framework").CustomAuthProperty<{
71
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
72
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
73
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
74
+ }>, {
75
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
76
+ }>;
77
+ export declare const task_deleted_trigger: import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.WEBHOOK, import("@activepieces/pieces-framework").CustomAuthProperty<{
78
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
79
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
80
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
81
+ }>, {
82
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
83
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.POLLING, import("@activepieces/pieces-framework").CustomAuthProperty<{
84
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
85
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
86
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
87
+ }>, {
88
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
89
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.MANUAL, import("@activepieces/pieces-framework").CustomAuthProperty<{
90
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
91
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
92
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
93
+ }>, {
94
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
95
+ }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.APP_WEBHOOK, import("@activepieces/pieces-framework").CustomAuthProperty<{
96
+ baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
97
+ clientId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
98
+ clientSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
99
+ }>, {
100
+ filters: import("@activepieces/pieces-framework").JsonProperty<false>;
101
+ }>;
102
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,eAAe,EAAY,MAAM,gCAAgC,CAAC;AAI1F,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;EAqF/B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;EAqF/B,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;EAqFtC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;EAqF/B,CAAC"}