@workbuddy/piece-workbuddy-edge 1.0.10 → 1.0.11

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 (37) hide show
  1. package/package.json +1 -1
  2. package/src/lib/triggers/activity.d.ts.map +1 -1
  3. package/src/lib/triggers/activity.js +54 -42
  4. package/src/lib/triggers/activity.js.map +1 -1
  5. package/src/lib/triggers/activity.ts +54 -42
  6. package/src/lib/triggers/bill.d.ts.map +1 -1
  7. package/src/lib/triggers/bill.js +80 -64
  8. package/src/lib/triggers/bill.js.map +1 -1
  9. package/src/lib/triggers/bill.ts +80 -64
  10. package/src/lib/triggers/invoice.d.ts.map +1 -1
  11. package/src/lib/triggers/invoice.js +80 -64
  12. package/src/lib/triggers/invoice.js.map +1 -1
  13. package/src/lib/triggers/invoice.ts +80 -64
  14. package/src/lib/triggers/job.d.ts.map +1 -1
  15. package/src/lib/triggers/job.js +160 -144
  16. package/src/lib/triggers/job.js.map +1 -1
  17. package/src/lib/triggers/job.ts +160 -144
  18. package/src/lib/triggers/lead.d.ts.map +1 -1
  19. package/src/lib/triggers/lead.js +72 -56
  20. package/src/lib/triggers/lead.js.map +1 -1
  21. package/src/lib/triggers/lead.ts +72 -56
  22. package/src/lib/triggers/opportunity.d.ts.map +1 -1
  23. package/src/lib/triggers/opportunity.js +72 -56
  24. package/src/lib/triggers/opportunity.js.map +1 -1
  25. package/src/lib/triggers/opportunity.ts +72 -56
  26. package/src/lib/triggers/quote.d.ts.map +1 -1
  27. package/src/lib/triggers/quote.js +80 -64
  28. package/src/lib/triggers/quote.js.map +1 -1
  29. package/src/lib/triggers/quote.ts +80 -64
  30. package/src/lib/triggers/stage.d.ts.map +1 -1
  31. package/src/lib/triggers/stage.js +188 -172
  32. package/src/lib/triggers/stage.js.map +1 -1
  33. package/src/lib/triggers/stage.ts +188 -172
  34. package/src/lib/triggers/task.d.ts.map +1 -1
  35. package/src/lib/triggers/task.js +76 -60
  36. package/src/lib/triggers/task.js.map +1 -1
  37. package/src/lib/triggers/task.ts +76 -60
@@ -188,26 +188,51 @@ exports.stage_created_trigger = (0, pieces_framework_1.createTrigger)({
188
188
  }),
189
189
  },
190
190
  sampleData: {
191
- workOrder: {
192
- id: '507f1f77bcf86cd799439011',
193
- name: 'Foundation Work',
194
- workOrderNumber: 'J10001-5039',
195
- jobNumber: 'J10001',
196
- description: 'Sample stage description',
197
- status: 'In Progress',
198
- previousStatus: 'Open',
199
- createdAt: '2026-03-05T10:00:00.000Z',
200
- updatedAt: '2026-03-05T10:00:00.000Z',
201
- startDate: '2026-03-05T08:00:00.000Z',
202
- dueDate: '2026-03-10T17:00:00.000Z',
203
- completedDate: null,
204
- finalisedDate: null,
205
- customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
206
- owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
207
- stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
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
+ },
208
234
  technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
209
- subcontractor: null,
210
- priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
235
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
211
236
  site: {
212
237
  id: '507f1f77bcf86cd799439011',
213
238
  name: 'Main Office',
@@ -220,24 +245,6 @@ exports.stage_created_trigger = (0, pieces_framework_1.createTrigger)({
220
245
  formatted: '123 Main St, Sydney NSW 2000',
221
246
  },
222
247
  },
223
- workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
224
- labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
225
- zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
226
- billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
227
- },
228
- technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
229
- billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
230
- site: {
231
- id: '507f1f77bcf86cd799439011',
232
- name: 'Main Office',
233
- address: {
234
- street: '123 Main St',
235
- suburb: 'Sydney',
236
- state: 'NSW',
237
- postcode: '2000',
238
- country: 'Australia',
239
- formatted: '123 Main St, Sydney NSW 2000',
240
- },
241
248
  },
242
249
  },
243
250
  type: pieces_framework_1.TriggerStrategy.WEBHOOK,
@@ -260,7 +267,7 @@ exports.stage_created_trigger = (0, pieces_framework_1.createTrigger)({
260
267
  filters.stageStatus = context.propsValue.stageStatus.map((v) => JSON.parse(v));
261
268
  if (context.propsValue.schedulingTag?.length)
262
269
  filters.schedulingTag = context.propsValue.schedulingTag;
263
- // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
270
+ // Register webhook with WorkBuddy v2 API
264
271
  const response = await pieces_common_1.httpClient.sendRequest({
265
272
  method: pieces_common_1.HttpMethod.POST,
266
273
  url: `${baseUrl}/api/v2/public/webhooks`,
@@ -289,18 +296,15 @@ exports.stage_created_trigger = (0, pieces_framework_1.createTrigger)({
289
296
  const baseUrl = context.auth.props.baseUrl;
290
297
  const webhookId = await context.store.get('webhookId');
291
298
  if (webhookId) {
292
- // Pause webhook (server keeps it for potential reactivation)
299
+ // Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
293
300
  await pieces_common_1.httpClient.sendRequest({
294
- method: pieces_common_1.HttpMethod.PATCH,
301
+ method: pieces_common_1.HttpMethod.DELETE,
295
302
  url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
296
303
  headers: {
297
304
  Authorization: `Bearer ${token}`,
298
305
  'Content-Type': 'application/json',
299
306
  'X-WorkBuddy-Version': '2026-01',
300
307
  },
301
- body: {
302
- status: 'paused',
303
- },
304
308
  });
305
309
  }
306
310
  },
@@ -492,26 +496,51 @@ exports.stage_updated_trigger = (0, pieces_framework_1.createTrigger)({
492
496
  }),
493
497
  },
494
498
  sampleData: {
495
- workOrder: {
496
- id: '507f1f77bcf86cd799439011',
497
- name: 'Foundation Work',
498
- workOrderNumber: 'J10001-5039',
499
- jobNumber: 'J10001',
500
- description: 'Sample stage description',
501
- status: 'In Progress',
502
- previousStatus: 'Open',
503
- createdAt: '2026-03-05T10:00:00.000Z',
504
- updatedAt: '2026-03-05T10:00:00.000Z',
505
- startDate: '2026-03-05T08:00:00.000Z',
506
- dueDate: '2026-03-10T17:00:00.000Z',
507
- completedDate: null,
508
- finalisedDate: null,
509
- customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
510
- owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
511
- stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
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
+ },
512
542
  technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
513
- subcontractor: null,
514
- priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
543
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
515
544
  site: {
516
545
  id: '507f1f77bcf86cd799439011',
517
546
  name: 'Main Office',
@@ -524,24 +553,6 @@ exports.stage_updated_trigger = (0, pieces_framework_1.createTrigger)({
524
553
  formatted: '123 Main St, Sydney NSW 2000',
525
554
  },
526
555
  },
527
- workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
528
- labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
529
- zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
530
- billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
531
- },
532
- technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
533
- billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
534
- site: {
535
- id: '507f1f77bcf86cd799439011',
536
- name: 'Main Office',
537
- address: {
538
- street: '123 Main St',
539
- suburb: 'Sydney',
540
- state: 'NSW',
541
- postcode: '2000',
542
- country: 'Australia',
543
- formatted: '123 Main St, Sydney NSW 2000',
544
- },
545
556
  },
546
557
  },
547
558
  type: pieces_framework_1.TriggerStrategy.WEBHOOK,
@@ -564,7 +575,7 @@ exports.stage_updated_trigger = (0, pieces_framework_1.createTrigger)({
564
575
  filters.stageStatus = context.propsValue.stageStatus.map((v) => JSON.parse(v));
565
576
  if (context.propsValue.schedulingTag?.length)
566
577
  filters.schedulingTag = context.propsValue.schedulingTag;
567
- // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
578
+ // Register webhook with WorkBuddy v2 API
568
579
  const response = await pieces_common_1.httpClient.sendRequest({
569
580
  method: pieces_common_1.HttpMethod.POST,
570
581
  url: `${baseUrl}/api/v2/public/webhooks`,
@@ -593,18 +604,15 @@ exports.stage_updated_trigger = (0, pieces_framework_1.createTrigger)({
593
604
  const baseUrl = context.auth.props.baseUrl;
594
605
  const webhookId = await context.store.get('webhookId');
595
606
  if (webhookId) {
596
- // Pause webhook (server keeps it for potential reactivation)
607
+ // Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
597
608
  await pieces_common_1.httpClient.sendRequest({
598
- method: pieces_common_1.HttpMethod.PATCH,
609
+ method: pieces_common_1.HttpMethod.DELETE,
599
610
  url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
600
611
  headers: {
601
612
  Authorization: `Bearer ${token}`,
602
613
  'Content-Type': 'application/json',
603
614
  'X-WorkBuddy-Version': '2026-01',
604
615
  },
605
- body: {
606
- status: 'paused',
607
- },
608
616
  });
609
617
  }
610
618
  },
@@ -796,26 +804,51 @@ exports.stage_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
796
804
  }),
797
805
  },
798
806
  sampleData: {
799
- workOrder: {
800
- id: '507f1f77bcf86cd799439011',
801
- name: 'Foundation Work',
802
- workOrderNumber: 'J10001-5039',
803
- jobNumber: 'J10001',
804
- description: 'Sample stage description',
805
- status: 'In Progress',
806
- previousStatus: 'Open',
807
- createdAt: '2026-03-05T10:00:00.000Z',
808
- updatedAt: '2026-03-05T10:00:00.000Z',
809
- startDate: '2026-03-05T08:00:00.000Z',
810
- dueDate: '2026-03-10T17:00:00.000Z',
811
- completedDate: null,
812
- finalisedDate: null,
813
- customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
814
- owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
815
- stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
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
+ },
816
850
  technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
817
- subcontractor: null,
818
- priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
851
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
819
852
  site: {
820
853
  id: '507f1f77bcf86cd799439011',
821
854
  name: 'Main Office',
@@ -828,24 +861,6 @@ exports.stage_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
828
861
  formatted: '123 Main St, Sydney NSW 2000',
829
862
  },
830
863
  },
831
- workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
832
- labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
833
- zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
834
- billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
835
- },
836
- technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
837
- billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
838
- site: {
839
- id: '507f1f77bcf86cd799439011',
840
- name: 'Main Office',
841
- address: {
842
- street: '123 Main St',
843
- suburb: 'Sydney',
844
- state: 'NSW',
845
- postcode: '2000',
846
- country: 'Australia',
847
- formatted: '123 Main St, Sydney NSW 2000',
848
- },
849
864
  },
850
865
  },
851
866
  type: pieces_framework_1.TriggerStrategy.WEBHOOK,
@@ -868,7 +883,7 @@ exports.stage_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
868
883
  filters.stageStatus = context.propsValue.stageStatus.map((v) => JSON.parse(v));
869
884
  if (context.propsValue.schedulingTag?.length)
870
885
  filters.schedulingTag = context.propsValue.schedulingTag;
871
- // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
886
+ // Register webhook with WorkBuddy v2 API
872
887
  const response = await pieces_common_1.httpClient.sendRequest({
873
888
  method: pieces_common_1.HttpMethod.POST,
874
889
  url: `${baseUrl}/api/v2/public/webhooks`,
@@ -897,18 +912,15 @@ exports.stage_status_changed_trigger = (0, pieces_framework_1.createTrigger)({
897
912
  const baseUrl = context.auth.props.baseUrl;
898
913
  const webhookId = await context.store.get('webhookId');
899
914
  if (webhookId) {
900
- // Pause webhook (server keeps it for potential reactivation)
915
+ // Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
901
916
  await pieces_common_1.httpClient.sendRequest({
902
- method: pieces_common_1.HttpMethod.PATCH,
917
+ method: pieces_common_1.HttpMethod.DELETE,
903
918
  url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
904
919
  headers: {
905
920
  Authorization: `Bearer ${token}`,
906
921
  'Content-Type': 'application/json',
907
922
  'X-WorkBuddy-Version': '2026-01',
908
923
  },
909
- body: {
910
- status: 'paused',
911
- },
912
924
  });
913
925
  }
914
926
  },
@@ -1100,26 +1112,51 @@ exports.stage_deleted_trigger = (0, pieces_framework_1.createTrigger)({
1100
1112
  }),
1101
1113
  },
1102
1114
  sampleData: {
1103
- workOrder: {
1104
- id: '507f1f77bcf86cd799439011',
1105
- name: 'Foundation Work',
1106
- workOrderNumber: 'J10001-5039',
1107
- jobNumber: 'J10001',
1108
- description: 'Sample stage description',
1109
- status: 'In Progress',
1110
- previousStatus: 'Open',
1111
- createdAt: '2026-03-05T10:00:00.000Z',
1112
- updatedAt: '2026-03-05T10:00:00.000Z',
1113
- startDate: '2026-03-05T08:00:00.000Z',
1114
- dueDate: '2026-03-10T17:00:00.000Z',
1115
- completedDate: null,
1116
- finalisedDate: null,
1117
- customer: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
1118
- owner: { id: '507f1f77bcf86cd799439011', name: 'John Smith' },
1119
- stageOwner: { id: '507f1f77bcf86cd799439011', name: 'Jane Doe' },
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
+ },
1120
1158
  technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
1121
- subcontractor: null,
1122
- priority: { id: '507f1f77bcf86cd799439011', name: 'High' },
1159
+ billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
1123
1160
  site: {
1124
1161
  id: '507f1f77bcf86cd799439011',
1125
1162
  name: 'Main Office',
@@ -1132,24 +1169,6 @@ exports.stage_deleted_trigger = (0, pieces_framework_1.createTrigger)({
1132
1169
  formatted: '123 Main St, Sydney NSW 2000',
1133
1170
  },
1134
1171
  },
1135
- workCategory: { id: '507f1f77bcf86cd799439011', name: 'Electrical' },
1136
- labels: [{ id: '507f1f77bcf86cd799439011', name: 'Urgent' }],
1137
- zones: [{ id: '507f1f77bcf86cd799439011', name: 'North' }],
1138
- billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
1139
- },
1140
- technician: { id: '507f1f77bcf86cd799439011', name: 'Mike Tech' },
1141
- billingCompany: { id: '507f1f77bcf86cd799439011', name: 'Acme Corp' },
1142
- site: {
1143
- id: '507f1f77bcf86cd799439011',
1144
- name: 'Main Office',
1145
- address: {
1146
- street: '123 Main St',
1147
- suburb: 'Sydney',
1148
- state: 'NSW',
1149
- postcode: '2000',
1150
- country: 'Australia',
1151
- formatted: '123 Main St, Sydney NSW 2000',
1152
- },
1153
1172
  },
1154
1173
  },
1155
1174
  type: pieces_framework_1.TriggerStrategy.WEBHOOK,
@@ -1172,7 +1191,7 @@ exports.stage_deleted_trigger = (0, pieces_framework_1.createTrigger)({
1172
1191
  filters.stageStatus = context.propsValue.stageStatus.map((v) => JSON.parse(v));
1173
1192
  if (context.propsValue.schedulingTag?.length)
1174
1193
  filters.schedulingTag = context.propsValue.schedulingTag;
1175
- // Register webhook with WorkBuddy v2 API (server handles upsert - reactivates if exists)
1194
+ // Register webhook with WorkBuddy v2 API
1176
1195
  const response = await pieces_common_1.httpClient.sendRequest({
1177
1196
  method: pieces_common_1.HttpMethod.POST,
1178
1197
  url: `${baseUrl}/api/v2/public/webhooks`,
@@ -1201,18 +1220,15 @@ exports.stage_deleted_trigger = (0, pieces_framework_1.createTrigger)({
1201
1220
  const baseUrl = context.auth.props.baseUrl;
1202
1221
  const webhookId = await context.store.get('webhookId');
1203
1222
  if (webhookId) {
1204
- // Pause webhook (server keeps it for potential reactivation)
1223
+ // Delete webhook to avoid stale subscriptions causing duplicate trigger deliveries
1205
1224
  await pieces_common_1.httpClient.sendRequest({
1206
- method: pieces_common_1.HttpMethod.PATCH,
1225
+ method: pieces_common_1.HttpMethod.DELETE,
1207
1226
  url: `${baseUrl}/api/v2/public/webhooks/${webhookId}`,
1208
1227
  headers: {
1209
1228
  Authorization: `Bearer ${token}`,
1210
1229
  'Content-Type': 'application/json',
1211
1230
  'X-WorkBuddy-Version': '2026-01',
1212
1231
  },
1213
- body: {
1214
- status: 'paused',
1215
- },
1216
1232
  });
1217
1233
  }
1218
1234
  },