{"version":3,"sources":["/Users/shyun/comcom/ain-enterprise/ain-adk/dist/cjs/chunk-XPFRENHE.cjs","../../src/controllers/api/workflow-template.api.controller.ts"],"names":[],"mappings":"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","file":"/Users/shyun/comcom/ain-enterprise/ain-adk/dist/cjs/chunk-XPFRENHE.cjs","sourcesContent":[null,"import type { NextFunction, Request, Response } from \"express\";\nimport { StatusCodes } from \"http-status-codes\";\nimport type { MemoryModule } from \"@/modules/index.js\";\nimport type { WorkflowExecutionService } from \"@/services/workflow-execution.service.js\";\nimport { validateWorkflowDefinition } from \"@/services/workflow-variable-resolver.service.js\";\nimport { AinHttpError } from \"@/types/agent.js\";\nimport type { WorkflowTemplate } from \"@/types/memory\";\nimport { streamEventsToSSE } from \"@/utils/sse-stream.js\";\n\nexport class WorkflowTemplateApiController {\n\tprivate memoryModule: MemoryModule;\n\tprivate workflowExecutionService: WorkflowExecutionService;\n\n\tconstructor(\n\t\tmemoryModule: MemoryModule,\n\t\tworkflowExecutionService: WorkflowExecutionService,\n\t) {\n\t\tthis.memoryModule = memoryModule;\n\t\tthis.workflowExecutionService = workflowExecutionService;\n\t}\n\n\tpublic handleGetAllTemplates = async (\n\t\treq: Request,\n\t\tres: Response,\n\t\tnext: NextFunction,\n\t) => {\n\t\ttry {\n\t\t\tconst includeHidden = req.query.includeHidden === \"true\";\n\t\t\tconst templateMemory = this.memoryModule.getWorkflowTemplateMemory();\n\t\t\tconst templates = await templateMemory.listTemplates();\n\t\t\tres.json(includeHidden ? templates : templates.filter((t) => !t.hidden));\n\t\t} catch (error) {\n\t\t\tnext(error);\n\t\t}\n\t};\n\n\tpublic handleGetTemplate = async (\n\t\treq: Request,\n\t\tres: Response,\n\t\tnext: NextFunction,\n\t) => {\n\t\ttry {\n\t\t\tconst { id } = req.params as { id: string };\n\t\t\tconst templateMemory = this.memoryModule.getWorkflowTemplateMemory();\n\t\t\tconst template = await templateMemory.getTemplate(id);\n\t\t\tif (!template) {\n\t\t\t\tres.status(StatusCodes.NOT_FOUND).send();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tres.json(template);\n\t\t} catch (error) {\n\t\t\tnext(error);\n\t\t}\n\t};\n\n\tpublic handleCreateTemplate = async (\n\t\treq: Request,\n\t\tres: Response,\n\t\tnext: NextFunction,\n\t) => {\n\t\ttry {\n\t\t\tconst template = req.body as WorkflowTemplate;\n\t\t\tif (!template.definition) {\n\t\t\t\tthrow new AinHttpError(\n\t\t\t\t\tStatusCodes.BAD_REQUEST,\n\t\t\t\t\t\"definition is required\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tvalidateWorkflowDefinition(template.definition);\n\t\t\tconst templateMemory = this.memoryModule.getWorkflowTemplateMemory();\n\t\t\tconst created = await templateMemory.createTemplate(template);\n\t\t\tres.status(StatusCodes.CREATED).json(created);\n\t\t} catch (error) {\n\t\t\tnext(error);\n\t\t}\n\t};\n\n\tpublic handleUpdateTemplate = async (\n\t\treq: Request,\n\t\tres: Response,\n\t\tnext: NextFunction,\n\t) => {\n\t\ttry {\n\t\t\tconst { id } = req.params as { id: string };\n\t\t\tconst template = req.body as Partial<WorkflowTemplate>;\n\t\t\tif (Object.hasOwn(template, \"definition\")) {\n\t\t\t\tif (!template.definition) {\n\t\t\t\t\tthrow new AinHttpError(\n\t\t\t\t\t\tStatusCodes.BAD_REQUEST,\n\t\t\t\t\t\t\"definition is required\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tvalidateWorkflowDefinition(template.definition);\n\t\t\t}\n\t\t\tconst templateMemory = this.memoryModule.getWorkflowTemplateMemory();\n\t\t\tawait templateMemory.updateTemplate(id, template);\n\t\t\tres.status(StatusCodes.OK).send();\n\t\t} catch (error) {\n\t\t\tnext(error);\n\t\t}\n\t};\n\n\tpublic handleDeleteTemplate = async (\n\t\treq: Request,\n\t\tres: Response,\n\t\tnext: NextFunction,\n\t) => {\n\t\ttry {\n\t\t\tconst { id } = req.params as { id: string };\n\t\t\tconst templateMemory = this.memoryModule.getWorkflowTemplateMemory();\n\t\t\tawait templateMemory.deleteTemplate(id);\n\t\t\tres.status(StatusCodes.OK).send();\n\t\t} catch (error) {\n\t\t\tnext(error);\n\t\t}\n\t};\n\n\tpublic handleRunTemplateStream = async (\n\t\treq: Request,\n\t\tres: Response,\n\t\tnext: NextFunction,\n\t) => {\n\t\tconst userId = res.locals.userId || \"\";\n\t\tconst { id } = req.params as { id: string };\n\n\t\t// Existence is checked here, before the SSE layer writes its 200 headers, so\n\t\t// a missing template comes back as a real HTTP 404 the caller can branch on —\n\t\t// and as a logged line. Once streamEventsToSSE starts, every failure can only\n\t\t// reach the client as an SSE error event on an already-successful response.\n\t\ttry {\n\t\t\tconst templateMemory = this.memoryModule.getWorkflowTemplateMemory();\n\t\t\tconst template = await templateMemory.getTemplate(id);\n\t\t\tif (!template) {\n\t\t\t\tthrow new AinHttpError(\n\t\t\t\t\tStatusCodes.NOT_FOUND,\n\t\t\t\t\t`Workflow template not found: ${id}`,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tnext(error);\n\t\t\treturn;\n\t\t}\n\n\t\tawait streamEventsToSSE(req, res, {\n\t\t\tlogLabel: \"Workflow template run stream\",\n\t\t\tuserId,\n\t\t\tlogContext: { templateId: id },\n\t\t\tsetup: async (signal) => {\n\t\t\t\tconst { executionVariables } = req.body as {\n\t\t\t\t\texecutionVariables?: Record<string, string>;\n\t\t\t\t};\n\t\t\t\treturn this.workflowExecutionService.runTemplateStream(\n\t\t\t\t\tid,\n\t\t\t\t\t{ userId, executionVariables },\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t};\n}\n"]}