@wilnertech/halopsa-mcp-server 1.2.0 → 1.3.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.
- package/README.md +43 -2
- package/dist/cache/memory-cache.d.ts +3 -0
- package/dist/cache/memory-cache.d.ts.map +1 -1
- package/dist/cache/memory-cache.js +4 -0
- package/dist/cache/memory-cache.js.map +1 -1
- package/dist/tools/batch-operations.d.ts +47 -0
- package/dist/tools/batch-operations.d.ts.map +1 -1
- package/dist/tools/batch-operations.js +144 -1
- package/dist/tools/batch-operations.js.map +1 -1
- package/dist/tools/budgets.d.ts +130 -0
- package/dist/tools/budgets.d.ts.map +1 -0
- package/dist/tools/budgets.js +277 -0
- package/dist/tools/budgets.js.map +1 -0
- package/dist/tools/milestones.d.ts +90 -0
- package/dist/tools/milestones.d.ts.map +1 -0
- package/dist/tools/milestones.js +170 -0
- package/dist/tools/milestones.js.map +1 -0
- package/dist/tools/registrations.d.ts +6 -2
- package/dist/tools/registrations.d.ts.map +1 -1
- package/dist/tools/registrations.js +38 -5
- package/dist/tools/registrations.js.map +1 -1
- package/dist/tools/ticket-links.d.ts +41 -0
- package/dist/tools/ticket-links.d.ts.map +1 -0
- package/dist/tools/ticket-links.js +84 -0
- package/dist/tools/ticket-links.js.map +1 -0
- package/dist/tools/tickets.d.ts +2 -0
- package/dist/tools/tickets.d.ts.map +1 -1
- package/dist/tools/tickets.js +15 -0
- package/dist/tools/tickets.js.map +1 -1
- package/dist/tools/workflows.d.ts +125 -0
- package/dist/tools/workflows.d.ts.map +1 -0
- package/dist/tools/workflows.js +355 -0
- package/dist/tools/workflows.js.map +1 -0
- package/dist/types/budgets.d.ts +45 -0
- package/dist/types/budgets.d.ts.map +1 -0
- package/dist/types/budgets.js +12 -0
- package/dist/types/budgets.js.map +1 -0
- package/dist/types/milestones.d.ts +37 -0
- package/dist/types/milestones.d.ts.map +1 -0
- package/dist/types/milestones.js +14 -0
- package/dist/types/milestones.js.map +1 -0
- package/dist/types/tickets.d.ts +1 -0
- package/dist/types/tickets.d.ts.map +1 -1
- package/dist/types/workflows.d.ts +77 -0
- package/dist/types/workflows.d.ts.map +1 -0
- package/dist/types/workflows.js +11 -0
- package/dist/types/workflows.js.map +1 -0
- package/dist/utils/formatter.d.ts +1 -1
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +21 -1
- package/dist/utils/formatter.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HaloPSA Workflow management tools.
|
|
3
|
+
*
|
|
4
|
+
* Covers CRUD on /Workflow and read access to /workflowstep.
|
|
5
|
+
* WorkflowTarget tools are deferred (tenant has 0 records).
|
|
6
|
+
* Workflow advancement is performed via update_halopsa_ticket(status_id=X)
|
|
7
|
+
* and is NOT duplicated here.
|
|
8
|
+
*
|
|
9
|
+
* POST /Workflow body shape (confirmed from swagger FlowHeader schema):
|
|
10
|
+
* Array wrapper required — same as /Tickets. Both create and update send
|
|
11
|
+
* POST /Workflow [{...}]. There is no POST /Workflow/{id} endpoint.
|
|
12
|
+
*
|
|
13
|
+
* Update uses read-before-write merge (same as updateTicket) because Halo's
|
|
14
|
+
* POST is REPLACE not PATCH — omitting fields would null them out.
|
|
15
|
+
*/
|
|
16
|
+
import { z } from 'zod';
|
|
17
|
+
import { formatResponse, stripWriteResponse } from '../utils/formatter.js';
|
|
18
|
+
import { TTL } from '../cache/memory-cache.js';
|
|
19
|
+
import { FormatOptionsSchema } from '../schemas/common.js';
|
|
20
|
+
// =============================================================================
|
|
21
|
+
// Schemas
|
|
22
|
+
// =============================================================================
|
|
23
|
+
export const ListWorkflowsArgsSchema = z.object({
|
|
24
|
+
count: z.number().int().min(1).max(500).optional()
|
|
25
|
+
.describe('Maximum workflows to return (default 100, max 500)'),
|
|
26
|
+
format_options: FormatOptionsSchema,
|
|
27
|
+
});
|
|
28
|
+
export const GetWorkflowArgsSchema = z.object({
|
|
29
|
+
workflow_id: z.number().int()
|
|
30
|
+
.describe('HaloPSA workflow ID'),
|
|
31
|
+
format_options: FormatOptionsSchema,
|
|
32
|
+
});
|
|
33
|
+
export const ListWorkflowStepsArgsSchema = z.object({
|
|
34
|
+
workflow_id: z.number().int().optional()
|
|
35
|
+
.describe('Filter steps to a specific workflow. Client-side filter on flow_id field.'),
|
|
36
|
+
count: z.number().int().min(1).max(500).optional()
|
|
37
|
+
.describe('Maximum steps to return (default 200, max 500)'),
|
|
38
|
+
format_options: FormatOptionsSchema,
|
|
39
|
+
});
|
|
40
|
+
export const CreateWorkflowArgsSchema = z.object({
|
|
41
|
+
name: z.string().min(1)
|
|
42
|
+
.describe('Workflow name (required)'),
|
|
43
|
+
note: z.string().optional()
|
|
44
|
+
.describe('Workflow description/note'),
|
|
45
|
+
steps: z.array(z.record(z.string(), z.unknown())).optional()
|
|
46
|
+
.describe('Workflow steps array (FlowDetail objects)'),
|
|
47
|
+
stages: z.array(z.record(z.string(), z.unknown())).optional()
|
|
48
|
+
.describe('Workflow stages array (FlowStages objects)'),
|
|
49
|
+
format_options: FormatOptionsSchema,
|
|
50
|
+
});
|
|
51
|
+
export const UpdateWorkflowArgsSchema = z.object({
|
|
52
|
+
workflow_id: z.number().int()
|
|
53
|
+
.describe('HaloPSA workflow ID to update'),
|
|
54
|
+
name: z.string().optional()
|
|
55
|
+
.describe('New workflow name'),
|
|
56
|
+
note: z.string().optional()
|
|
57
|
+
.describe('New workflow description/note'),
|
|
58
|
+
steps: z.array(z.record(z.string(), z.unknown())).optional()
|
|
59
|
+
.describe('Replace workflow steps array'),
|
|
60
|
+
stages: z.array(z.record(z.string(), z.unknown())).optional()
|
|
61
|
+
.describe('Replace workflow stages array'),
|
|
62
|
+
format_options: FormatOptionsSchema,
|
|
63
|
+
});
|
|
64
|
+
export const DeleteWorkflowArgsSchema = z.object({
|
|
65
|
+
workflow_id: z.number().int()
|
|
66
|
+
.describe('HaloPSA workflow ID to delete'),
|
|
67
|
+
reason: z.string().min(5).describe('REQUIRED audit-trail reason (min 5 chars). To bypass safety blocks, reason MUST contain "OVERRIDE" (case-sensitive) AND confirm_destructive must be true.'),
|
|
68
|
+
confirm_destructive: z.boolean().optional().default(false).describe('When safety pre-flight checks block the delete, set true AND include "OVERRIDE" in reason to proceed. Default false.'),
|
|
69
|
+
format_options: FormatOptionsSchema,
|
|
70
|
+
});
|
|
71
|
+
// =============================================================================
|
|
72
|
+
// Helpers
|
|
73
|
+
// =============================================================================
|
|
74
|
+
/**
|
|
75
|
+
* Workflow list compact fields — id + name + active + notinuse only.
|
|
76
|
+
* Excludes flow_chart_json (large blob), steps[], stages[].
|
|
77
|
+
*/
|
|
78
|
+
const WORKFLOW_LIST_FIELDS = ['id', 'name', 'active', 'notinuse'];
|
|
79
|
+
/**
|
|
80
|
+
* Workflow step compact fields for list responses.
|
|
81
|
+
*/
|
|
82
|
+
const STEP_COMPACT_FIELDS = [
|
|
83
|
+
'step_id', 'flow_id', 'name', 'stage_number',
|
|
84
|
+
'pipeline_stage_name', 'isstart', 'isend', 'islaststep', 'steptype',
|
|
85
|
+
];
|
|
86
|
+
function resolveListFormat(input) {
|
|
87
|
+
const opts = { ...(input ?? {}) };
|
|
88
|
+
if (!opts.format) {
|
|
89
|
+
opts.format = 'standard';
|
|
90
|
+
opts.fields = opts.fields ?? WORKFLOW_LIST_FIELDS;
|
|
91
|
+
}
|
|
92
|
+
return opts;
|
|
93
|
+
}
|
|
94
|
+
function resolveStepListFormat(input) {
|
|
95
|
+
const opts = { ...(input ?? {}) };
|
|
96
|
+
if (!opts.format) {
|
|
97
|
+
opts.format = 'standard';
|
|
98
|
+
opts.fields = opts.fields ?? STEP_COMPACT_FIELDS;
|
|
99
|
+
}
|
|
100
|
+
return opts;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Normalize Halo list responses — some endpoints return a plain array,
|
|
104
|
+
* others return a wrapper object with a typed array property.
|
|
105
|
+
*/
|
|
106
|
+
function unwrapWorkflowList(response) {
|
|
107
|
+
if (Array.isArray(response)) {
|
|
108
|
+
return { workflows: response, record_count: response.length };
|
|
109
|
+
}
|
|
110
|
+
const items = response.workflows ?? [];
|
|
111
|
+
return { workflows: items, record_count: response.record_count ?? items.length };
|
|
112
|
+
}
|
|
113
|
+
function unwrapStepList(response) {
|
|
114
|
+
if (Array.isArray(response)) {
|
|
115
|
+
return { steps: response, record_count: response.length };
|
|
116
|
+
}
|
|
117
|
+
const items = response.workflowsteps ?? [];
|
|
118
|
+
return { steps: items, record_count: response.record_count ?? items.length };
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Normalize write responses — Halo POST may return an array or object.
|
|
122
|
+
*/
|
|
123
|
+
function unwrapWriteResponse(response) {
|
|
124
|
+
return Array.isArray(response) ? response[0] : response;
|
|
125
|
+
}
|
|
126
|
+
// =============================================================================
|
|
127
|
+
// Implementations
|
|
128
|
+
// =============================================================================
|
|
129
|
+
export async function listWorkflows(client, args) {
|
|
130
|
+
const params = {
|
|
131
|
+
count: args.count ?? 100,
|
|
132
|
+
};
|
|
133
|
+
const formatOpts = resolveListFormat(args.format_options);
|
|
134
|
+
const response = await client.getCached('/Workflow', params, {
|
|
135
|
+
enabled: true,
|
|
136
|
+
ttl: TTL.WORKFLOWS,
|
|
137
|
+
keyPrefix: `workflows:list:count_${params.count}`,
|
|
138
|
+
});
|
|
139
|
+
const { workflows, record_count } = unwrapWorkflowList(response);
|
|
140
|
+
return formatResponse(workflows, formatOpts, { record_count });
|
|
141
|
+
}
|
|
142
|
+
export async function getWorkflow(client, args) {
|
|
143
|
+
const formatOpts = args.format_options ?? { format: 'detailed' };
|
|
144
|
+
const response = await client.getCached(`/Workflow/${args.workflow_id}`, { includedetails: true }, {
|
|
145
|
+
enabled: true,
|
|
146
|
+
ttl: TTL.WORKFLOWS,
|
|
147
|
+
keyPrefix: `workflows:${args.workflow_id}`,
|
|
148
|
+
});
|
|
149
|
+
return formatResponse(response, formatOpts);
|
|
150
|
+
}
|
|
151
|
+
export async function listWorkflowSteps(client, args) {
|
|
152
|
+
const params = {
|
|
153
|
+
count: args.count ?? 200,
|
|
154
|
+
};
|
|
155
|
+
// Cache key varies by presence of workflow_id filter (client-side filter applied post-fetch).
|
|
156
|
+
const cacheKey = args.workflow_id !== undefined
|
|
157
|
+
? `workflowsteps:workflow_${args.workflow_id}:count_${params.count}`
|
|
158
|
+
: `workflowsteps:all:count_${params.count}`;
|
|
159
|
+
const formatOpts = resolveStepListFormat(args.format_options);
|
|
160
|
+
const response = await client.getCached('/workflowstep', params, {
|
|
161
|
+
enabled: true,
|
|
162
|
+
ttl: TTL.WORKFLOW_STEPS,
|
|
163
|
+
keyPrefix: cacheKey,
|
|
164
|
+
});
|
|
165
|
+
let { steps, record_count } = unwrapStepList(response);
|
|
166
|
+
// Client-side filter when workflow_id is supplied.
|
|
167
|
+
if (args.workflow_id !== undefined) {
|
|
168
|
+
steps = steps.filter((s) => s.flow_id === args.workflow_id);
|
|
169
|
+
record_count = steps.length;
|
|
170
|
+
}
|
|
171
|
+
return formatResponse(steps, formatOpts, { record_count });
|
|
172
|
+
}
|
|
173
|
+
export async function createWorkflow(client, args) {
|
|
174
|
+
// POST /Workflow requires array body (swagger FlowHeader array shape confirmed).
|
|
175
|
+
const payload = {
|
|
176
|
+
name: args.name,
|
|
177
|
+
};
|
|
178
|
+
if (args.note !== undefined)
|
|
179
|
+
payload.note = args.note;
|
|
180
|
+
if (args.steps !== undefined)
|
|
181
|
+
payload.steps = args.steps;
|
|
182
|
+
if (args.stages !== undefined)
|
|
183
|
+
payload.stages = args.stages;
|
|
184
|
+
const created = unwrapWriteResponse(await client.post('/Workflow', [payload]));
|
|
185
|
+
client.invalidateCache('workflows:*');
|
|
186
|
+
const format = args.format_options?.format ?? 'compact';
|
|
187
|
+
return formatResponse(stripWriteResponse(created, format, 'workflow'), { format });
|
|
188
|
+
}
|
|
189
|
+
export async function updateWorkflow(client, args) {
|
|
190
|
+
const partial = {};
|
|
191
|
+
if (args.name !== undefined)
|
|
192
|
+
partial.name = args.name;
|
|
193
|
+
if (args.note !== undefined)
|
|
194
|
+
partial.note = args.note;
|
|
195
|
+
if (args.steps !== undefined)
|
|
196
|
+
partial.steps = args.steps;
|
|
197
|
+
if (args.stages !== undefined)
|
|
198
|
+
partial.stages = args.stages;
|
|
199
|
+
if (Object.keys(partial).length === 0) {
|
|
200
|
+
return JSON.stringify({
|
|
201
|
+
error: true,
|
|
202
|
+
message: 'At least one field must be provided for update',
|
|
203
|
+
}, null, 2);
|
|
204
|
+
}
|
|
205
|
+
// Read-before-write merge: Halo POST /Workflow is REPLACE not PATCH.
|
|
206
|
+
// Fetch current record first to preserve fields the caller did not supply.
|
|
207
|
+
const existing = await client.get(`/Workflow/${args.workflow_id}`, { includedetails: true });
|
|
208
|
+
// POST /Workflow [{id, ...merged}] — no /Workflow/{id} POST endpoint exists.
|
|
209
|
+
const response = unwrapWriteResponse(await client.post('/Workflow', [{ ...existing, ...partial, id: args.workflow_id }]));
|
|
210
|
+
client.invalidateCache('workflows:*');
|
|
211
|
+
client.invalidateCache(`workflows:${args.workflow_id}*`);
|
|
212
|
+
const format = args.format_options?.format ?? 'compact';
|
|
213
|
+
return formatResponse(stripWriteResponse(response, format, 'workflow'), { format });
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Safety-checked DELETE for a HaloPSA workflow.
|
|
217
|
+
*
|
|
218
|
+
* Pre-flight checks (all accumulate before decision):
|
|
219
|
+
* 1. In-use check: refuses if `notinuse === false` (workflow actively in use).
|
|
220
|
+
* 2. TicketType default: refuses if any tickettype has `workflow_id === workflow_id`.
|
|
221
|
+
*
|
|
222
|
+
* OVERRIDE: pass confirm_destructive: true AND include "OVERRIDE" in reason
|
|
223
|
+
* to bypass all checks.
|
|
224
|
+
*
|
|
225
|
+
* 404 on initial GET returns { already_absent: true, deleted_id } (idempotent).
|
|
226
|
+
*/
|
|
227
|
+
export async function deleteWorkflow(client, args) {
|
|
228
|
+
// Step 1: Fetch workflow — 404 is idempotent.
|
|
229
|
+
let workflow;
|
|
230
|
+
try {
|
|
231
|
+
workflow = await client.get(`/Workflow/${args.workflow_id}`, { includedetails: true });
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
const status = error?.response?.status;
|
|
235
|
+
if (status === 404) {
|
|
236
|
+
return JSON.stringify({ already_absent: true, deleted_id: args.workflow_id }, null, 2);
|
|
237
|
+
}
|
|
238
|
+
throw error;
|
|
239
|
+
}
|
|
240
|
+
// Step 2: Accumulate violations.
|
|
241
|
+
const violations = [];
|
|
242
|
+
// Check 1: notinuse === false means the workflow IS in use (field name is inverted).
|
|
243
|
+
if (workflow.notinuse === false) {
|
|
244
|
+
violations.push(`in_use: workflow.notinuse === false — this workflow is currently active/in-use`);
|
|
245
|
+
}
|
|
246
|
+
// Check 2: Probe ticket types for workflow_id references.
|
|
247
|
+
let ticketTypes = [];
|
|
248
|
+
try {
|
|
249
|
+
const ttResponse = await client.getCached('/TicketType', { count: 500 }, {
|
|
250
|
+
enabled: true,
|
|
251
|
+
ttl: TTL.TICKET_TYPES,
|
|
252
|
+
keyPrefix: 'tickettypes:all',
|
|
253
|
+
});
|
|
254
|
+
ticketTypes = Array.isArray(ttResponse)
|
|
255
|
+
? ttResponse
|
|
256
|
+
: (ttResponse.tickettypes ?? []);
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
// If probe fails, treat conservatively as a violation.
|
|
260
|
+
violations.push('tickettype_probe_failed: could not fetch ticket types to check default workflow references — pass OVERRIDE to proceed');
|
|
261
|
+
}
|
|
262
|
+
// Check for any tickettype with a matching workflow_id field.
|
|
263
|
+
const referencingTypes = ticketTypes.filter((tt) => tt['workflow_id'] === args.workflow_id);
|
|
264
|
+
if (referencingTypes.length > 0) {
|
|
265
|
+
const names = referencingTypes.map((tt) => `${tt.name}(id=${tt.id})`).join(', ');
|
|
266
|
+
violations.push(`tickettype_default: workflow is the default for ticket type(s): ${names} — reassign before deleting`);
|
|
267
|
+
}
|
|
268
|
+
// Step 3: Decision.
|
|
269
|
+
if (violations.length > 0) {
|
|
270
|
+
const overrideProvided = args.confirm_destructive === true && args.reason.includes('OVERRIDE');
|
|
271
|
+
if (!overrideProvided) {
|
|
272
|
+
return JSON.stringify({
|
|
273
|
+
deleted: false,
|
|
274
|
+
refused: true,
|
|
275
|
+
workflow_id: args.workflow_id,
|
|
276
|
+
violations,
|
|
277
|
+
remediation: "Pass confirm_destructive: true AND include 'OVERRIDE' (case-sensitive) in reason to proceed.",
|
|
278
|
+
}, null, 2);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Step 4: Execute DELETE.
|
|
282
|
+
await client.delete(`/Workflow/${args.workflow_id}`);
|
|
283
|
+
// Step 5: Cache invalidation.
|
|
284
|
+
client.invalidateCache('workflows:*');
|
|
285
|
+
client.invalidateCache(`workflowsteps:*`);
|
|
286
|
+
// Step 6: Structured success.
|
|
287
|
+
const overrideUsed = violations.length > 0;
|
|
288
|
+
const result = {
|
|
289
|
+
deleted: true,
|
|
290
|
+
workflow_id: args.workflow_id,
|
|
291
|
+
workflow_name: workflow.name ?? null,
|
|
292
|
+
reason: args.reason,
|
|
293
|
+
override_used: overrideUsed,
|
|
294
|
+
};
|
|
295
|
+
if (overrideUsed) {
|
|
296
|
+
result['safety_violations_bypassed'] = violations;
|
|
297
|
+
}
|
|
298
|
+
return JSON.stringify(result, null, 2);
|
|
299
|
+
}
|
|
300
|
+
// =============================================================================
|
|
301
|
+
// Tool Definitions
|
|
302
|
+
// =============================================================================
|
|
303
|
+
export const listWorkflowsTool = {
|
|
304
|
+
name: 'list_halopsa_workflows',
|
|
305
|
+
description: 'List HaloPSA workflows. Returns id, name, active, notinuse by default. ' +
|
|
306
|
+
'Use get_halopsa_workflow for full detail including steps and stages. ' +
|
|
307
|
+
'Cached 1h.',
|
|
308
|
+
schema: ListWorkflowsArgsSchema,
|
|
309
|
+
handler: listWorkflows,
|
|
310
|
+
};
|
|
311
|
+
export const getWorkflowTool = {
|
|
312
|
+
name: 'get_halopsa_workflow',
|
|
313
|
+
description: 'Get a single HaloPSA workflow by ID with full detail including steps[], ' +
|
|
314
|
+
'stages[], and flow_chart_json. Use list_halopsa_workflows to discover IDs. ' +
|
|
315
|
+
'Cached 1h.',
|
|
316
|
+
schema: GetWorkflowArgsSchema,
|
|
317
|
+
handler: getWorkflow,
|
|
318
|
+
};
|
|
319
|
+
export const listWorkflowStepsTool = {
|
|
320
|
+
name: 'list_halopsa_workflow_steps',
|
|
321
|
+
description: 'List HaloPSA workflow steps. Pass workflow_id to filter to a single ' +
|
|
322
|
+
'workflow (client-side filter on flow_id). Compact response returns ' +
|
|
323
|
+
'step_id, flow_id, name, stage_number, pipeline_stage_name, isstart, ' +
|
|
324
|
+
'isend, islaststep, steptype. Cached 1h.',
|
|
325
|
+
schema: ListWorkflowStepsArgsSchema,
|
|
326
|
+
handler: listWorkflowSteps,
|
|
327
|
+
};
|
|
328
|
+
export const createWorkflowTool = {
|
|
329
|
+
name: 'create_halopsa_workflow',
|
|
330
|
+
description: 'Create a new HaloPSA workflow. Body sent as POST /Workflow [{...}] ' +
|
|
331
|
+
'(array wrapper required by Halo API). Invalidates workflows cache. ' +
|
|
332
|
+
'Use list_halopsa_workflows to verify after creation.',
|
|
333
|
+
schema: CreateWorkflowArgsSchema,
|
|
334
|
+
handler: createWorkflow,
|
|
335
|
+
};
|
|
336
|
+
export const updateWorkflowTool = {
|
|
337
|
+
name: 'update_halopsa_workflow',
|
|
338
|
+
description: 'Update a HaloPSA workflow. Uses read-before-write merge (Halo POST /Workflow ' +
|
|
339
|
+
'is REPLACE not PATCH). Update sent as POST /Workflow [{id, ...merged}] — ' +
|
|
340
|
+
'there is no POST /Workflow/{id} endpoint. Invalidates workflows cache.',
|
|
341
|
+
schema: UpdateWorkflowArgsSchema,
|
|
342
|
+
handler: updateWorkflow,
|
|
343
|
+
};
|
|
344
|
+
export const deleteWorkflowTool = {
|
|
345
|
+
name: 'delete_halopsa_workflow',
|
|
346
|
+
description: 'Permanently delete a HaloPSA workflow by ID. Runs safety checks before ' +
|
|
347
|
+
'deleting: (1) refuses if workflow.notinuse === false (workflow is in use), ' +
|
|
348
|
+
'(2) refuses if any ticket type has this workflow as its default. ' +
|
|
349
|
+
'Pass confirm_destructive: true AND include "OVERRIDE" in reason to bypass. ' +
|
|
350
|
+
'404 on GET returns already_absent: true (idempotent). ' +
|
|
351
|
+
'Invalidates workflows and workflowsteps caches.',
|
|
352
|
+
schema: DeleteWorkflowArgsSchema,
|
|
353
|
+
handler: deleteWorkflow,
|
|
354
|
+
};
|
|
355
|
+
//# sourceMappingURL=workflows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/tools/workflows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript type definitions for HaloPSA budget-domain objects.
|
|
3
|
+
*
|
|
4
|
+
* BudgetType: top-level reference data (GET /BudgetType). Rarely changes.
|
|
5
|
+
* FaultBudget: per-ticket budget entry, nested as ticket.budgets[].
|
|
6
|
+
*
|
|
7
|
+
* Shapes derived from Swagger schema and empirical probe 2026-05-11.
|
|
8
|
+
* Optional fields are explicitly marked because Halo omits them in
|
|
9
|
+
* list responses and only populates them on detail fetches.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Budget Type — reference data describing a named rate category.
|
|
13
|
+
* 5 Swagger-declared props: id, name, defaultrate, chargerate, _warning.
|
|
14
|
+
*/
|
|
15
|
+
export interface HaloPSABudgetType {
|
|
16
|
+
id: number;
|
|
17
|
+
name: string;
|
|
18
|
+
defaultrate?: number;
|
|
19
|
+
chargerate?: number;
|
|
20
|
+
_warning?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Fault Budget — a per-ticket budget entry nested in ticket.budgets[].
|
|
24
|
+
* 26 Swagger-declared props. Key fields exposed here; remainder captured
|
|
25
|
+
* via index signature for forward-compatibility.
|
|
26
|
+
*/
|
|
27
|
+
export interface HaloPSAFaultBudget {
|
|
28
|
+
id?: number;
|
|
29
|
+
ticket_id?: number;
|
|
30
|
+
budgettype_id: number;
|
|
31
|
+
budgettype_name?: string;
|
|
32
|
+
hours?: number;
|
|
33
|
+
days?: number;
|
|
34
|
+
rate?: number;
|
|
35
|
+
[key: string]: unknown;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* List response shape for GET /BudgetType.
|
|
39
|
+
* Halo may return a bare array or a wrapped object depending on tenant config.
|
|
40
|
+
*/
|
|
41
|
+
export interface HaloPSABudgetTypeListResponse {
|
|
42
|
+
budget_types?: HaloPSABudgetType[];
|
|
43
|
+
record_count?: number;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=budgets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgets.d.ts","sourceRoot":"","sources":["../../src/types/budgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC5C,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript type definitions for HaloPSA budget-domain objects.
|
|
3
|
+
*
|
|
4
|
+
* BudgetType: top-level reference data (GET /BudgetType). Rarely changes.
|
|
5
|
+
* FaultBudget: per-ticket budget entry, nested as ticket.budgets[].
|
|
6
|
+
*
|
|
7
|
+
* Shapes derived from Swagger schema and empirical probe 2026-05-11.
|
|
8
|
+
* Optional fields are explicitly marked because Halo omits them in
|
|
9
|
+
* list responses and only populates them on detail fetches.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=budgets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgets.js","sourceRoot":"","sources":["../../src/types/budgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript type definitions for HaloPSA milestone objects.
|
|
3
|
+
*
|
|
4
|
+
* Milestones live as a nested `milestones[]` array on a project ticket.
|
|
5
|
+
* There is no top-level /Milestone endpoint — GET /Milestone returns 404.
|
|
6
|
+
* Read via GET /Tickets/{id}?includedetails=true; write via
|
|
7
|
+
* POST /Tickets [{ id, ...baseline, milestones: newArray }].
|
|
8
|
+
*
|
|
9
|
+
* Schema derived from Swagger `MileStone` declaration (24 props) confirmed
|
|
10
|
+
* 2026-05-11. Only the props relevant to create/update are wired here;
|
|
11
|
+
* the rest are kept as optional unknown for forward-compatibility.
|
|
12
|
+
*/
|
|
13
|
+
export interface HaloPSAMilestone {
|
|
14
|
+
id?: number;
|
|
15
|
+
ticket_id?: number;
|
|
16
|
+
name: string;
|
|
17
|
+
sequence?: number;
|
|
18
|
+
start_date?: string;
|
|
19
|
+
target_date: string;
|
|
20
|
+
billing_amount?: number;
|
|
21
|
+
status_id?: number;
|
|
22
|
+
/** Any additional props returned by Halo that we don't explicitly model. */
|
|
23
|
+
[key: string]: unknown;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Input shape for a single milestone — used by set/add tools.
|
|
27
|
+
* `name` and `target_date` are required; all others are optional.
|
|
28
|
+
*/
|
|
29
|
+
export interface HaloPSAMilestoneInput {
|
|
30
|
+
name: string;
|
|
31
|
+
target_date: string;
|
|
32
|
+
start_date?: string;
|
|
33
|
+
sequence?: number;
|
|
34
|
+
billing_amount?: number;
|
|
35
|
+
status_id?: number;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=milestones.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestones.d.ts","sourceRoot":"","sources":["../../src/types/milestones.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript type definitions for HaloPSA milestone objects.
|
|
3
|
+
*
|
|
4
|
+
* Milestones live as a nested `milestones[]` array on a project ticket.
|
|
5
|
+
* There is no top-level /Milestone endpoint — GET /Milestone returns 404.
|
|
6
|
+
* Read via GET /Tickets/{id}?includedetails=true; write via
|
|
7
|
+
* POST /Tickets [{ id, ...baseline, milestones: newArray }].
|
|
8
|
+
*
|
|
9
|
+
* Schema derived from Swagger `MileStone` declaration (24 props) confirmed
|
|
10
|
+
* 2026-05-11. Only the props relevant to create/update are wired here;
|
|
11
|
+
* the rest are kept as optional unknown for forward-compatibility.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=milestones.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestones.js","sourceRoot":"","sources":["../../src/types/milestones.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
package/dist/types/tickets.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../src/types/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACpC,GAAG,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,+BAA+B;IAC9C,2EAA2E;IAC3E,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,6BAA6B;IAC5C,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,2CAA2C;IAC1D,UAAU,EAAE,+BAA+B,EAAE,CAAC;IAC9C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;CACtB"}
|
|
1
|
+
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../src/types/tickets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript type definitions for HaloPSA Workflow objects.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from types/halopsa.ts to avoid merge conflicts with parallel
|
|
5
|
+
* writers who own that file.
|
|
6
|
+
*
|
|
7
|
+
* Source: swagger /components/schemas/FlowHeader + FlowDetail +
|
|
8
|
+
* empirical discovery 2026-05-11.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* HaloPSA Workflow (FlowHeader) — list shape returned by GET /Workflow.
|
|
12
|
+
* Detail shape from GET /Workflow/{id} adds steps, stages, and flow_chart_json.
|
|
13
|
+
*/
|
|
14
|
+
export interface HaloPSAWorkflow {
|
|
15
|
+
id: number;
|
|
16
|
+
guid?: string | null;
|
|
17
|
+
name?: string | null;
|
|
18
|
+
note?: string | null;
|
|
19
|
+
/** true = workflow IS in use, false = NOT in use. Field name is confusing. */
|
|
20
|
+
notinuse?: boolean | null;
|
|
21
|
+
active?: boolean | null;
|
|
22
|
+
flow_chart_json?: string | null;
|
|
23
|
+
steps?: HaloPSAWorkflowStep[] | null;
|
|
24
|
+
always_allow_actions?: unknown[] | null;
|
|
25
|
+
stages?: HaloPSAWorkflowStage[] | null;
|
|
26
|
+
access_control?: unknown[] | null;
|
|
27
|
+
access_control_level?: number | null;
|
|
28
|
+
in_use?: boolean | null;
|
|
29
|
+
[key: string]: unknown;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* HaloPSA Workflow Step (FlowDetail) — returned by GET /workflowstep and
|
|
33
|
+
* embedded in GET /Workflow/{id} `steps[]`.
|
|
34
|
+
*/
|
|
35
|
+
export interface HaloPSAWorkflowStep {
|
|
36
|
+
fdid?: number | null;
|
|
37
|
+
step_id?: number | null;
|
|
38
|
+
flow_id?: number | null;
|
|
39
|
+
chatprofile_id?: number | null;
|
|
40
|
+
name?: string | null;
|
|
41
|
+
isstart?: boolean | null;
|
|
42
|
+
isend?: boolean | null;
|
|
43
|
+
islaststep?: boolean | null;
|
|
44
|
+
old_diagram_x?: number | null;
|
|
45
|
+
old_diagram_y?: number | null;
|
|
46
|
+
new_flow_id?: number | null;
|
|
47
|
+
stage_number?: number | null;
|
|
48
|
+
pipeline_stage_name?: string | null;
|
|
49
|
+
actions?: unknown[] | null;
|
|
50
|
+
steptype?: number | null;
|
|
51
|
+
[key: string]: unknown;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* HaloPSA Workflow Stage (FlowStages).
|
|
55
|
+
*/
|
|
56
|
+
export interface HaloPSAWorkflowStage {
|
|
57
|
+
id?: number | null;
|
|
58
|
+
name?: string | null;
|
|
59
|
+
stage_number?: number | null;
|
|
60
|
+
[key: string]: unknown;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Response wrapper from GET /Workflow when Halo wraps in an object.
|
|
64
|
+
* Halo sometimes returns a plain array; callers should accept both.
|
|
65
|
+
*/
|
|
66
|
+
export interface HaloPSAWorkflowListResponse {
|
|
67
|
+
workflows?: HaloPSAWorkflow[];
|
|
68
|
+
record_count?: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Response wrapper from GET /workflowstep.
|
|
72
|
+
*/
|
|
73
|
+
export interface HaloPSAWorkflowStepListResponse {
|
|
74
|
+
workflowsteps?: HaloPSAWorkflowStep[];
|
|
75
|
+
record_count?: number;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/types/workflows.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC;IACrC,oBAAoB,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript type definitions for HaloPSA Workflow objects.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from types/halopsa.ts to avoid merge conflicts with parallel
|
|
5
|
+
* writers who own that file.
|
|
6
|
+
*
|
|
7
|
+
* Source: swagger /components/schemas/FlowHeader + FlowDetail +
|
|
8
|
+
* empirical discovery 2026-05-11.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=workflows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/types/workflows.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -29,7 +29,7 @@ export declare function scrubCredentials(payload: unknown): unknown;
|
|
|
29
29
|
* @returns JSON string formatted according to options
|
|
30
30
|
*/
|
|
31
31
|
export declare function formatResponse<T>(data: T | T[], options?: FormatOptions, meta?: Record<string, unknown>): string;
|
|
32
|
-
export type WriteResponseEntityType = 'ticket' | 'asset' | 'user' | 'site' | 'action';
|
|
32
|
+
export type WriteResponseEntityType = 'ticket' | 'asset' | 'user' | 'site' | 'action' | 'workflow';
|
|
33
33
|
/**
|
|
34
34
|
* Strip a write-endpoint response (create/update) to a compact shape.
|
|
35
35
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAeD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAoB1D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EACb,OAAO,GAAE,aAAkB,EAC3B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CA6CR;
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAeD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAoB1D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EACb,OAAO,GAAE,aAAkB,EAC3B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CA6CR;AA8RD,MAAM,MAAM,uBAAuB,GAC/B,QAAQ,GACR,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,UAAU,CAAC;AAEf;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAyCT"}
|