@@ -17,6 +17,8 @@ import { OrchestrationStatus, toProtobuf, fromProtobuf } from "../orchestration/
1717import { TimeoutError } from "../exception/timeout-error" ;
1818import { PurgeResult } from "../orchestration/orchestration-purge-result" ;
1919import { PurgeInstanceCriteria } from "../orchestration/orchestration-purge-criteria" ;
20+ import { PurgeInstanceOptions } from "../orchestration/orchestration-purge-options" ;
21+ import { TerminateInstanceOptions } from "../orchestration/orchestration-terminate-options" ;
2022import { callWithMetadata , MetadataGenerator } from "../utils/grpc-helper.util" ;
2123import { OrchestrationQuery , ListInstanceIdsOptions , DEFAULT_PAGE_SIZE } from "../orchestration/orchestration-query" ;
2224import { Page , AsyncPageable , createAsyncPageable } from "../orchestration/page" ;
@@ -177,6 +179,10 @@ export class TaskHubGrpcClient {
177179 typeof instanceIdOrOptions === "string" || instanceIdOrOptions === undefined
178180 ? undefined
179181 : instanceIdOrOptions . tags ;
182+ const version =
183+ typeof instanceIdOrOptions === "string" || instanceIdOrOptions === undefined
184+ ? undefined
185+ : instanceIdOrOptions . version ;
180186
181187 const req = new pb . CreateInstanceRequest ( ) ;
182188 req . setName ( name ) ;
@@ -191,9 +197,15 @@ export class TaskHubGrpcClient {
191197 req . setInput ( i ) ;
192198 req . setScheduledstarttimestamp ( ts ) ;
193199
200+ if ( version ) {
201+ const v = new StringValue ( ) ;
202+ v . setValue ( version ) ;
203+ req . setVersion ( v ) ;
204+ }
205+
194206 populateTagsMap ( req . getTagsMap ( ) , tags ) ;
195207
196- this . _logger . info ( `Starting new ${ name } instance with ID = ${ req . getInstanceid ( ) } ` ) ;
208+ this . _logger . info ( `Starting new ${ name } instance with ID = ${ req . getInstanceid ( ) } ${ version ? ` (version: ${ version } )` : '' } ` ) ;
197209
198210 const res = await callWithMetadata < pb . CreateInstanceRequest , pb . CreateInstanceResponse > (
199211 this . _stub . startInstance . bind ( this . _stub ) ,
@@ -364,18 +376,38 @@ export class TaskHubGrpcClient {
364376 * Terminates the orchestrator associated with the provided instance id.
365377 *
366378 * @param {string } instanceId - orchestrator instance id to terminate.
367- * @param {any } output - The optional output to set for the terminated orchestrator instance.
379+ * @param {any | TerminateInstanceOptions } outputOrOptions - The optional output to set for the terminated orchestrator instance,
380+ * or an options object that can include both output and recursive termination settings.
368381 */
369- async terminateOrchestration ( instanceId : string , output : any = null ) : Promise < void > {
382+ async terminateOrchestration (
383+ instanceId : string ,
384+ outputOrOptions : any | TerminateInstanceOptions = null ,
385+ ) : Promise < void > {
370386 const req = new pb . TerminateRequest ( ) ;
371387 req . setInstanceid ( instanceId ) ;
372388
389+ let output : any = null ;
390+ let recursive = false ;
391+
392+ // Check if outputOrOptions is a TerminateInstanceOptions object
393+ if (
394+ outputOrOptions !== null &&
395+ typeof outputOrOptions === 'object' &&
396+ ( 'recursive' in outputOrOptions || 'output' in outputOrOptions )
397+ ) {
398+ output = outputOrOptions . output ?? null ;
399+ recursive = outputOrOptions . recursive ?? false ;
400+ } else {
401+ output = outputOrOptions ;
402+ }
403+
373404 const i = new StringValue ( ) ;
374405 i . setValue ( JSON . stringify ( output ) ) ;
375406
376407 req . setOutput ( i ) ;
408+ req . setRecursive ( recursive ) ;
377409
378- this . _logger . info ( `Terminating '${ instanceId } '` ) ;
410+ this . _logger . info ( `Terminating '${ instanceId } '${ recursive ? ' (recursive)' : '' } ` ) ;
379411
380412 await callWithMetadata < pb . TerminateRequest , pb . TerminateResponse > (
381413 this . _stub . terminateInstance . bind ( this . _stub ) ,
@@ -537,16 +569,21 @@ export class TaskHubGrpcClient {
537569 *
538570 * @param value - The unique ID of the orchestration instance to purge or orchestration instance filter criteria used
539571 * to determine which instances to purge.
572+ * @param options - Optional options to control the purge behavior, such as recursive purging of sub-orchestrations.
540573 * @returns A Promise that resolves to a {@link PurgeResult} or `undefined` if the purge operation was not successful.
541574 */
542- async purgeOrchestration ( value : string | PurgeInstanceCriteria ) : Promise < PurgeResult | undefined > {
575+ async purgeOrchestration (
576+ value : string | PurgeInstanceCriteria ,
577+ options ?: PurgeInstanceOptions ,
578+ ) : Promise < PurgeResult | undefined > {
543579 let res ;
544580 if ( typeof value === `string` ) {
545581 const instanceId = value ;
546582 const req = new pb . PurgeInstancesRequest ( ) ;
547583 req . setInstanceid ( instanceId ) ;
584+ req . setRecursive ( options ?. recursive ?? false ) ;
548585
549- this . _logger . info ( `Purging Instance '${ instanceId } '` ) ;
586+ this . _logger . info ( `Purging Instance '${ instanceId } '${ options ?. recursive ? ' (recursive)' : '' } ` ) ;
550587
551588 res = await callWithMetadata < pb . PurgeInstancesRequest , pb . PurgeInstancesResponse > (
552589 this . _stub . purgeInstances . bind ( this . _stub ) ,
@@ -574,9 +611,10 @@ export class TaskHubGrpcClient {
574611 filter . addRuntimestatus ( toProtobuf ( status ) ) ;
575612 }
576613 req . setPurgeinstancefilter ( filter ) ;
614+ req . setRecursive ( options ?. recursive ?? false ) ;
577615 const timeout = purgeInstanceCriteria . getTimeout ( ) ;
578616
579- this . _logger . info ( " Purging Instance using purging criteria" ) ;
617+ this . _logger . info ( ` Purging Instances using purging criteria${ options ?. recursive ? ' (recursive)' : '' } ` ) ;
580618
581619 const callPromise = callWithMetadata < pb . PurgeInstancesRequest , pb . PurgeInstancesResponse > (
582620 this . _stub . purgeInstances . bind ( this . _stub ) ,
0 commit comments