@thegraphitelab/n8n-nodes-servicetitan 0.8.0 → 0.8.1
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.
|
@@ -4,6 +4,45 @@ exports.ServiceTitanTrigger = void 0;
|
|
|
4
4
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
5
|
const GenericFunctions_1 = require("./GenericFunctions");
|
|
6
6
|
const JOB_STATUSES = ['Scheduled', 'InProgress', 'Hold', 'Completed', 'Canceled'];
|
|
7
|
+
const JOB_PAGE_SIZE = 100;
|
|
8
|
+
const MAX_PAGES_PER_POLL = 10; // 1,000 jobs catch-up per poll; uses ~17% of ST's 60req/s budget for one second
|
|
9
|
+
function emptyJobState(tenantId) {
|
|
10
|
+
return { tenantId, cursorCreatedOn: '', seenIdsAtCursor: [], needsSeeding: true };
|
|
11
|
+
}
|
|
12
|
+
function pickLatestIso(a, b) {
|
|
13
|
+
if (!a)
|
|
14
|
+
return b;
|
|
15
|
+
if (!b)
|
|
16
|
+
return a;
|
|
17
|
+
return a > b ? a : b; // ISO 8601 sorts lexicographically
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Fetch a single sample job for "Fetch Test Event". Sorts descending by
|
|
21
|
+
* createdOn so the user sees the most recent job that matches their
|
|
22
|
+
* filters. Does NOT mutate staticData.
|
|
23
|
+
*/
|
|
24
|
+
async function fetchManualSample(tenantId, baseQs, userFloorIso) {
|
|
25
|
+
const qs = {
|
|
26
|
+
...baseQs,
|
|
27
|
+
pageSize: 1,
|
|
28
|
+
sort: '-createdOn',
|
|
29
|
+
};
|
|
30
|
+
if (userFloorIso)
|
|
31
|
+
qs.createdOnOrAfter = userFloorIso;
|
|
32
|
+
let response;
|
|
33
|
+
try {
|
|
34
|
+
response = (await GenericFunctions_1.serviceTitanApiRequest.call(this, 'GET', `/jpm/v2/tenant/${tenantId}/jobs`, qs));
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
|
|
38
|
+
}
|
|
39
|
+
const rows = Array.isArray(response.data) ? response.data : [];
|
|
40
|
+
if (rows.length === 0)
|
|
41
|
+
return null;
|
|
42
|
+
return [
|
|
43
|
+
this.helpers.returnJsonArray([(0, GenericFunctions_1.flattenCustomFields)(rows[0])]),
|
|
44
|
+
];
|
|
45
|
+
}
|
|
7
46
|
class ServiceTitanTrigger {
|
|
8
47
|
description = {
|
|
9
48
|
displayName: 'ServiceTitan Trigger',
|
|
@@ -49,7 +88,7 @@ class ServiceTitanTrigger {
|
|
|
49
88
|
{
|
|
50
89
|
name: 'New Job',
|
|
51
90
|
value: 'newJob',
|
|
52
|
-
description: 'Fires
|
|
91
|
+
description: 'Fires once per newly created ServiceTitan job, ordered by createdOn ascending',
|
|
53
92
|
},
|
|
54
93
|
],
|
|
55
94
|
},
|
|
@@ -74,7 +113,7 @@ class ServiceTitanTrigger {
|
|
|
74
113
|
name: 'createdOnOrAfter',
|
|
75
114
|
type: 'dateTime',
|
|
76
115
|
default: '',
|
|
77
|
-
description: '
|
|
116
|
+
description: 'Floor under the trigger\'s internal cursor. The trigger never polls earlier than this date/time. Useful for a one-time backfill or to skip very old jobs.',
|
|
78
117
|
},
|
|
79
118
|
{
|
|
80
119
|
displayName: 'Customer ID',
|
|
@@ -136,70 +175,99 @@ class ServiceTitanTrigger {
|
|
|
136
175
|
const credentials = await this.getCredentials('serviceTitanApi');
|
|
137
176
|
const tenantId = credentials.tenantId;
|
|
138
177
|
const staticData = this.getWorkflowStaticData('node');
|
|
139
|
-
//
|
|
140
|
-
//
|
|
141
|
-
if (staticData.tenantId
|
|
178
|
+
// 0.8.0 → 0.8.1 migration: drop legacy root-level fields. The old id
|
|
179
|
+
// watermark was unreliable; we'd rather re-seed than carry it forward.
|
|
180
|
+
if (staticData.tenantId !== undefined || staticData.highestSeenId !== undefined) {
|
|
181
|
+
delete staticData.tenantId;
|
|
142
182
|
delete staticData.highestSeenId;
|
|
143
183
|
}
|
|
144
|
-
|
|
184
|
+
// Tenant-swap detection: wipe the dedup block on credential change.
|
|
185
|
+
if (!staticData.jobs || staticData.jobs.tenantId !== tenantId) {
|
|
186
|
+
staticData.jobs = emptyJobState(tenantId);
|
|
187
|
+
}
|
|
188
|
+
const state = staticData.jobs;
|
|
189
|
+
// Filter UI → API params
|
|
145
190
|
const filters = this.getNodeParameter('filters', 0, {});
|
|
146
|
-
|
|
147
|
-
const
|
|
148
|
-
pageSize:
|
|
191
|
+
const userFloorIso = filters.createdOnOrAfter ?? '';
|
|
192
|
+
const baseQs = {
|
|
193
|
+
pageSize: JOB_PAGE_SIZE,
|
|
149
194
|
active: filters.includeInactive ? 'Any' : 'True',
|
|
195
|
+
sort: '+createdOn',
|
|
150
196
|
};
|
|
151
197
|
if (filters.businessUnitId)
|
|
152
|
-
|
|
153
|
-
if (filters.createdOnOrAfter)
|
|
154
|
-
qs.createdOnOrAfter = filters.createdOnOrAfter;
|
|
198
|
+
baseQs.businessUnitId = filters.businessUnitId;
|
|
155
199
|
if (filters.customerId)
|
|
156
|
-
|
|
200
|
+
baseQs.customerId = filters.customerId;
|
|
157
201
|
if (filters.jobStatus)
|
|
158
|
-
|
|
202
|
+
baseQs.jobStatus = filters.jobStatus;
|
|
159
203
|
if (filters.jobTypeId)
|
|
160
|
-
|
|
204
|
+
baseQs.jobTypeId = filters.jobTypeId;
|
|
161
205
|
if (filters.modifiedBefore)
|
|
162
|
-
|
|
163
|
-
|
|
206
|
+
baseQs.modifiedBefore = filters.modifiedBefore;
|
|
207
|
+
// Manual mode (Fetch Test Event): return one sample. NO state mutation.
|
|
208
|
+
if (this.getMode() === 'manual') {
|
|
209
|
+
return await fetchManualSample.call(this, tenantId, baseQs, userFloorIso);
|
|
210
|
+
}
|
|
211
|
+
// First activation: seed cursor at "now" and emit nothing. Avoids
|
|
212
|
+
// draining historical jobs into n8n on activation.
|
|
213
|
+
if (state.needsSeeding) {
|
|
214
|
+
state.cursorCreatedOn = pickLatestIso(new Date().toISOString(), userFloorIso);
|
|
215
|
+
state.seenIdsAtCursor = [];
|
|
216
|
+
state.needsSeeding = false;
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
// Real poll: paginate forward from the cursor.
|
|
220
|
+
const effectiveCursorIso = pickLatestIso(state.cursorCreatedOn, userFloorIso);
|
|
221
|
+
const collected = [];
|
|
222
|
+
let page = 1;
|
|
223
|
+
let hasMore = true;
|
|
164
224
|
try {
|
|
165
|
-
|
|
225
|
+
while (hasMore && page <= MAX_PAGES_PER_POLL) {
|
|
226
|
+
const qs = { ...baseQs, page };
|
|
227
|
+
if (effectiveCursorIso)
|
|
228
|
+
qs.createdOnOrAfter = effectiveCursorIso;
|
|
229
|
+
const response = (await GenericFunctions_1.serviceTitanApiRequest.call(this, 'GET', `/jpm/v2/tenant/${tenantId}/jobs`, qs));
|
|
230
|
+
const rows = Array.isArray(response.data) ? response.data : [];
|
|
231
|
+
collected.push(...rows);
|
|
232
|
+
hasMore = Boolean(response.hasMore) && rows.length > 0;
|
|
233
|
+
page += 1;
|
|
234
|
+
}
|
|
166
235
|
}
|
|
167
236
|
catch (error) {
|
|
168
237
|
throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
|
|
169
238
|
}
|
|
170
|
-
|
|
171
|
-
const
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
.
|
|
184
|
-
// Manual mode ("Fetch Test Event"): return one sample without burning the
|
|
185
|
-
// watermark. If there are no new jobs, fall back to the most recent one
|
|
186
|
-
// so the user can wire downstream nodes against a real row.
|
|
187
|
-
if (this.getMode() === 'manual') {
|
|
188
|
-
const sample = newJobs[0] ?? (rows.length > 0
|
|
189
|
-
? [...rows].sort((a, b) => Number(b.id) - Number(a.id))[0]
|
|
190
|
-
: undefined);
|
|
191
|
-
if (!sample)
|
|
192
|
-
return null;
|
|
193
|
-
return [
|
|
194
|
-
this.helpers.returnJsonArray([
|
|
195
|
-
(0, GenericFunctions_1.flattenCustomFields)(sample),
|
|
196
|
-
]),
|
|
197
|
-
];
|
|
239
|
+
// Dedup against the boundary-id set.
|
|
240
|
+
const seen = new Set(state.seenIdsAtCursor);
|
|
241
|
+
const newJobs = [];
|
|
242
|
+
for (const job of collected) {
|
|
243
|
+
if (!job || job.createdOn === undefined || job.id === undefined)
|
|
244
|
+
continue;
|
|
245
|
+
const idStr = String(job.id);
|
|
246
|
+
// Inclusive-window guard: drop boundary jobs we've already emitted.
|
|
247
|
+
if (job.createdOn === state.cursorCreatedOn && seen.has(idStr))
|
|
248
|
+
continue;
|
|
249
|
+
// Defensive: drop anything strictly older than the cursor (clock skew).
|
|
250
|
+
if (state.cursorCreatedOn && job.createdOn < state.cursorCreatedOn)
|
|
251
|
+
continue;
|
|
252
|
+
newJobs.push(job);
|
|
198
253
|
}
|
|
199
254
|
if (newJobs.length === 0)
|
|
200
255
|
return null;
|
|
201
|
-
//
|
|
202
|
-
|
|
256
|
+
// Compute the new cursor and rebuild the boundary set.
|
|
257
|
+
const newestCreatedOn = newJobs.reduce((max, j) => ((j.createdOn ?? '') > max ? (j.createdOn ?? '') : max), state.cursorCreatedOn);
|
|
258
|
+
const refreshedSeen = [];
|
|
259
|
+
if (newestCreatedOn === state.cursorCreatedOn) {
|
|
260
|
+
// Cursor didn't advance — preserve the existing set
|
|
261
|
+
for (const id of state.seenIdsAtCursor)
|
|
262
|
+
refreshedSeen.push(id);
|
|
263
|
+
}
|
|
264
|
+
for (const j of newJobs) {
|
|
265
|
+
if (j.createdOn === newestCreatedOn)
|
|
266
|
+
refreshedSeen.push(String(j.id));
|
|
267
|
+
}
|
|
268
|
+
// State mutation — only after we've successfully built the emission.
|
|
269
|
+
state.cursorCreatedOn = newestCreatedOn;
|
|
270
|
+
state.seenIdsAtCursor = Array.from(new Set(refreshedSeen));
|
|
203
271
|
const enriched = newJobs.map((j) => (0, GenericFunctions_1.flattenCustomFields)(j));
|
|
204
272
|
return [this.helpers.returnJsonArray(enriched)];
|
|
205
273
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceTitanTrigger.node.js","sourceRoot":"","sources":["../../../nodes/ServiceTitan/ServiceTitanTrigger.node.ts"],"names":[],"mappings":";;;AAAA,+CAWsB;AAEtB,yDAAiF;
|
|
1
|
+
{"version":3,"file":"ServiceTitanTrigger.node.js","sourceRoot":"","sources":["../../../nodes/ServiceTitan/ServiceTitanTrigger.node.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED