11import { encodeBlob } from "@/convert/blob.js" ;
22import {
33 mapToTestWorkflowConvertResult ,
4+ mapToTestWorkflowHttpResult ,
45 mapToWorkflow ,
56} from "@/convert/workflow.js" ;
67import {
78 CreateWorkflowDocument ,
89 DeleteWorkflowDocument ,
910 type GraphQLClient ,
11+ TestWorkflowActiveDocument ,
1012 TestWorkflowConvertDocument ,
13+ TestWorkflowPassiveDocument ,
14+ ToggleWorkflowDocument ,
1115 UpdateWorkflowDocument ,
1216 WorkflowDocument ,
1317 WorkflowsDocument ,
@@ -17,12 +21,30 @@ import type {
1721 ID ,
1822 TestWorkflowConvertOptions ,
1923 TestWorkflowConvertResult ,
24+ TestWorkflowHttpOptions ,
25+ TestWorkflowHttpResult ,
2026 UpdateWorkflowOptions ,
2127} from "@/types/index.js" ;
2228import type { Workflow as WorkflowType } from "@/types/workflow.js" ;
2329import { handleGraphQLError } from "@/utils/errors.js" ;
2430import { isAbsent , isPresent } from "@/utils/optional.js" ;
2531
32+ const buildTestWorkflowHttpInput = ( options : TestWorkflowHttpOptions ) => ( {
33+ definition : options . definition ,
34+ request : {
35+ connectionInfo : {
36+ host : options . request . connection . host ,
37+ port : options . request . connection . port ,
38+ isTLS : options . request . connection . isTLS ,
39+ SNI : options . request . connection . SNI ,
40+ } ,
41+ raw : encodeBlob ( options . request . raw ) ,
42+ } ,
43+ response : isPresent ( options . response )
44+ ? { raw : encodeBlob ( options . response . raw ) }
45+ : undefined ,
46+ } ) ;
47+
2648/**
2749 * Higher-level SDK for workflow-related operations.
2850 */
@@ -119,6 +141,28 @@ export class WorkflowSDK {
119141 }
120142 }
121143
144+ /**
145+ * Toggle a workflow's enabled state.
146+ */
147+ async toggle ( id : ID , enabled : boolean ) : Promise < WorkflowType > {
148+ const result = await this . graphql . mutation ( ToggleWorkflowDocument , {
149+ id,
150+ enabled,
151+ } ) ;
152+
153+ const payload = result . toggleWorkflow ;
154+
155+ if ( isPresent ( payload . error ) ) {
156+ handleGraphQLError ( payload . error ) ;
157+ }
158+
159+ if ( isAbsent ( payload . workflow ) ) {
160+ throw new Error ( "Toggle workflow returned no workflow" ) ;
161+ }
162+
163+ return mapToWorkflow ( payload . workflow ) ;
164+ }
165+
122166 /**
123167 * Test a workflow against input without saving it.
124168 */
@@ -147,4 +191,44 @@ export class WorkflowSDK {
147191 }
148192 }
149193 }
194+
195+ /**
196+ * Test a passive workflow against a request and optional response without
197+ * saving it.
198+ */
199+ async testPassive (
200+ options : TestWorkflowHttpOptions ,
201+ ) : Promise < TestWorkflowHttpResult > {
202+ const result = await this . graphql . mutation ( TestWorkflowPassiveDocument , {
203+ input : buildTestWorkflowHttpInput ( options ) ,
204+ } ) ;
205+
206+ const payload = result . testWorkflowPassive ;
207+
208+ if ( isPresent ( payload . error ) ) {
209+ handleGraphQLError ( payload . error ) ;
210+ }
211+
212+ return mapToTestWorkflowHttpResult ( payload ) ;
213+ }
214+
215+ /**
216+ * Test an active workflow against a request and optional response without
217+ * saving it.
218+ */
219+ async testActive (
220+ options : TestWorkflowHttpOptions ,
221+ ) : Promise < TestWorkflowHttpResult > {
222+ const result = await this . graphql . mutation ( TestWorkflowActiveDocument , {
223+ input : buildTestWorkflowHttpInput ( options ) ,
224+ } ) ;
225+
226+ const payload = result . testWorkflowActive ;
227+
228+ if ( isPresent ( payload . error ) ) {
229+ handleGraphQLError ( payload . error ) ;
230+ }
231+
232+ return mapToTestWorkflowHttpResult ( payload ) ;
233+ }
150234}
0 commit comments