@elqnt/workflow 2.1.3 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +6 -0
  2. package/SKILL.md +442 -0
  3. package/dist/api/index.d.mts +1 -1
  4. package/dist/api/index.d.ts +1 -1
  5. package/dist/api/index.js +3 -4
  6. package/dist/api/index.js.map +1 -1
  7. package/dist/api/index.mjs +1 -2
  8. package/dist/chunk-3GG6KTGJ.js +998 -0
  9. package/dist/chunk-3GG6KTGJ.js.map +1 -0
  10. package/dist/{chunk-UE4ZBFLG.mjs → chunk-4AUWFGQK.mjs} +1 -3
  11. package/dist/{chunk-UE4ZBFLG.mjs.map → chunk-4AUWFGQK.mjs.map} +1 -1
  12. package/dist/{chunk-H24IF5AA.js → chunk-6DV2LPSN.js} +2 -4
  13. package/dist/chunk-6DV2LPSN.js.map +1 -0
  14. package/dist/chunk-AXXQSYT7.mjs +998 -0
  15. package/dist/chunk-AXXQSYT7.mjs.map +1 -0
  16. package/dist/{chunk-YCEGKVXP.mjs → chunk-IY5JCMLA.mjs} +1 -3
  17. package/dist/{chunk-YCEGKVXP.mjs.map → chunk-IY5JCMLA.mjs.map} +1 -1
  18. package/dist/{chunk-JES2EBNO.js → chunk-YCO5IFZK.js} +2 -4
  19. package/dist/chunk-YCO5IFZK.js.map +1 -0
  20. package/dist/components/index.d.mts +245 -0
  21. package/dist/components/index.d.ts +245 -0
  22. package/dist/components/index.js +10 -0
  23. package/dist/components/index.js.map +1 -0
  24. package/dist/components/index.mjs +10 -0
  25. package/dist/components/index.mjs.map +1 -0
  26. package/dist/hooks/index.d.mts +106 -17
  27. package/dist/hooks/index.d.ts +106 -17
  28. package/dist/hooks/index.js +403 -5
  29. package/dist/hooks/index.js.map +1 -1
  30. package/dist/hooks/index.mjs +404 -6
  31. package/dist/hooks/index.mjs.map +1 -1
  32. package/dist/index.d.mts +6 -247
  33. package/dist/index.d.ts +6 -247
  34. package/dist/index.js +8 -1006
  35. package/dist/index.js.map +1 -1
  36. package/dist/index.mjs +5 -1003
  37. package/dist/index.mjs.map +1 -1
  38. package/dist/models/index.d.mts +1 -1
  39. package/dist/models/index.d.ts +1 -1
  40. package/dist/models/index.js +3 -4
  41. package/dist/models/index.js.map +1 -1
  42. package/dist/models/index.mjs +1 -2
  43. package/dist/{workflow-NznrS9yA.d.ts → workflow-DcJCCEND.d.mts} +1 -1
  44. package/dist/{workflow-NznrS9yA.d.mts → workflow-DcJCCEND.d.ts} +1 -1
  45. package/package.json +12 -6
  46. package/dist/chunk-F5G2ALFS.js +0 -391
  47. package/dist/chunk-F5G2ALFS.js.map +0 -1
  48. package/dist/chunk-H24IF5AA.js.map +0 -1
  49. package/dist/chunk-JES2EBNO.js.map +0 -1
  50. package/dist/chunk-TZA3EPTC.mjs +0 -391
  51. package/dist/chunk-TZA3EPTC.mjs.map +0 -1
@@ -1,391 +0,0 @@
1
- "use client";
2
- import {
3
- createWorkflowApi,
4
- createWorkflowInstanceApi,
5
- deleteWorkflowApi,
6
- executeWorkflowNodeApi,
7
- getWorkflowApi,
8
- getWorkflowInstanceApi,
9
- getWorkflowTemplateApi,
10
- instantiateWorkflowTemplateApi,
11
- listWorkflowInstancesApi,
12
- listWorkflowTemplatesApi,
13
- listWorkflowsApi,
14
- resumeWorkflowNodeApi,
15
- retryWorkflowNodeApi,
16
- updateWorkflowApi,
17
- updateWorkflowInstanceStatusApi
18
- } from "./chunk-UE4ZBFLG.mjs";
19
-
20
- // hooks/index.ts
21
- import { useState, useCallback, useMemo, useRef, useEffect } from "react";
22
- function useWorkflows(options) {
23
- const [loading, setLoading] = useState(false);
24
- const [error, setError] = useState(null);
25
- const optionsRef = useRef(options);
26
- useEffect(() => {
27
- optionsRef.current = options;
28
- }, [options]);
29
- const listWorkflows = useCallback(async () => {
30
- setLoading(true);
31
- setError(null);
32
- try {
33
- const response = await listWorkflowsApi(optionsRef.current);
34
- if (response.error) {
35
- setError(response.error);
36
- return [];
37
- }
38
- return response.data?.definitions || [];
39
- } catch (err) {
40
- const message = err instanceof Error ? err.message : "Failed to load workflows";
41
- setError(message);
42
- return [];
43
- } finally {
44
- setLoading(false);
45
- }
46
- }, []);
47
- const getWorkflow = useCallback(async (workflowId) => {
48
- setLoading(true);
49
- setError(null);
50
- try {
51
- const response = await getWorkflowApi(workflowId, optionsRef.current);
52
- if (response.error) {
53
- setError(response.error);
54
- return null;
55
- }
56
- return response.data?.definition || null;
57
- } catch (err) {
58
- const message = err instanceof Error ? err.message : "Failed to get workflow";
59
- setError(message);
60
- return null;
61
- } finally {
62
- setLoading(false);
63
- }
64
- }, []);
65
- const createWorkflow = useCallback(
66
- async (workflow) => {
67
- setLoading(true);
68
- setError(null);
69
- try {
70
- const response = await createWorkflowApi(workflow, optionsRef.current);
71
- if (response.error) {
72
- setError(response.error);
73
- return null;
74
- }
75
- return response.data?.definition || null;
76
- } catch (err) {
77
- const message = err instanceof Error ? err.message : "Failed to create workflow";
78
- setError(message);
79
- return null;
80
- } finally {
81
- setLoading(false);
82
- }
83
- },
84
- []
85
- );
86
- const updateWorkflow = useCallback(
87
- async (workflowId, workflow) => {
88
- setLoading(true);
89
- setError(null);
90
- try {
91
- const response = await updateWorkflowApi(workflowId, workflow, optionsRef.current);
92
- if (response.error) {
93
- setError(response.error);
94
- return null;
95
- }
96
- return response.data?.definition || null;
97
- } catch (err) {
98
- const message = err instanceof Error ? err.message : "Failed to update workflow";
99
- setError(message);
100
- return null;
101
- } finally {
102
- setLoading(false);
103
- }
104
- },
105
- []
106
- );
107
- const deleteWorkflow = useCallback(async (workflowId) => {
108
- setLoading(true);
109
- setError(null);
110
- try {
111
- const response = await deleteWorkflowApi(workflowId, optionsRef.current);
112
- if (response.error) {
113
- setError(response.error);
114
- return false;
115
- }
116
- return response.data?.success ?? true;
117
- } catch (err) {
118
- const message = err instanceof Error ? err.message : "Failed to delete workflow";
119
- setError(message);
120
- return false;
121
- } finally {
122
- setLoading(false);
123
- }
124
- }, []);
125
- return useMemo(
126
- () => ({
127
- loading,
128
- error,
129
- listWorkflows,
130
- getWorkflow,
131
- createWorkflow,
132
- updateWorkflow,
133
- deleteWorkflow
134
- }),
135
- [loading, error, listWorkflows, getWorkflow, createWorkflow, updateWorkflow, deleteWorkflow]
136
- );
137
- }
138
- function useWorkflowInstances(options) {
139
- const [loading, setLoading] = useState(false);
140
- const [error, setError] = useState(null);
141
- const optionsRef = useRef(options);
142
- useEffect(() => {
143
- optionsRef.current = options;
144
- }, [options]);
145
- const listInstances = useCallback(
146
- async (definitionId, filters) => {
147
- setLoading(true);
148
- setError(null);
149
- try {
150
- const response = await listWorkflowInstancesApi(definitionId, {
151
- ...optionsRef.current,
152
- ...filters
153
- });
154
- if (response.error) {
155
- setError(response.error);
156
- return [];
157
- }
158
- return response.data?.instances || [];
159
- } catch (err) {
160
- const message = err instanceof Error ? err.message : "Failed to list instances";
161
- setError(message);
162
- return [];
163
- } finally {
164
- setLoading(false);
165
- }
166
- },
167
- []
168
- );
169
- const getInstance = useCallback(async (instanceId) => {
170
- setLoading(true);
171
- setError(null);
172
- try {
173
- const response = await getWorkflowInstanceApi(instanceId, optionsRef.current);
174
- if (response.error) {
175
- setError(response.error);
176
- return null;
177
- }
178
- return response.data?.instance || null;
179
- } catch (err) {
180
- const message = err instanceof Error ? err.message : "Failed to get instance";
181
- setError(message);
182
- return null;
183
- } finally {
184
- setLoading(false);
185
- }
186
- }, []);
187
- const createInstance = useCallback(
188
- async (definitionId, data) => {
189
- setLoading(true);
190
- setError(null);
191
- try {
192
- const response = await createWorkflowInstanceApi(definitionId, data || {}, optionsRef.current);
193
- if (response.error) {
194
- setError(response.error);
195
- return null;
196
- }
197
- return response.data?.instance || null;
198
- } catch (err) {
199
- const message = err instanceof Error ? err.message : "Failed to create instance";
200
- setError(message);
201
- return null;
202
- } finally {
203
- setLoading(false);
204
- }
205
- },
206
- []
207
- );
208
- const updateStatus = useCallback(
209
- async (instanceId, status) => {
210
- setLoading(true);
211
- setError(null);
212
- try {
213
- const response = await updateWorkflowInstanceStatusApi(instanceId, status, optionsRef.current);
214
- if (response.error) {
215
- setError(response.error);
216
- return null;
217
- }
218
- return response.data?.instance || null;
219
- } catch (err) {
220
- const message = err instanceof Error ? err.message : "Failed to update status";
221
- setError(message);
222
- return null;
223
- } finally {
224
- setLoading(false);
225
- }
226
- },
227
- []
228
- );
229
- const executeNode = useCallback(
230
- async (instanceId, nodeId, input) => {
231
- setLoading(true);
232
- setError(null);
233
- try {
234
- const response = await executeWorkflowNodeApi(instanceId, nodeId, input, optionsRef.current);
235
- if (response.error) {
236
- setError(response.error);
237
- return null;
238
- }
239
- return response.data?.output || null;
240
- } catch (err) {
241
- const message = err instanceof Error ? err.message : "Failed to execute node";
242
- setError(message);
243
- return null;
244
- } finally {
245
- setLoading(false);
246
- }
247
- },
248
- []
249
- );
250
- const resumeNode = useCallback(
251
- async (instanceId, nodeId, result) => {
252
- setLoading(true);
253
- setError(null);
254
- try {
255
- const response = await resumeWorkflowNodeApi(instanceId, nodeId, result, optionsRef.current);
256
- if (response.error) {
257
- setError(response.error);
258
- return null;
259
- }
260
- return response.data?.instance || null;
261
- } catch (err) {
262
- const message = err instanceof Error ? err.message : "Failed to resume node";
263
- setError(message);
264
- return null;
265
- } finally {
266
- setLoading(false);
267
- }
268
- },
269
- []
270
- );
271
- const retryNode = useCallback(
272
- async (instanceId, nodeId) => {
273
- setLoading(true);
274
- setError(null);
275
- try {
276
- const response = await retryWorkflowNodeApi(instanceId, nodeId, optionsRef.current);
277
- if (response.error) {
278
- setError(response.error);
279
- return null;
280
- }
281
- return response.data?.instance || null;
282
- } catch (err) {
283
- const message = err instanceof Error ? err.message : "Failed to retry node";
284
- setError(message);
285
- return null;
286
- } finally {
287
- setLoading(false);
288
- }
289
- },
290
- []
291
- );
292
- return useMemo(
293
- () => ({
294
- loading,
295
- error,
296
- listInstances,
297
- getInstance,
298
- createInstance,
299
- updateStatus,
300
- executeNode,
301
- resumeNode,
302
- retryNode
303
- }),
304
- [loading, error, listInstances, getInstance, createInstance, updateStatus, executeNode, resumeNode, retryNode]
305
- );
306
- }
307
- function useWorkflowTemplates(options) {
308
- const [loading, setLoading] = useState(false);
309
- const [error, setError] = useState(null);
310
- const optionsRef = useRef(options);
311
- useEffect(() => {
312
- optionsRef.current = options;
313
- }, [options]);
314
- const listTemplates = useCallback(async (category) => {
315
- setLoading(true);
316
- setError(null);
317
- try {
318
- const response = await listWorkflowTemplatesApi({
319
- ...optionsRef.current,
320
- category
321
- });
322
- if (response.error) {
323
- setError(response.error);
324
- return [];
325
- }
326
- return response.data?.templates || [];
327
- } catch (err) {
328
- const message = err instanceof Error ? err.message : "Failed to list templates";
329
- setError(message);
330
- return [];
331
- } finally {
332
- setLoading(false);
333
- }
334
- }, []);
335
- const getTemplate = useCallback(async (templateId) => {
336
- setLoading(true);
337
- setError(null);
338
- try {
339
- const response = await getWorkflowTemplateApi(templateId, optionsRef.current);
340
- if (response.error) {
341
- setError(response.error);
342
- return null;
343
- }
344
- return response.data?.template || null;
345
- } catch (err) {
346
- const message = err instanceof Error ? err.message : "Failed to get template";
347
- setError(message);
348
- return null;
349
- } finally {
350
- setLoading(false);
351
- }
352
- }, []);
353
- const instantiateTemplate = useCallback(
354
- async (templateId, params) => {
355
- setLoading(true);
356
- setError(null);
357
- try {
358
- const response = await instantiateWorkflowTemplateApi(templateId, params, optionsRef.current);
359
- if (response.error) {
360
- setError(response.error);
361
- return null;
362
- }
363
- return response.data?.definition || null;
364
- } catch (err) {
365
- const message = err instanceof Error ? err.message : "Failed to instantiate template";
366
- setError(message);
367
- return null;
368
- } finally {
369
- setLoading(false);
370
- }
371
- },
372
- []
373
- );
374
- return useMemo(
375
- () => ({
376
- loading,
377
- error,
378
- listTemplates,
379
- getTemplate,
380
- instantiateTemplate
381
- }),
382
- [loading, error, listTemplates, getTemplate, instantiateTemplate]
383
- );
384
- }
385
-
386
- export {
387
- useWorkflows,
388
- useWorkflowInstances,
389
- useWorkflowTemplates
390
- };
391
- //# sourceMappingURL=chunk-TZA3EPTC.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../hooks/index.ts"],"sourcesContent":["\"use client\";\n\n/**\n * Workflow hooks for React applications\n *\n * Provides React hooks for workflow operations with loading/error states.\n */\n\nimport { useState, useCallback, useMemo, useRef, useEffect } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport type { WorkflowDefinition, WorkflowInstance } from \"../models\";\nimport {\n listWorkflowsApi,\n getWorkflowApi,\n createWorkflowApi,\n updateWorkflowApi,\n deleteWorkflowApi,\n listWorkflowInstancesApi,\n getWorkflowInstanceApi,\n createWorkflowInstanceApi,\n updateWorkflowInstanceStatusApi,\n executeWorkflowNodeApi,\n resumeWorkflowNodeApi,\n retryWorkflowNodeApi,\n listWorkflowTemplatesApi,\n getWorkflowTemplateApi,\n instantiateWorkflowTemplateApi,\n type WorkflowTemplate,\n} from \"../api\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type UseWorkflowsOptions = ApiClientOptions;\n\n// =============================================================================\n// USE WORKFLOWS HOOK\n// =============================================================================\n\n/**\n * Hook for workflow definition CRUD operations\n *\n * @example\n * ```tsx\n * const { loading, error, listWorkflows, createWorkflow } = useWorkflows({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * });\n *\n * const workflows = await listWorkflows();\n * ```\n */\nexport function useWorkflows(options: UseWorkflowsOptions) {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const optionsRef = useRef(options);\n useEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n const listWorkflows = useCallback(async (): Promise<WorkflowDefinition[]> => {\n setLoading(true);\n setError(null);\n try {\n const response = await listWorkflowsApi(optionsRef.current);\n if (response.error) {\n setError(response.error);\n return [];\n }\n return response.data?.definitions || [];\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to load workflows\";\n setError(message);\n return [];\n } finally {\n setLoading(false);\n }\n }, []);\n\n const getWorkflow = useCallback(async (workflowId: string): Promise<WorkflowDefinition | null> => {\n setLoading(true);\n setError(null);\n try {\n const response = await getWorkflowApi(workflowId, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return null;\n }\n return response.data?.definition || null;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to get workflow\";\n setError(message);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const createWorkflow = useCallback(\n async (workflow: Partial<WorkflowDefinition>): Promise<WorkflowDefinition | null> => {\n setLoading(true);\n setError(null);\n try {\n const response = await createWorkflowApi(workflow, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return null;\n }\n return response.data?.definition || null;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to create workflow\";\n setError(message);\n return null;\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n const updateWorkflow = useCallback(\n async (workflowId: string, workflow: Partial<WorkflowDefinition>): Promise<WorkflowDefinition | null> => {\n setLoading(true);\n setError(null);\n try {\n const response = await updateWorkflowApi(workflowId, workflow, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return null;\n }\n return response.data?.definition || null;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to update workflow\";\n setError(message);\n return null;\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n const deleteWorkflow = useCallback(async (workflowId: string): Promise<boolean> => {\n setLoading(true);\n setError(null);\n try {\n const response = await deleteWorkflowApi(workflowId, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return false;\n }\n return response.data?.success ?? true;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to delete workflow\";\n setError(message);\n return false;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return useMemo(\n () => ({\n loading,\n error,\n listWorkflows,\n getWorkflow,\n createWorkflow,\n updateWorkflow,\n deleteWorkflow,\n }),\n [loading, error, listWorkflows, getWorkflow, createWorkflow, updateWorkflow, deleteWorkflow]\n );\n}\n\n// =============================================================================\n// USE WORKFLOW INSTANCES HOOK\n// =============================================================================\n\n/**\n * Hook for workflow instance operations\n */\nexport function useWorkflowInstances(options: UseWorkflowsOptions) {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const optionsRef = useRef(options);\n useEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n const listInstances = useCallback(\n async (\n definitionId: string,\n filters?: { userId?: string; status?: string }\n ): Promise<WorkflowInstance[]> => {\n setLoading(true);\n setError(null);\n try {\n const response = await listWorkflowInstancesApi(definitionId, {\n ...optionsRef.current,\n ...filters,\n });\n if (response.error) {\n setError(response.error);\n return [];\n }\n return response.data?.instances || [];\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to list instances\";\n setError(message);\n return [];\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n const getInstance = useCallback(async (instanceId: string): Promise<WorkflowInstance | null> => {\n setLoading(true);\n setError(null);\n try {\n const response = await getWorkflowInstanceApi(instanceId, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return null;\n }\n return response.data?.instance || null;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to get instance\";\n setError(message);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const createInstance = useCallback(\n async (\n definitionId: string,\n data?: { variables?: Record<string, unknown>; autoExecute?: boolean }\n ): Promise<WorkflowInstance | null> => {\n setLoading(true);\n setError(null);\n try {\n const response = await createWorkflowInstanceApi(definitionId, data || {}, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return null;\n }\n return response.data?.instance || null;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to create instance\";\n setError(message);\n return null;\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n const updateStatus = useCallback(\n async (instanceId: string, status: string): Promise<WorkflowInstance | null> => {\n setLoading(true);\n setError(null);\n try {\n const response = await updateWorkflowInstanceStatusApi(instanceId, status, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return null;\n }\n return response.data?.instance || null;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to update status\";\n setError(message);\n return null;\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n const executeNode = useCallback(\n async (\n instanceId: string,\n nodeId: string,\n input: Record<string, unknown>\n ): Promise<Record<string, unknown> | null> => {\n setLoading(true);\n setError(null);\n try {\n const response = await executeWorkflowNodeApi(instanceId, nodeId, input, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return null;\n }\n return response.data?.output || null;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to execute node\";\n setError(message);\n return null;\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n const resumeNode = useCallback(\n async (\n instanceId: string,\n nodeId: string,\n result: Record<string, unknown>\n ): Promise<WorkflowInstance | null> => {\n setLoading(true);\n setError(null);\n try {\n const response = await resumeWorkflowNodeApi(instanceId, nodeId, result, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return null;\n }\n return response.data?.instance || null;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to resume node\";\n setError(message);\n return null;\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n const retryNode = useCallback(\n async (instanceId: string, nodeId: string): Promise<WorkflowInstance | null> => {\n setLoading(true);\n setError(null);\n try {\n const response = await retryWorkflowNodeApi(instanceId, nodeId, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return null;\n }\n return response.data?.instance || null;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to retry node\";\n setError(message);\n return null;\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n return useMemo(\n () => ({\n loading,\n error,\n listInstances,\n getInstance,\n createInstance,\n updateStatus,\n executeNode,\n resumeNode,\n retryNode,\n }),\n [loading, error, listInstances, getInstance, createInstance, updateStatus, executeNode, resumeNode, retryNode]\n );\n}\n\n// =============================================================================\n// USE WORKFLOW TEMPLATES HOOK\n// =============================================================================\n\n/**\n * Hook for workflow template operations\n */\nexport function useWorkflowTemplates(options: UseWorkflowsOptions) {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const optionsRef = useRef(options);\n useEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n const listTemplates = useCallback(async (category?: string): Promise<WorkflowTemplate[]> => {\n setLoading(true);\n setError(null);\n try {\n const response = await listWorkflowTemplatesApi({\n ...optionsRef.current,\n category,\n });\n if (response.error) {\n setError(response.error);\n return [];\n }\n return response.data?.templates || [];\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to list templates\";\n setError(message);\n return [];\n } finally {\n setLoading(false);\n }\n }, []);\n\n const getTemplate = useCallback(async (templateId: string): Promise<WorkflowTemplate | null> => {\n setLoading(true);\n setError(null);\n try {\n const response = await getWorkflowTemplateApi(templateId, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return null;\n }\n return response.data?.template || null;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to get template\";\n setError(message);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const instantiateTemplate = useCallback(\n async (\n templateId: string,\n params: { variables: Record<string, unknown>; title?: string }\n ): Promise<WorkflowDefinition | null> => {\n setLoading(true);\n setError(null);\n try {\n const response = await instantiateWorkflowTemplateApi(templateId, params, optionsRef.current);\n if (response.error) {\n setError(response.error);\n return null;\n }\n return response.data?.definition || null;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to instantiate template\";\n setError(message);\n return null;\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n return useMemo(\n () => ({\n loading,\n error,\n listTemplates,\n getTemplate,\n instantiateTemplate,\n }),\n [loading, error, listTemplates, getTemplate, instantiateTemplate]\n );\n}\n"],"mappings":"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","names":[]}