create flow

Script windmill Verified

by admin ยท 8/13/2023

The script

Submitted by admin Typescript (fetch-only)
Verified 370 days ago
1
/**
2
 * create flow
3
 *
4
 */
5
export async function main(
6
  workspace: string,
7
  body: ({
8
    summary: string;
9
    description?: string;
10
    value: {
11
      modules: {
12
        id: string;
13
        value:
14
          | {
15
              input_transforms: {
16
                [k: string]:
17
                  | {
18
                      value?: unknown;
19
                      type: "javascript";
20
                      [k: string]: unknown;
21
                    }
22
                  | { expr: string; type: "javascript"; [k: string]: unknown };
23
              };
24
              content: string;
25
              language:
26
                | "deno"
27
                | "bun"
28
                | "python3"
29
                | "go"
30
                | "bash"
31
                | "powershell"
32
                | "postgresql"
33
                | "mysql"
34
                | "bigquery"
35
                | "snowflake"
36
                | "mssql"
37
                | "graphql"
38
                | "nativets";
39
              path?: string;
40
              lock?: string;
41
              type: "rawscript";
42
              tag?: string;
43
              concurrent_limit?: number;
44
              concurrency_time_window_s?: number;
45
              [k: string]: unknown;
46
            }
47
          | {
48
              input_transforms: {
49
                [k: string]:
50
                  | {
51
                      value?: unknown;
52
                      type: "javascript";
53
                      [k: string]: unknown;
54
                    }
55
                  | { expr: string; type: "javascript"; [k: string]: unknown };
56
              };
57
              path: string;
58
              hash?: string;
59
              type: "script";
60
              [k: string]: unknown;
61
            }
62
          | {
63
              input_transforms: {
64
                [k: string]:
65
                  | {
66
                      value?: unknown;
67
                      type: "javascript";
68
                      [k: string]: unknown;
69
                    }
70
                  | { expr: string; type: "javascript"; [k: string]: unknown };
71
              };
72
              path: string;
73
              type: "flow";
74
              [k: string]: unknown;
75
            }
76
          | {
77
              modules: { [k: string]: unknown }[];
78
              iterator:
79
                | { value?: unknown; type: "javascript"; [k: string]: unknown }
80
                | { expr: string; type: "javascript"; [k: string]: unknown };
81
              skip_failures: boolean;
82
              type: "forloopflow";
83
              parallel?: boolean;
84
              parallelism?: number;
85
              [k: string]: unknown;
86
            }
87
          | {
88
              branches: {
89
                summary?: string;
90
                expr: string;
91
                modules: { [k: string]: unknown }[];
92
                [k: string]: unknown;
93
              }[];
94
              default: { [k: string]: unknown }[];
95
              type: "branchone";
96
              [k: string]: unknown;
97
            }
98
          | {
99
              branches: {
100
                summary?: string;
101
                skip_failure?: boolean;
102
                modules: { [k: string]: unknown }[];
103
                [k: string]: unknown;
104
              }[];
105
              type: "branchall";
106
              parallel?: boolean;
107
              [k: string]: unknown;
108
            }
109
          | { type: "identity"; flow?: boolean; [k: string]: unknown };
110
        stop_after_if?: {
111
          skip_if_stopped?: boolean;
112
          expr: string;
113
          [k: string]: unknown;
114
        };
115
        sleep?:
116
          | { value?: unknown; type: "javascript"; [k: string]: unknown }
117
          | { expr: string; type: "javascript"; [k: string]: unknown };
118
        cache_ttl?: number;
119
        timeout?: number;
120
        delete_after_use?: boolean;
121
        summary?: string;
122
        mock?: {
123
          enabled?: boolean;
124
          return_value?: unknown;
125
          [k: string]: unknown;
126
        };
127
        suspend?: {
128
          required_events?: number;
129
          timeout?: number;
130
          resume_form?: {
131
            schema?: { [k: string]: unknown };
132
            [k: string]: unknown;
133
          };
134
          user_auth_required?: boolean;
135
          user_groups_required?:
136
            | { value?: unknown; type: "javascript"; [k: string]: unknown }
137
            | { expr: string; type: "javascript"; [k: string]: unknown };
138
          self_approval_disabled?: boolean;
139
          [k: string]: unknown;
140
        };
141
        priority?: number;
142
        retry?: {
143
          constant?: {
144
            attempts?: number;
145
            seconds?: number;
146
            [k: string]: unknown;
147
          };
148
          exponential?: {
149
            attempts?: number;
150
            multiplier?: number;
151
            seconds?: number;
152
            random_factor?: number;
153
            [k: string]: unknown;
154
          };
155
          [k: string]: unknown;
156
        };
157
        [k: string]: unknown;
158
      }[];
159
      failure_module?: {
160
        id: string;
161
        value:
162
          | {
163
              input_transforms: {
164
                [k: string]:
165
                  | {
166
                      value?: unknown;
167
                      type: "javascript";
168
                      [k: string]: unknown;
169
                    }
170
                  | { expr: string; type: "javascript"; [k: string]: unknown };
171
              };
172
              content: string;
173
              language:
174
                | "deno"
175
                | "bun"
176
                | "python3"
177
                | "go"
178
                | "bash"
179
                | "powershell"
180
                | "postgresql"
181
                | "mysql"
182
                | "bigquery"
183
                | "snowflake"
184
                | "mssql"
185
                | "graphql"
186
                | "nativets";
187
              path?: string;
188
              lock?: string;
189
              type: "rawscript";
190
              tag?: string;
191
              concurrent_limit?: number;
192
              concurrency_time_window_s?: number;
193
              [k: string]: unknown;
194
            }
195
          | {
196
              input_transforms: {
197
                [k: string]:
198
                  | {
199
                      value?: unknown;
200
                      type: "javascript";
201
                      [k: string]: unknown;
202
                    }
203
                  | { expr: string; type: "javascript"; [k: string]: unknown };
204
              };
205
              path: string;
206
              hash?: string;
207
              type: "script";
208
              [k: string]: unknown;
209
            }
210
          | {
211
              input_transforms: {
212
                [k: string]:
213
                  | {
214
                      value?: unknown;
215
                      type: "javascript";
216
                      [k: string]: unknown;
217
                    }
218
                  | { expr: string; type: "javascript"; [k: string]: unknown };
219
              };
220
              path: string;
221
              type: "flow";
222
              [k: string]: unknown;
223
            }
224
          | {
225
              modules: { [k: string]: unknown }[];
226
              iterator:
227
                | { value?: unknown; type: "javascript"; [k: string]: unknown }
228
                | { expr: string; type: "javascript"; [k: string]: unknown };
229
              skip_failures: boolean;
230
              type: "forloopflow";
231
              parallel?: boolean;
232
              parallelism?: number;
233
              [k: string]: unknown;
234
            }
235
          | {
236
              branches: {
237
                summary?: string;
238
                expr: string;
239
                modules: { [k: string]: unknown }[];
240
                [k: string]: unknown;
241
              }[];
242
              default: { [k: string]: unknown }[];
243
              type: "branchone";
244
              [k: string]: unknown;
245
            }
246
          | {
247
              branches: {
248
                summary?: string;
249
                skip_failure?: boolean;
250
                modules: { [k: string]: unknown }[];
251
                [k: string]: unknown;
252
              }[];
253
              type: "branchall";
254
              parallel?: boolean;
255
              [k: string]: unknown;
256
            }
257
          | { type: "identity"; flow?: boolean; [k: string]: unknown };
258
        stop_after_if?: {
259
          skip_if_stopped?: boolean;
260
          expr: string;
261
          [k: string]: unknown;
262
        };
263
        sleep?:
264
          | { value?: unknown; type: "javascript"; [k: string]: unknown }
265
          | { expr: string; type: "javascript"; [k: string]: unknown };
266
        cache_ttl?: number;
267
        timeout?: number;
268
        delete_after_use?: boolean;
269
        summary?: string;
270
        mock?: {
271
          enabled?: boolean;
272
          return_value?: unknown;
273
          [k: string]: unknown;
274
        };
275
        suspend?: {
276
          required_events?: number;
277
          timeout?: number;
278
          resume_form?: {
279
            schema?: { [k: string]: unknown };
280
            [k: string]: unknown;
281
          };
282
          user_auth_required?: boolean;
283
          user_groups_required?:
284
            | { value?: unknown; type: "javascript"; [k: string]: unknown }
285
            | { expr: string; type: "javascript"; [k: string]: unknown };
286
          self_approval_disabled?: boolean;
287
          [k: string]: unknown;
288
        };
289
        priority?: number;
290
        retry?: {
291
          constant?: {
292
            attempts?: number;
293
            seconds?: number;
294
            [k: string]: unknown;
295
          };
296
          exponential?: {
297
            attempts?: number;
298
            multiplier?: number;
299
            seconds?: number;
300
            random_factor?: number;
301
            [k: string]: unknown;
302
          };
303
          [k: string]: unknown;
304
        };
305
        [k: string]: unknown;
306
      };
307
      same_worker?: boolean;
308
      concurrent_limit?: number;
309
      concurrency_time_window_s?: number;
310
      skip_expr?: string;
311
      cache_ttl?: number;
312
      priority?: number;
313
      early_return?: string;
314
      [k: string]: unknown;
315
    };
316
    schema?: { [k: string]: unknown };
317
    [k: string]: unknown;
318
  } & {
319
    path: string;
320
    tag?: string;
321
    ws_error_handler_muted?: boolean;
322
    priority?: number;
323
    dedicated_worker?: boolean;
324
    timeout?: number;
325
    [k: string]: unknown;
326
  }) & {
327
    draft_only?: boolean;
328
    deployment_message?: string;
329
    [k: string]: unknown;
330
  }
331
) {
332
  const url = new URL(`${BASE_URL}/api/w/${workspace}/flows/create`);
333

334
  const response = await fetch(url, {
335
    method: "POST",
336
    headers: {
337
      "Content-Type": "application/json",
338
      Authorization: "Bearer " + WM_TOKEN,
339
    },
340
    body: JSON.stringify(body),
341
  });
342
  if (!response.ok) {
343
    const text = await response.text();
344
    throw new Error(`${response.status} ${text}`);
345
  }
346
  return await response.text();
347
}
348