Skip to content

Commit b83363e

Browse files
authored
Merge pull request #42 from caido/amr/eng-878-sdk-client-add-workflowstestpassive-and-testactive
Add WorkflowSDK.testPassive() and testActive() methods
2 parents 4dbc5e0 + 45c6486 commit b83363e

6 files changed

Lines changed: 999 additions & 2 deletions

File tree

packages/sdk-client/src/sdks/workflow.ts

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
import { encodeBlob } from "@/convert/blob.js";
22
import {
33
mapToTestWorkflowConvertResult,
4+
mapToTestWorkflowHttpResult,
45
mapToWorkflow,
56
} from "@/convert/workflow.js";
67
import {
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";
2228
import type { Workflow as WorkflowType } from "@/types/workflow.js";
2329
import { handleGraphQLError } from "@/utils/errors.js";
2430
import { 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

Comments
 (0)