@@ -12,17 +12,20 @@ import type {
1212 WorkflowQueryOptions ,
1313} from './types' ;
1414import { WorkflowEngine } from './engine' ;
15+ import { ApprovalService } from './approval' ;
1516
1617/**
1718 * Workflow API class
1819 */
1920export class WorkflowAPI {
2021 private engine : WorkflowEngine ;
2122 private storage : WorkflowStorage ;
23+ private approvalService : ApprovalService ;
2224
2325 constructor ( storage : WorkflowStorage , engine ?: WorkflowEngine ) {
2426 this . storage = storage ;
2527 this . engine = engine || new WorkflowEngine ( ) ;
28+ this . approvalService = new ApprovalService ( storage ) ;
2629 }
2730
2831 /**
@@ -261,29 +264,12 @@ export class WorkflowAPI {
261264 delegatedBy : string ,
262265 reason ?: string
263266 ) : Promise < WorkflowTask > {
264- const task = await this . storage . getTask ( taskId ) ;
265- if ( ! task ) {
266- throw new Error ( `Task not found: ${ taskId } ` ) ;
267- }
268-
269- if ( task . status !== 'pending' ) {
270- throw new Error ( `Cannot delegate task in status: ${ task . status } ` ) ;
271- }
272-
273- // Store original assignee if not already delegated
274- const originalAssignee = task . originalAssignee || task . assignedTo ;
275-
276- await this . storage . updateTask ( taskId , {
277- status : 'delegated' ,
278- originalAssignee,
279- delegatedTo : delegateTo ,
280- delegatedAt : new Date ( ) ,
281- delegationReason : reason ,
282- assignedTo : delegateTo ,
267+ return this . approvalService . delegateTask ( {
268+ taskId,
269+ delegateTo,
270+ delegatedBy,
271+ reason,
283272 } ) ;
284-
285- const updatedTask = await this . storage . getTask ( taskId ) ;
286- return updatedTask ! ;
287273 }
288274
289275 /**
@@ -295,25 +281,12 @@ export class WorkflowAPI {
295281 reason ?: string ,
296282 escalatedBy ?: string
297283 ) : Promise < WorkflowTask > {
298- const task = await this . storage . getTask ( taskId ) ;
299- if ( ! task ) {
300- throw new Error ( `Task not found: ${ taskId } ` ) ;
301- }
302-
303- if ( task . status === 'completed' || task . status === 'rejected' ) {
304- throw new Error ( `Cannot escalate task in status: ${ task . status } ` ) ;
305- }
306-
307- await this . storage . updateTask ( taskId , {
308- status : 'escalated' ,
309- escalatedTo : escalateTo ,
310- escalatedAt : new Date ( ) ,
311- escalationReason : reason ,
312- assignedTo : escalateTo ,
284+ return this . approvalService . escalateTask ( {
285+ taskId,
286+ escalateTo,
287+ reason,
288+ escalatedBy,
313289 } ) ;
314-
315- const updatedTask = await this . storage . getTask ( taskId ) ;
316- return updatedTask ! ;
317290 }
318291
319292 /**
0 commit comments