@shipfox/api-workflows 7.1.0 → 9.0.1

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 (153) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +80 -0
  3. package/dist/core/agent-defaults.d.ts +2 -1
  4. package/dist/core/agent-defaults.d.ts.map +1 -1
  5. package/dist/core/agent-defaults.js.map +1 -1
  6. package/dist/core/agent-tools.d.ts +5 -2
  7. package/dist/core/agent-tools.d.ts.map +1 -1
  8. package/dist/core/agent-tools.js.map +1 -1
  9. package/dist/core/checkout.d.ts +2 -2
  10. package/dist/core/checkout.d.ts.map +1 -1
  11. package/dist/core/checkout.js.map +1 -1
  12. package/dist/core/entities/step.d.ts +2 -1
  13. package/dist/core/entities/step.d.ts.map +1 -1
  14. package/dist/core/entities/step.js.map +1 -1
  15. package/dist/core/errors.d.ts +0 -4
  16. package/dist/core/errors.d.ts.map +1 -1
  17. package/dist/core/errors.js +0 -6
  18. package/dist/core/errors.js.map +1 -1
  19. package/dist/core/job-execution.d.ts +0 -2
  20. package/dist/core/job-execution.d.ts.map +1 -1
  21. package/dist/core/job-execution.js +3 -7
  22. package/dist/core/job-execution.js.map +1 -1
  23. package/dist/core/run-workflow.d.ts +2 -2
  24. package/dist/core/run-workflow.d.ts.map +1 -1
  25. package/dist/core/run-workflow.js.map +1 -1
  26. package/dist/core/step-config/agent.d.ts +1 -1
  27. package/dist/core/step-config/agent.d.ts.map +1 -1
  28. package/dist/core/step-config/agent.js.map +1 -1
  29. package/dist/db/job-listeners.d.ts +2 -2
  30. package/dist/db/job-listeners.d.ts.map +1 -1
  31. package/dist/db/job-listeners.js.map +1 -1
  32. package/dist/db/workflow-runs/job-executions.d.ts +0 -5
  33. package/dist/db/workflow-runs/job-executions.d.ts.map +1 -1
  34. package/dist/db/workflow-runs/job-executions.js +0 -7
  35. package/dist/db/workflow-runs/job-executions.js.map +1 -1
  36. package/dist/db/workflow-runs/run-create.d.ts +2 -2
  37. package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
  38. package/dist/db/workflow-runs/run-create.js.map +1 -1
  39. package/dist/db/workflow-runs.d.ts +1 -1
  40. package/dist/db/workflow-runs.d.ts.map +1 -1
  41. package/dist/db/workflow-runs.js +1 -1
  42. package/dist/db/workflow-runs.js.map +1 -1
  43. package/dist/index.d.ts +2 -2
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +2 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/presentation/inter-module.d.ts +2 -2
  48. package/dist/presentation/inter-module.d.ts.map +1 -1
  49. package/dist/presentation/inter-module.js +2 -1
  50. package/dist/presentation/inter-module.js.map +1 -1
  51. package/dist/presentation/routes/cancel-run.d.ts +1 -1
  52. package/dist/presentation/routes/cancel-run.d.ts.map +1 -1
  53. package/dist/presentation/routes/cancel-run.js.map +1 -1
  54. package/dist/presentation/routes/checkout-token.d.ts +2 -2
  55. package/dist/presentation/routes/checkout-token.d.ts.map +1 -1
  56. package/dist/presentation/routes/checkout-token.js +1 -1
  57. package/dist/presentation/routes/checkout-token.js.map +1 -1
  58. package/dist/presentation/routes/get-run-aggregates.d.ts +1 -1
  59. package/dist/presentation/routes/get-run-aggregates.d.ts.map +1 -1
  60. package/dist/presentation/routes/get-run-aggregates.js.map +1 -1
  61. package/dist/presentation/routes/get-run.d.ts +1 -1
  62. package/dist/presentation/routes/get-run.d.ts.map +1 -1
  63. package/dist/presentation/routes/get-run.js.map +1 -1
  64. package/dist/presentation/routes/index.d.ts +2 -2
  65. package/dist/presentation/routes/index.d.ts.map +1 -1
  66. package/dist/presentation/routes/index.js.map +1 -1
  67. package/dist/presentation/routes/list-run-attempts.d.ts +1 -1
  68. package/dist/presentation/routes/list-run-attempts.d.ts.map +1 -1
  69. package/dist/presentation/routes/list-run-attempts.js.map +1 -1
  70. package/dist/presentation/routes/list-runs.d.ts +1 -1
  71. package/dist/presentation/routes/list-runs.d.ts.map +1 -1
  72. package/dist/presentation/routes/list-runs.js.map +1 -1
  73. package/dist/presentation/routes/next-step.d.ts.map +1 -1
  74. package/dist/presentation/routes/next-step.js +11 -8
  75. package/dist/presentation/routes/next-step.js.map +1 -1
  76. package/dist/presentation/routes/project-access.d.ts +1 -1
  77. package/dist/presentation/routes/project-access.d.ts.map +1 -1
  78. package/dist/presentation/routes/project-access.js.map +1 -1
  79. package/dist/presentation/routes/require-accessible-run.d.ts +1 -1
  80. package/dist/presentation/routes/require-accessible-run.d.ts.map +1 -1
  81. package/dist/presentation/routes/require-accessible-run.js.map +1 -1
  82. package/dist/presentation/routes/rerun-run.d.ts +1 -1
  83. package/dist/presentation/routes/rerun-run.d.ts.map +1 -1
  84. package/dist/presentation/routes/rerun-run.js.map +1 -1
  85. package/dist/temporal/activities/index.d.ts +2 -2
  86. package/dist/temporal/activities/index.d.ts.map +1 -1
  87. package/dist/temporal/activities/index.js.map +1 -1
  88. package/dist/temporal/activities/orchestration-activities.d.ts +2 -2
  89. package/dist/temporal/activities/orchestration-activities.d.ts.map +1 -1
  90. package/dist/temporal/activities/orchestration-activities.js.map +1 -1
  91. package/dist/tsconfig.test.tsbuildinfo +1 -1
  92. package/package.json +26 -28
  93. package/src/core/agent-defaults.ts +2 -1
  94. package/src/core/agent-tool-capability-warning.test.ts +26 -56
  95. package/src/core/agent-tools.ts +9 -7
  96. package/src/core/checkout.test.ts +2 -2
  97. package/src/core/checkout.ts +2 -2
  98. package/src/core/entities/step.ts +1 -2
  99. package/src/core/errors.ts +0 -7
  100. package/src/core/job-execution.ts +3 -10
  101. package/src/core/run-workflow.test.ts +22 -55
  102. package/src/core/run-workflow.ts +2 -2
  103. package/src/core/step-config/agent.ts +1 -1
  104. package/src/core/step-config/materialize-job-execution-steps.test.ts +1 -2
  105. package/src/core/step-config/materialize-workflow-model.test.ts +10 -13
  106. package/src/db/job-listeners.ts +2 -2
  107. package/src/db/workflow-runs/job-executions.ts +0 -21
  108. package/src/db/workflow-runs/run-create.test.ts +30 -23
  109. package/src/db/workflow-runs/run-create.ts +2 -2
  110. package/src/db/workflow-runs.ts +0 -1
  111. package/src/index.ts +3 -3
  112. package/src/presentation/dto/checkout-token.test.ts +7 -1
  113. package/src/presentation/inter-module.ts +4 -7
  114. package/src/presentation/routes/agent-runtime-config.test.ts +40 -132
  115. package/src/presentation/routes/cancel-run.test.ts +1 -1
  116. package/src/presentation/routes/cancel-run.ts +1 -1
  117. package/src/presentation/routes/checkout-token.test.ts +4 -37
  118. package/src/presentation/routes/checkout-token.ts +2 -2
  119. package/src/presentation/routes/get-run-aggregates.test.ts +1 -1
  120. package/src/presentation/routes/get-run-aggregates.ts +1 -1
  121. package/src/presentation/routes/get-run.test.ts +1 -1
  122. package/src/presentation/routes/get-run.ts +1 -1
  123. package/src/presentation/routes/get-step-secrets.test.ts +2 -2
  124. package/src/presentation/routes/index.test.ts +3 -3
  125. package/src/presentation/routes/index.ts +2 -2
  126. package/src/presentation/routes/list-run-attempts.test.ts +1 -1
  127. package/src/presentation/routes/list-run-attempts.ts +1 -1
  128. package/src/presentation/routes/list-runs.test.ts +1 -1
  129. package/src/presentation/routes/list-runs.ts +1 -1
  130. package/src/presentation/routes/next-step.test.ts +27 -69
  131. package/src/presentation/routes/next-step.ts +9 -5
  132. package/src/presentation/routes/project-access.ts +1 -1
  133. package/src/presentation/routes/report-step.test.ts +2 -3
  134. package/src/presentation/routes/require-accessible-run.ts +1 -1
  135. package/src/presentation/routes/rerun-run.test.ts +1 -1
  136. package/src/presentation/routes/rerun-run.ts +1 -1
  137. package/src/temporal/activities/index.ts +2 -2
  138. package/src/temporal/activities/orchestration-activities.ts +2 -2
  139. package/test/factories/workflow-model.ts +3 -1
  140. package/test/fixtures/active-lease-token.ts +5 -32
  141. package/test/fixtures/agent-inter-module.ts +32 -1
  142. package/test/fixtures/auth-inter-module.ts +2 -13
  143. package/test/fixtures/lease-token.ts +43 -29
  144. package/test/fixtures/projects-inter-module.ts +1 -1
  145. package/test/fixtures/runners-inter-module.ts +40 -48
  146. package/test/globalSetup.ts +0 -38
  147. package/test/setup.ts +2 -0
  148. package/tsconfig.build.tsbuildinfo +1 -1
  149. package/dist/db/runner-lease-table.d.ts +0 -469
  150. package/dist/db/runner-lease-table.d.ts.map +0 -1
  151. package/dist/db/runner-lease-table.js +0 -43
  152. package/dist/db/runner-lease-table.js.map +0 -1
  153. package/src/db/runner-lease-table.ts +0 -39
@@ -1 +1 @@
1
- {"version":3,"file":"job-executions.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/job-executions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"job-executions.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/job-executions.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,6 @@ import { deriveCompletion, isTerminal } from '#core/step-transition/decide-step-
7
7
  import { recordWorkflowJobExecutionLeaseExpiryResolved, recordWorkflowJobExecutionQueued, recordWorkflowJobExecutionStarted, recordWorkflowJobExecutionStatusChanged, recordWorkflowJobExecutionTimedOut } from '#metrics/instance.js';
8
8
  import { db } from '../db.js';
9
9
  import { writeWorkflowsOutboxEvent } from '../outbox-writes.js';
10
- import { runningJobExecutions } from '../runner-lease-table.js';
11
10
  import { jobExecutions, toJobExecution } from '../schema/job-executions.js';
12
11
  import { jobs, toJob } from '../schema/jobs.js';
13
12
  import { stepAttempts, toStepAttempt } from '../schema/step-attempts.js';
@@ -18,12 +17,6 @@ import { getDirectDependencyJobContexts } from './jobs.js';
18
17
  import { loadReferencedVariables } from './runs.js';
19
18
  import { getWorkflowContextForJob, optimisticLockRetry, TERMINAL_EXECUTION_STATUSES } from './shared.js';
20
19
  import { bulkUpdateStepStatuses, getStepsByJobExecutionIdForUpdate } from './steps.js';
21
- export async function lockActiveJobExecutionLeaseForUpdate(params, tx) {
22
- const rows = await tx.select({
23
- id: runningJobExecutions.id
24
- }).from(runningJobExecutions).where(and(eq(runningJobExecutions.jobId, params.jobId), eq(runningJobExecutions.jobExecutionId, params.jobExecutionId), eq(runningJobExecutions.runnerSessionId, params.runnerSessionId))).limit(1).for('update');
25
- return rows.length > 0;
26
- }
27
20
  export async function getJobExecutionById(id, tx) {
28
21
  const rows = await (tx ?? db()).select().from(jobExecutions).where(eq(jobExecutions.id, id)).limit(1);
29
22
  const row = rows[0];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/db/workflow-runs/job-executions.ts"],"sourcesContent":["import {readPersistedWorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {WORKFLOWS_JOB_EXECUTION_TIMED_OUT} from '@shipfox/api-workflows-dto';\nimport {and, asc, desc, eq, isNull, notInArray, sql} from 'drizzle-orm';\nimport type {JobStatusReason} from '#core/entities/job.js';\nimport type {JobExecution, JobExecutionStatus} from '#core/entities/job-execution.js';\nimport {InterpolationUnresolvableError, JobNotFoundError} from '#core/errors.js';\nimport {deriveJobExecutionOutputs} from '#core/job-transition/index.js';\nimport {deriveCompletion, isTerminal} from '#core/step-transition/decide-step-transition.js';\nimport type {RuntimeCompletionStatus} from '#core/workflow-scheduling/runtime-dag.js';\nimport {\n recordWorkflowJobExecutionLeaseExpiryResolved,\n recordWorkflowJobExecutionQueued,\n recordWorkflowJobExecutionStarted,\n recordWorkflowJobExecutionStatusChanged,\n recordWorkflowJobExecutionTimedOut,\n} from '#metrics/instance.js';\nimport {db, type Tx} from '../db.js';\nimport {writeWorkflowsOutboxEvent} from '../outbox-writes.js';\nimport {runningJobExecutions} from '../runner-lease-table.js';\nimport {jobExecutions, toJobExecution} from '../schema/job-executions.js';\nimport {jobs, toJob} from '../schema/jobs.js';\nimport {stepAttempts, toStepAttempt} from '../schema/step-attempts.js';\nimport {steps, toStep} from '../schema/steps.js';\nimport {workflowRunAttempts} from '../schema/workflow-run-attempts.js';\nimport {toWorkflowRun, workflowRuns} from '../schema/workflow-runs.js';\nimport {getDirectDependencyJobContexts} from './jobs.js';\nimport {loadReferencedVariables} from './runs.js';\nimport {\n getWorkflowContextForJob,\n optimisticLockRetry,\n TERMINAL_EXECUTION_STATUSES,\n} from './shared.js';\nimport {bulkUpdateStepStatuses, getStepsByJobExecutionIdForUpdate} from './steps.js';\n\nexport async function lockActiveJobExecutionLeaseForUpdate(\n params: {jobId: string; jobExecutionId: string; runnerSessionId: string},\n tx: Tx,\n): Promise<boolean> {\n const rows = await tx\n .select({id: runningJobExecutions.id})\n .from(runningJobExecutions)\n .where(\n and(\n eq(runningJobExecutions.jobId, params.jobId),\n eq(runningJobExecutions.jobExecutionId, params.jobExecutionId),\n eq(runningJobExecutions.runnerSessionId, params.runnerSessionId),\n ),\n )\n .limit(1)\n .for('update');\n\n return rows.length > 0;\n}\n\nexport async function getJobExecutionById(id: string, tx?: Tx): Promise<JobExecution | undefined> {\n const rows = await (tx ?? db())\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.id, id))\n .limit(1);\n const row = rows[0];\n return row ? toJobExecution(row) : undefined;\n}\n\nexport async function getJobExecutionsByWorkflowRunAttemptId(\n workflowRunAttemptId: string,\n): Promise<JobExecution[]> {\n const rows = await db()\n .select({jobExecution: jobExecutions})\n .from(jobExecutions)\n .innerJoin(jobs, eq(jobExecutions.jobId, jobs.id))\n .where(eq(jobs.workflowRunAttemptId, workflowRunAttemptId))\n .orderBy(asc(jobExecutions.sequence), asc(jobExecutions.id));\n return rows.map((row) => toJobExecution(row.jobExecution));\n}\n\nexport async function getJobExecutionsByJobId(jobId: string): Promise<JobExecution[]> {\n const rows = await db()\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, jobId))\n .orderBy(asc(jobExecutions.sequence), asc(jobExecutions.id));\n return rows.map(toJobExecution);\n}\n\nexport async function getFirstJobExecutionByJobId(\n jobId: string,\n tx?: Tx,\n): Promise<JobExecution | undefined> {\n const rows = await (tx ?? db())\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, jobId))\n .orderBy(asc(jobExecutions.sequence), asc(jobExecutions.id))\n .limit(1);\n const row = rows[0];\n return row ? toJobExecution(row) : undefined;\n}\n\nexport async function getLatestJobExecutionByJobId(\n jobId: string,\n tx?: Tx,\n): Promise<JobExecution | undefined> {\n const rows = await (tx ?? db())\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, jobId))\n .orderBy(desc(jobExecutions.sequence), desc(jobExecutions.id))\n .limit(1);\n const row = rows[0];\n return row ? toJobExecution(row) : undefined;\n}\n\nexport interface UpdateJobExecutionStatusAtVersionParams {\n jobExecutionId: string;\n status: JobExecutionStatus;\n expectedVersion: number;\n statusReason?: JobStatusReason | null | undefined;\n markTimedOut?: boolean;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}\n\nasync function resolveJobExecutionOutputs(\n tx: Tx,\n params: {\n jobExecutionId: string;\n status: JobExecutionStatus;\n statusReason: JobStatusReason | null;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n },\n): Promise<Record<string, unknown> | null> {\n const [target] = await tx\n .select({execution: jobExecutions, job: jobs, attempt: workflowRunAttempts, run: workflowRuns})\n .from(jobExecutions)\n .innerJoin(jobs, eq(jobExecutions.jobId, jobs.id))\n .innerJoin(workflowRunAttempts, eq(jobs.workflowRunAttemptId, workflowRunAttempts.id))\n .innerJoin(workflowRuns, eq(workflowRunAttempts.workflowRunId, workflowRuns.id))\n .where(eq(jobExecutions.id, params.jobExecutionId))\n .limit(1);\n if (!target) throw new JobNotFoundError(params.jobExecutionId);\n const model =\n target.attempt.model === null ? null : readPersistedWorkflowModel(target.attempt.model);\n if (!model) return null;\n const modelJob = model.jobs.find((job) => job.key === target.job.key);\n if (!modelJob || modelJob.outputs === undefined) return null;\n\n const executionRows = await tx\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, target.job.id))\n .orderBy(asc(jobExecutions.sequence), asc(jobExecutions.id));\n const executions = executionRows.map((row) =>\n row.id === target.execution.id\n ? toJobExecution({...row, status: params.status, statusReason: params.statusReason})\n : toJobExecution(row),\n );\n const jobExecution = executions.find((execution) => execution.id === target.execution.id);\n if (!jobExecution) throw new JobNotFoundError(params.jobExecutionId);\n\n const stepRows = await tx\n .select()\n .from(steps)\n .where(eq(steps.jobExecutionId, params.jobExecutionId))\n .orderBy(asc(steps.position), asc(steps.id));\n const attemptRows = await tx\n .select()\n .from(stepAttempts)\n .where(eq(stepAttempts.jobExecutionId, params.jobExecutionId))\n .orderBy(asc(stepAttempts.executionOrder), asc(stepAttempts.id));\n const dependencyJobs = await getDirectDependencyJobContexts(target.job.id, tx);\n\n return deriveJobExecutionOutputs({\n run: toWorkflowRun(target.run),\n modelJob,\n job: toJob(target.job),\n jobExecution,\n executions,\n steps: stepRows.map(toStep),\n attempts: attemptRows.map(toStepAttempt),\n jobs: dependencyJobs,\n vars: await loadReferencedVariables({\n model,\n jobs: [modelJob],\n workspaceId: target.run.workspaceId,\n projectId: target.run.projectId,\n definitionId: target.run.definitionId,\n secrets: params.secrets,\n }),\n });\n}\n\nasync function updateJobExecutionStatusAtVersion(\n tx: Tx,\n params: UpdateJobExecutionStatusAtVersionParams,\n): Promise<{execution: JobExecution; changed: boolean} | null> {\n let status = params.status;\n let statusReason = params.statusReason ?? null;\n let outputs: Record<string, unknown> | null | undefined;\n if (TERMINAL_EXECUTION_STATUSES.includes(status)) {\n outputs = null;\n }\n if (status === 'succeeded') {\n try {\n outputs = await resolveJobExecutionOutputs(tx, {\n jobExecutionId: params.jobExecutionId,\n status,\n statusReason,\n secrets: params.secrets,\n });\n } catch (error) {\n if (!(error instanceof InterpolationUnresolvableError)) throw error;\n status = 'failed';\n statusReason = 'unknown';\n outputs = null;\n }\n }\n\n const rows = await tx\n .update(jobExecutions)\n .set({\n status,\n statusReason,\n ...(outputs === undefined ? {} : {outputs}),\n version: sql`${jobExecutions.version} + 1`,\n updatedAt: new Date(),\n ...(params.markTimedOut ? {timedOutAt: new Date()} : {}),\n ...(TERMINAL_EXECUTION_STATUSES.includes(status) ? {finishedAt: sql`now()`} : {}),\n })\n .where(\n and(\n eq(jobExecutions.id, params.jobExecutionId),\n eq(jobExecutions.version, params.expectedVersion),\n notInArray(jobExecutions.status, TERMINAL_EXECUTION_STATUSES),\n ),\n )\n .returning();\n\n const row = rows[0];\n if (!row) return null;\n return {execution: toJobExecution(row), changed: true};\n}\n\nexport interface UpdateJobExecutionStatusParams {\n jobExecutionId: string;\n status: JobExecutionStatus;\n expectedVersion: number;\n statusReason?: JobStatusReason | null | undefined;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}\n\nexport async function updateJobExecutionStatus(\n params: UpdateJobExecutionStatusParams,\n): Promise<JobExecution> {\n const statusReason = params.statusReason ?? null;\n const result = await db().transaction(async (tx) => {\n return await optimisticLockRetry({\n updateFn: () =>\n updateJobExecutionStatusAtVersion(tx, {\n jobExecutionId: params.jobExecutionId,\n status: params.status,\n expectedVersion: params.expectedVersion,\n statusReason,\n secrets: params.secrets,\n }),\n fetchFn: async () => {\n const row = (\n await tx\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.id, params.jobExecutionId))\n .limit(1)\n )[0];\n return row ? toJobExecution(row) : undefined;\n },\n matchFn: (execution) =>\n (execution.status === params.status && execution.statusReason === statusReason) ||\n TERMINAL_EXECUTION_STATUSES.includes(execution.status)\n ? {execution, changed: false}\n : null,\n failureMessage: `Optimistic lock failure: job execution ${params.jobExecutionId} version ${params.expectedVersion}`,\n });\n });\n\n if (result.changed) recordWorkflowJobExecutionStatusChanged(result.execution.status);\n\n return result.execution;\n}\n\nexport async function recordJobExecutionQueuedAt(params: {\n jobExecutionId: string;\n queuedAt: Date;\n}): Promise<void> {\n const updated = await db()\n .update(jobExecutions)\n .set({queuedAt: params.queuedAt})\n .where(and(eq(jobExecutions.id, params.jobExecutionId), isNull(jobExecutions.queuedAt)))\n .returning({id: jobExecutions.id});\n\n if (updated.length > 0) recordWorkflowJobExecutionQueued();\n}\n\nexport async function recordJobExecutionStartedAt(params: {\n jobExecutionId: string;\n startedAt: Date;\n}): Promise<void> {\n const updated = await db()\n .update(jobExecutions)\n .set({startedAt: params.startedAt})\n .where(and(eq(jobExecutions.id, params.jobExecutionId), isNull(jobExecutions.startedAt)))\n .returning({id: jobExecutions.id});\n\n if (updated.length > 0) recordWorkflowJobExecutionStarted();\n}\n\nexport async function failJobExecutionAsTimedOut(params: {\n jobExecutionId: string;\n workflowRunAttemptId: string;\n expectedVersion: number;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}): Promise<JobExecution> {\n const result = await db().transaction(async (tx) => {\n const updated = await optimisticLockRetry({\n updateFn: () =>\n updateJobExecutionStatusAtVersion(tx, {\n jobExecutionId: params.jobExecutionId,\n status: 'failed',\n expectedVersion: params.expectedVersion,\n statusReason: 'timed_out',\n markTimedOut: true,\n secrets: params.secrets,\n }),\n fetchFn: async () => {\n const row = (\n await tx\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.id, params.jobExecutionId))\n .limit(1)\n )[0];\n return row ? toJobExecution(row) : undefined;\n },\n matchFn: (execution) => (execution.timedOutAt !== null ? {execution, changed: false} : null),\n failureMessage: `Optimistic lock failure: job execution ${params.jobExecutionId} version ${params.expectedVersion}`,\n });\n\n if (updated.changed) {\n const identity = await getWorkflowContextForJob(updated.execution.jobId, tx);\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_EXECUTION_TIMED_OUT,\n payload: {\n jobId: identity.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n },\n });\n }\n\n return updated;\n });\n\n if (result.changed) {\n recordWorkflowJobExecutionStatusChanged(result.execution.status);\n recordWorkflowJobExecutionTimedOut();\n }\n\n return result.execution;\n}\n\nexport async function resolveJobExecutionAfterLeaseExpiry(params: {\n jobExecutionId: string;\n expectedVersion: number;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}): Promise<{status: RuntimeCompletionStatus; executionVersion: number}> {\n const result = await db().transaction(async (tx) => {\n const jobExecutionSteps = await getStepsByJobExecutionIdForUpdate(params.jobExecutionId, tx);\n let changedJobExecution: JobExecution | null = null;\n\n if (jobExecutionSteps.length === 0) {\n throw new JobNotFoundError(params.jobExecutionId);\n }\n\n if (jobExecutionSteps.every((step) => isTerminal(step.status))) {\n const status = deriveCompletion(jobExecutionSteps);\n const updated = await updateJobExecutionStatusAtVersion(tx, {\n jobExecutionId: params.jobExecutionId,\n status,\n expectedVersion: params.expectedVersion,\n statusReason: statusReasonForStepCompletion(status),\n secrets: params.secrets,\n });\n changedJobExecution = updated?.changed ? updated.execution : null;\n } else {\n const updated = await updateJobExecutionStatusAtVersion(tx, {\n jobExecutionId: params.jobExecutionId,\n status: 'failed',\n expectedVersion: params.expectedVersion,\n statusReason: 'runner_lost',\n secrets: params.secrets,\n });\n if (updated?.changed) {\n changedJobExecution = updated.execution;\n await bulkUpdateStepStatuses(\n {jobExecutionId: params.jobExecutionId, status: 'cancelled'},\n tx,\n );\n }\n }\n\n const jobExecutionRow = (\n await tx\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.id, params.jobExecutionId))\n .limit(1)\n )[0];\n if (!jobExecutionRow) {\n throw new Error(`Job execution not found resolving lease expiry: ${params.jobExecutionId}`);\n }\n const status: RuntimeCompletionStatus =\n jobExecutionRow.status === 'succeeded' ? 'succeeded' : 'failed';\n return {status, executionVersion: jobExecutionRow.version, changedJobExecution};\n });\n\n recordWorkflowJobExecutionLeaseExpiryResolved(result.status);\n if (result.changedJobExecution) {\n recordWorkflowJobExecutionStatusChanged(result.changedJobExecution.status);\n }\n\n return {status: result.status, executionVersion: result.executionVersion};\n}\n\nfunction statusReasonForStepCompletion(status: RuntimeCompletionStatus): JobStatusReason | null {\n return status === 'failed' ? 'step_failed' : null;\n}\n"],"names":["readPersistedWorkflowModel","WORKFLOWS_JOB_EXECUTION_TIMED_OUT","and","asc","desc","eq","isNull","notInArray","sql","InterpolationUnresolvableError","JobNotFoundError","deriveJobExecutionOutputs","deriveCompletion","isTerminal","recordWorkflowJobExecutionLeaseExpiryResolved","recordWorkflowJobExecutionQueued","recordWorkflowJobExecutionStarted","recordWorkflowJobExecutionStatusChanged","recordWorkflowJobExecutionTimedOut","db","writeWorkflowsOutboxEvent","runningJobExecutions","jobExecutions","toJobExecution","jobs","toJob","stepAttempts","toStepAttempt","steps","toStep","workflowRunAttempts","toWorkflowRun","workflowRuns","getDirectDependencyJobContexts","loadReferencedVariables","getWorkflowContextForJob","optimisticLockRetry","TERMINAL_EXECUTION_STATUSES","bulkUpdateStepStatuses","getStepsByJobExecutionIdForUpdate","lockActiveJobExecutionLeaseForUpdate","params","tx","rows","select","id","from","where","jobId","jobExecutionId","runnerSessionId","limit","for","length","getJobExecutionById","row","undefined","getJobExecutionsByWorkflowRunAttemptId","workflowRunAttemptId","jobExecution","innerJoin","orderBy","sequence","map","getJobExecutionsByJobId","getFirstJobExecutionByJobId","getLatestJobExecutionByJobId","resolveJobExecutionOutputs","target","execution","job","attempt","run","workflowRunId","model","modelJob","find","key","outputs","executionRows","executions","status","statusReason","stepRows","position","attemptRows","executionOrder","dependencyJobs","attempts","vars","workspaceId","projectId","definitionId","secrets","updateJobExecutionStatusAtVersion","includes","error","update","set","version","updatedAt","Date","markTimedOut","timedOutAt","finishedAt","expectedVersion","returning","changed","updateJobExecutionStatus","result","transaction","updateFn","fetchFn","matchFn","failureMessage","recordJobExecutionQueuedAt","updated","queuedAt","recordJobExecutionStartedAt","startedAt","failJobExecutionAsTimedOut","identity","type","payload","resolveJobExecutionAfterLeaseExpiry","jobExecutionSteps","changedJobExecution","every","step","statusReasonForStepCompletion","jobExecutionRow","Error","executionVersion"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/db/workflow-runs/job-executions.ts"],"sourcesContent":["import {readPersistedWorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {WORKFLOWS_JOB_EXECUTION_TIMED_OUT} from '@shipfox/api-workflows-dto';\nimport {and, asc, desc, eq, isNull, notInArray, sql} from 'drizzle-orm';\nimport type {JobStatusReason} from '#core/entities/job.js';\nimport type {JobExecution, JobExecutionStatus} from '#core/entities/job-execution.js';\nimport {InterpolationUnresolvableError, JobNotFoundError} from '#core/errors.js';\nimport {deriveJobExecutionOutputs} from '#core/job-transition/index.js';\nimport {deriveCompletion, isTerminal} from '#core/step-transition/decide-step-transition.js';\nimport type {RuntimeCompletionStatus} from '#core/workflow-scheduling/runtime-dag.js';\nimport {\n recordWorkflowJobExecutionLeaseExpiryResolved,\n recordWorkflowJobExecutionQueued,\n recordWorkflowJobExecutionStarted,\n recordWorkflowJobExecutionStatusChanged,\n recordWorkflowJobExecutionTimedOut,\n} from '#metrics/instance.js';\nimport {db, type Tx} from '../db.js';\nimport {writeWorkflowsOutboxEvent} from '../outbox-writes.js';\nimport {jobExecutions, toJobExecution} from '../schema/job-executions.js';\nimport {jobs, toJob} from '../schema/jobs.js';\nimport {stepAttempts, toStepAttempt} from '../schema/step-attempts.js';\nimport {steps, toStep} from '../schema/steps.js';\nimport {workflowRunAttempts} from '../schema/workflow-run-attempts.js';\nimport {toWorkflowRun, workflowRuns} from '../schema/workflow-runs.js';\nimport {getDirectDependencyJobContexts} from './jobs.js';\nimport {loadReferencedVariables} from './runs.js';\nimport {\n getWorkflowContextForJob,\n optimisticLockRetry,\n TERMINAL_EXECUTION_STATUSES,\n} from './shared.js';\nimport {bulkUpdateStepStatuses, getStepsByJobExecutionIdForUpdate} from './steps.js';\n\nexport async function getJobExecutionById(id: string, tx?: Tx): Promise<JobExecution | undefined> {\n const rows = await (tx ?? db())\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.id, id))\n .limit(1);\n const row = rows[0];\n return row ? toJobExecution(row) : undefined;\n}\n\nexport async function getJobExecutionsByWorkflowRunAttemptId(\n workflowRunAttemptId: string,\n): Promise<JobExecution[]> {\n const rows = await db()\n .select({jobExecution: jobExecutions})\n .from(jobExecutions)\n .innerJoin(jobs, eq(jobExecutions.jobId, jobs.id))\n .where(eq(jobs.workflowRunAttemptId, workflowRunAttemptId))\n .orderBy(asc(jobExecutions.sequence), asc(jobExecutions.id));\n return rows.map((row) => toJobExecution(row.jobExecution));\n}\n\nexport async function getJobExecutionsByJobId(jobId: string): Promise<JobExecution[]> {\n const rows = await db()\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, jobId))\n .orderBy(asc(jobExecutions.sequence), asc(jobExecutions.id));\n return rows.map(toJobExecution);\n}\n\nexport async function getFirstJobExecutionByJobId(\n jobId: string,\n tx?: Tx,\n): Promise<JobExecution | undefined> {\n const rows = await (tx ?? db())\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, jobId))\n .orderBy(asc(jobExecutions.sequence), asc(jobExecutions.id))\n .limit(1);\n const row = rows[0];\n return row ? toJobExecution(row) : undefined;\n}\n\nexport async function getLatestJobExecutionByJobId(\n jobId: string,\n tx?: Tx,\n): Promise<JobExecution | undefined> {\n const rows = await (tx ?? db())\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, jobId))\n .orderBy(desc(jobExecutions.sequence), desc(jobExecutions.id))\n .limit(1);\n const row = rows[0];\n return row ? toJobExecution(row) : undefined;\n}\n\nexport interface UpdateJobExecutionStatusAtVersionParams {\n jobExecutionId: string;\n status: JobExecutionStatus;\n expectedVersion: number;\n statusReason?: JobStatusReason | null | undefined;\n markTimedOut?: boolean;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}\n\nasync function resolveJobExecutionOutputs(\n tx: Tx,\n params: {\n jobExecutionId: string;\n status: JobExecutionStatus;\n statusReason: JobStatusReason | null;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n },\n): Promise<Record<string, unknown> | null> {\n const [target] = await tx\n .select({execution: jobExecutions, job: jobs, attempt: workflowRunAttempts, run: workflowRuns})\n .from(jobExecutions)\n .innerJoin(jobs, eq(jobExecutions.jobId, jobs.id))\n .innerJoin(workflowRunAttempts, eq(jobs.workflowRunAttemptId, workflowRunAttempts.id))\n .innerJoin(workflowRuns, eq(workflowRunAttempts.workflowRunId, workflowRuns.id))\n .where(eq(jobExecutions.id, params.jobExecutionId))\n .limit(1);\n if (!target) throw new JobNotFoundError(params.jobExecutionId);\n const model =\n target.attempt.model === null ? null : readPersistedWorkflowModel(target.attempt.model);\n if (!model) return null;\n const modelJob = model.jobs.find((job) => job.key === target.job.key);\n if (!modelJob || modelJob.outputs === undefined) return null;\n\n const executionRows = await tx\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, target.job.id))\n .orderBy(asc(jobExecutions.sequence), asc(jobExecutions.id));\n const executions = executionRows.map((row) =>\n row.id === target.execution.id\n ? toJobExecution({...row, status: params.status, statusReason: params.statusReason})\n : toJobExecution(row),\n );\n const jobExecution = executions.find((execution) => execution.id === target.execution.id);\n if (!jobExecution) throw new JobNotFoundError(params.jobExecutionId);\n\n const stepRows = await tx\n .select()\n .from(steps)\n .where(eq(steps.jobExecutionId, params.jobExecutionId))\n .orderBy(asc(steps.position), asc(steps.id));\n const attemptRows = await tx\n .select()\n .from(stepAttempts)\n .where(eq(stepAttempts.jobExecutionId, params.jobExecutionId))\n .orderBy(asc(stepAttempts.executionOrder), asc(stepAttempts.id));\n const dependencyJobs = await getDirectDependencyJobContexts(target.job.id, tx);\n\n return deriveJobExecutionOutputs({\n run: toWorkflowRun(target.run),\n modelJob,\n job: toJob(target.job),\n jobExecution,\n executions,\n steps: stepRows.map(toStep),\n attempts: attemptRows.map(toStepAttempt),\n jobs: dependencyJobs,\n vars: await loadReferencedVariables({\n model,\n jobs: [modelJob],\n workspaceId: target.run.workspaceId,\n projectId: target.run.projectId,\n definitionId: target.run.definitionId,\n secrets: params.secrets,\n }),\n });\n}\n\nasync function updateJobExecutionStatusAtVersion(\n tx: Tx,\n params: UpdateJobExecutionStatusAtVersionParams,\n): Promise<{execution: JobExecution; changed: boolean} | null> {\n let status = params.status;\n let statusReason = params.statusReason ?? null;\n let outputs: Record<string, unknown> | null | undefined;\n if (TERMINAL_EXECUTION_STATUSES.includes(status)) {\n outputs = null;\n }\n if (status === 'succeeded') {\n try {\n outputs = await resolveJobExecutionOutputs(tx, {\n jobExecutionId: params.jobExecutionId,\n status,\n statusReason,\n secrets: params.secrets,\n });\n } catch (error) {\n if (!(error instanceof InterpolationUnresolvableError)) throw error;\n status = 'failed';\n statusReason = 'unknown';\n outputs = null;\n }\n }\n\n const rows = await tx\n .update(jobExecutions)\n .set({\n status,\n statusReason,\n ...(outputs === undefined ? {} : {outputs}),\n version: sql`${jobExecutions.version} + 1`,\n updatedAt: new Date(),\n ...(params.markTimedOut ? {timedOutAt: new Date()} : {}),\n ...(TERMINAL_EXECUTION_STATUSES.includes(status) ? {finishedAt: sql`now()`} : {}),\n })\n .where(\n and(\n eq(jobExecutions.id, params.jobExecutionId),\n eq(jobExecutions.version, params.expectedVersion),\n notInArray(jobExecutions.status, TERMINAL_EXECUTION_STATUSES),\n ),\n )\n .returning();\n\n const row = rows[0];\n if (!row) return null;\n return {execution: toJobExecution(row), changed: true};\n}\n\nexport interface UpdateJobExecutionStatusParams {\n jobExecutionId: string;\n status: JobExecutionStatus;\n expectedVersion: number;\n statusReason?: JobStatusReason | null | undefined;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}\n\nexport async function updateJobExecutionStatus(\n params: UpdateJobExecutionStatusParams,\n): Promise<JobExecution> {\n const statusReason = params.statusReason ?? null;\n const result = await db().transaction(async (tx) => {\n return await optimisticLockRetry({\n updateFn: () =>\n updateJobExecutionStatusAtVersion(tx, {\n jobExecutionId: params.jobExecutionId,\n status: params.status,\n expectedVersion: params.expectedVersion,\n statusReason,\n secrets: params.secrets,\n }),\n fetchFn: async () => {\n const row = (\n await tx\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.id, params.jobExecutionId))\n .limit(1)\n )[0];\n return row ? toJobExecution(row) : undefined;\n },\n matchFn: (execution) =>\n (execution.status === params.status && execution.statusReason === statusReason) ||\n TERMINAL_EXECUTION_STATUSES.includes(execution.status)\n ? {execution, changed: false}\n : null,\n failureMessage: `Optimistic lock failure: job execution ${params.jobExecutionId} version ${params.expectedVersion}`,\n });\n });\n\n if (result.changed) recordWorkflowJobExecutionStatusChanged(result.execution.status);\n\n return result.execution;\n}\n\nexport async function recordJobExecutionQueuedAt(params: {\n jobExecutionId: string;\n queuedAt: Date;\n}): Promise<void> {\n const updated = await db()\n .update(jobExecutions)\n .set({queuedAt: params.queuedAt})\n .where(and(eq(jobExecutions.id, params.jobExecutionId), isNull(jobExecutions.queuedAt)))\n .returning({id: jobExecutions.id});\n\n if (updated.length > 0) recordWorkflowJobExecutionQueued();\n}\n\nexport async function recordJobExecutionStartedAt(params: {\n jobExecutionId: string;\n startedAt: Date;\n}): Promise<void> {\n const updated = await db()\n .update(jobExecutions)\n .set({startedAt: params.startedAt})\n .where(and(eq(jobExecutions.id, params.jobExecutionId), isNull(jobExecutions.startedAt)))\n .returning({id: jobExecutions.id});\n\n if (updated.length > 0) recordWorkflowJobExecutionStarted();\n}\n\nexport async function failJobExecutionAsTimedOut(params: {\n jobExecutionId: string;\n workflowRunAttemptId: string;\n expectedVersion: number;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}): Promise<JobExecution> {\n const result = await db().transaction(async (tx) => {\n const updated = await optimisticLockRetry({\n updateFn: () =>\n updateJobExecutionStatusAtVersion(tx, {\n jobExecutionId: params.jobExecutionId,\n status: 'failed',\n expectedVersion: params.expectedVersion,\n statusReason: 'timed_out',\n markTimedOut: true,\n secrets: params.secrets,\n }),\n fetchFn: async () => {\n const row = (\n await tx\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.id, params.jobExecutionId))\n .limit(1)\n )[0];\n return row ? toJobExecution(row) : undefined;\n },\n matchFn: (execution) => (execution.timedOutAt !== null ? {execution, changed: false} : null),\n failureMessage: `Optimistic lock failure: job execution ${params.jobExecutionId} version ${params.expectedVersion}`,\n });\n\n if (updated.changed) {\n const identity = await getWorkflowContextForJob(updated.execution.jobId, tx);\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_EXECUTION_TIMED_OUT,\n payload: {\n jobId: identity.jobId,\n jobExecutionId: params.jobExecutionId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n },\n });\n }\n\n return updated;\n });\n\n if (result.changed) {\n recordWorkflowJobExecutionStatusChanged(result.execution.status);\n recordWorkflowJobExecutionTimedOut();\n }\n\n return result.execution;\n}\n\nexport async function resolveJobExecutionAfterLeaseExpiry(params: {\n jobExecutionId: string;\n expectedVersion: number;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}): Promise<{status: RuntimeCompletionStatus; executionVersion: number}> {\n const result = await db().transaction(async (tx) => {\n const jobExecutionSteps = await getStepsByJobExecutionIdForUpdate(params.jobExecutionId, tx);\n let changedJobExecution: JobExecution | null = null;\n\n if (jobExecutionSteps.length === 0) {\n throw new JobNotFoundError(params.jobExecutionId);\n }\n\n if (jobExecutionSteps.every((step) => isTerminal(step.status))) {\n const status = deriveCompletion(jobExecutionSteps);\n const updated = await updateJobExecutionStatusAtVersion(tx, {\n jobExecutionId: params.jobExecutionId,\n status,\n expectedVersion: params.expectedVersion,\n statusReason: statusReasonForStepCompletion(status),\n secrets: params.secrets,\n });\n changedJobExecution = updated?.changed ? updated.execution : null;\n } else {\n const updated = await updateJobExecutionStatusAtVersion(tx, {\n jobExecutionId: params.jobExecutionId,\n status: 'failed',\n expectedVersion: params.expectedVersion,\n statusReason: 'runner_lost',\n secrets: params.secrets,\n });\n if (updated?.changed) {\n changedJobExecution = updated.execution;\n await bulkUpdateStepStatuses(\n {jobExecutionId: params.jobExecutionId, status: 'cancelled'},\n tx,\n );\n }\n }\n\n const jobExecutionRow = (\n await tx\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.id, params.jobExecutionId))\n .limit(1)\n )[0];\n if (!jobExecutionRow) {\n throw new Error(`Job execution not found resolving lease expiry: ${params.jobExecutionId}`);\n }\n const status: RuntimeCompletionStatus =\n jobExecutionRow.status === 'succeeded' ? 'succeeded' : 'failed';\n return {status, executionVersion: jobExecutionRow.version, changedJobExecution};\n });\n\n recordWorkflowJobExecutionLeaseExpiryResolved(result.status);\n if (result.changedJobExecution) {\n recordWorkflowJobExecutionStatusChanged(result.changedJobExecution.status);\n }\n\n return {status: result.status, executionVersion: result.executionVersion};\n}\n\nfunction statusReasonForStepCompletion(status: RuntimeCompletionStatus): JobStatusReason | null {\n return status === 'failed' ? 'step_failed' : null;\n}\n"],"names":["readPersistedWorkflowModel","WORKFLOWS_JOB_EXECUTION_TIMED_OUT","and","asc","desc","eq","isNull","notInArray","sql","InterpolationUnresolvableError","JobNotFoundError","deriveJobExecutionOutputs","deriveCompletion","isTerminal","recordWorkflowJobExecutionLeaseExpiryResolved","recordWorkflowJobExecutionQueued","recordWorkflowJobExecutionStarted","recordWorkflowJobExecutionStatusChanged","recordWorkflowJobExecutionTimedOut","db","writeWorkflowsOutboxEvent","jobExecutions","toJobExecution","jobs","toJob","stepAttempts","toStepAttempt","steps","toStep","workflowRunAttempts","toWorkflowRun","workflowRuns","getDirectDependencyJobContexts","loadReferencedVariables","getWorkflowContextForJob","optimisticLockRetry","TERMINAL_EXECUTION_STATUSES","bulkUpdateStepStatuses","getStepsByJobExecutionIdForUpdate","getJobExecutionById","id","tx","rows","select","from","where","limit","row","undefined","getJobExecutionsByWorkflowRunAttemptId","workflowRunAttemptId","jobExecution","innerJoin","jobId","orderBy","sequence","map","getJobExecutionsByJobId","getFirstJobExecutionByJobId","getLatestJobExecutionByJobId","resolveJobExecutionOutputs","params","target","execution","job","attempt","run","workflowRunId","jobExecutionId","model","modelJob","find","key","outputs","executionRows","executions","status","statusReason","stepRows","position","attemptRows","executionOrder","dependencyJobs","attempts","vars","workspaceId","projectId","definitionId","secrets","updateJobExecutionStatusAtVersion","includes","error","update","set","version","updatedAt","Date","markTimedOut","timedOutAt","finishedAt","expectedVersion","returning","changed","updateJobExecutionStatus","result","transaction","updateFn","fetchFn","matchFn","failureMessage","recordJobExecutionQueuedAt","updated","queuedAt","length","recordJobExecutionStartedAt","startedAt","failJobExecutionAsTimedOut","identity","type","payload","resolveJobExecutionAfterLeaseExpiry","jobExecutionSteps","changedJobExecution","every","step","statusReasonForStepCompletion","jobExecutionRow","Error","executionVersion"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { type WorkflowModel } from '@shipfox/api-definitions-dto';
2
- import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto';
3
- import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
2
+ import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto/inter-module';
3
+ import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
4
4
  import type { SecretsInterModuleClient } from '@shipfox/api-secrets-dto/inter-module';
5
5
  import type { AgentDefaultsResolver } from '#core/agent-defaults.js';
6
6
  import type { TriggerPayload, WorkflowRun, WorkflowSourceSnapshot } from '#core/entities/workflow-run.js';
@@ -1 +1 @@
1
- {"version":3,"file":"run-create.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/run-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAC7F,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAIpF,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAKnE,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,8BAA8B,EAAC,MAAM,iBAAiB,CAAC;AAa/D,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,cAAc,CAAC,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACzD,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;IAChF,YAAY,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC7C;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CA6H7F;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;CAC1F,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAsB9C"}
1
+ {"version":3,"file":"run-create.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/run-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAC7F,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AACjF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAIpF,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAKnE,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,8BAA8B,EAAC,MAAM,iBAAiB,CAAC;AAa/D,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,cAAc,CAAC,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,oBAAoB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACzD,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;IAChF,YAAY,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC7C;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CA6H7F;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;CAC1F,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAsB9C"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/db/workflow-runs/run-create.ts"],"sourcesContent":["import {createWorkflowModelSnapshot, type WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {analyzeContextKeyAccess, type ResolvedFieldSegment} from '@shipfox/expression';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {eq} from 'drizzle-orm';\nimport type {AgentDefaultsResolver} from '#core/agent-defaults.js';\nimport {\n createAgentToolMaterializationSnapshot,\n loadAgentToolMaterializationContext,\n} from '#core/agent-tools.js';\nimport type {\n TriggerPayload,\n WorkflowRun,\n WorkflowSourceSnapshot,\n} from '#core/entities/workflow-run.js';\nimport {InterpolationUnresolvableError} from '#core/errors.js';\nimport type {MaterializedWorkflowJob} from '#core/step-config/materialize-workflow-model.js';\nimport type {WorkflowStepTemplateDiagnostic} from '#core/step-config/resolve-step-config.js';\nimport {\n deriveInitialJobExecutionPlan,\n materializeWorkflowRunJobs,\n} from '#core/workflow-run-creation.js';\nimport {recordWorkflowRunCreated} from '#metrics/instance.js';\nimport {db} from '../db.js';\nimport {workflowRunAttempts} from '../schema/workflow-run-attempts.js';\nimport {toWorkflowRun, workflowRuns} from '../schema/workflow-runs.js';\nimport {type MaterializedRunGraphJob, persistMaterializedRunGraph} from './run-graph.js';\n\nexport type WorkflowModelJob = WorkflowModel['jobs'][number];\n\nexport interface ReferencedVariable {\n readonly key: string;\n readonly field: InterpolationUnresolvableError['field'];\n readonly source: string;\n readonly envKey?: string | undefined;\n}\n\nexport interface CreateWorkflowRunParams {\n workspaceId: string;\n projectId: string;\n definitionId: string;\n name?: string | undefined;\n model: WorkflowModel;\n triggerPayload: TriggerPayload;\n inputs?: Record<string, unknown> | undefined;\n sourceSnapshot?: WorkflowSourceSnapshot | null | undefined;\n triggerIdempotencyKey?: string | undefined;\n resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n integrations?: IntegrationsModuleClient | undefined;\n projects?: ProjectsModuleClient | undefined;\n}\n\nexport async function createWorkflowRun(params: CreateWorkflowRunParams): Promise<WorkflowRun> {\n const agentToolContext =\n params.integrations === undefined\n ? undefined\n : await loadAgentToolMaterializationContext({\n model: params.model,\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n integrations: params.integrations,\n projects: params.projects,\n });\n const agentToolMaterialization = createAgentToolMaterializationSnapshot({\n model: params.model,\n context: agentToolContext,\n });\n const result = await db().transaction(async (tx) => {\n const insertResult = await tx\n .insert(workflowRuns)\n .values({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: params.definitionId,\n name: params.name ?? params.model.name,\n status: 'pending',\n currentAttempt: 1,\n triggerProvider: params.triggerPayload.provider ?? null,\n triggerSource: params.triggerPayload.source,\n triggerEvent: params.triggerPayload.event,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n sourceSnapshot: params.sourceSnapshot ?? null,\n triggerIdempotencyKey: params.triggerIdempotencyKey ?? null,\n })\n .onConflictDoNothing({target: workflowRuns.triggerIdempotencyKey})\n .returning();\n\n const runRow = insertResult[0];\n if (!runRow) {\n // Conflict path: skip jobs/steps/outbox so the first insert keeps ownership of side effects.\n if (!params.triggerIdempotencyKey) {\n throw new Error('Insert returned no rows');\n }\n const existing = await tx\n .select()\n .from(workflowRuns)\n .where(eq(workflowRuns.triggerIdempotencyKey, params.triggerIdempotencyKey))\n .limit(1);\n const existingRow = existing[0];\n if (!existingRow) {\n throw new Error(\n `Idempotency conflict but existing run missing for key ${params.triggerIdempotencyKey}`,\n );\n }\n return {run: toWorkflowRun(existingRow), created: false};\n }\n\n const run = toWorkflowRun(runRow);\n const [attemptRow] = await tx\n .insert(workflowRunAttempts)\n .values({\n workflowRunId: runRow.id,\n attempt: 1,\n status: 'pending',\n model: createWorkflowModelSnapshot(params.model),\n agentToolMaterialization,\n })\n .returning();\n if (!attemptRow) throw new Error('Insert returned no rows');\n\n // Resolving one-shot templates here gives interpolation access to the inserted run id.\n // If resolution fails, the transaction rolls back the run, jobs, steps, and outbox event together.\n // Listening steps are resolved later when a job execution is created.\n const oneShotJobs = params.model.jobs.filter((job) => job.mode !== 'listening');\n const vars = await loadReferencedVariables({\n model: params.model,\n jobs: oneShotJobs,\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: params.definitionId,\n secrets: params.secrets,\n });\n const materializedJobs = await materializeWorkflowRunJobs({\n run,\n model: params.model,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n agentToolContext,\n agentToolSnapshot: agentToolMaterialization,\n });\n\n const graphJobs = materializeRunGraphJobs({\n params,\n run,\n vars,\n materializedJobs,\n });\n await persistMaterializedRunGraph(tx, {\n run,\n workflowRunAttempt: attemptRow,\n materializedJobs: graphJobs,\n });\n\n logTemplateDiagnostics({\n workflowRunId: runRow.id,\n diagnostics: materializedJobs.flatMap((job) =>\n job.steps.flatMap((step) =>\n (step.diagnostics ?? []).map((diagnostic) => ({\n jobKey: job.key,\n stepName: step.name,\n ...diagnostic,\n })),\n ),\n ),\n });\n\n return {run, created: true};\n });\n\n if (result.created)\n recordWorkflowRunCreated(result.run.triggerPayload.provider ?? result.run.triggerSource);\n\n return result.run;\n}\n\nexport async function loadReferencedVariables(params: {\n readonly model: WorkflowModel;\n readonly jobs?: readonly WorkflowModelJob[] | undefined;\n readonly workspaceId: string;\n readonly projectId: string;\n readonly definitionId: string;\n readonly secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}): Promise<Record<string, string> | undefined> {\n const references = referencedVariables(params.model, params.jobs ?? params.model.jobs);\n const keys = [...new Set(references.map((reference) => reference.key))].sort();\n if (keys.length === 0) return undefined;\n\n if (!params.secrets) throw new Error('Secrets client is not configured.');\n const {values: vars} = await params.secrets.getVariablesByNamespace({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n namespace: '',\n });\n const missingKey = keys.find((key) => !(key in vars));\n if (missingKey !== undefined) {\n const reference = references.find((candidate) => candidate.key === missingKey);\n throw new InterpolationUnresolvableError(params.definitionId, {\n field: reference?.field ?? 'env',\n source: reference?.source ?? `vars.${missingKey}`,\n ...(reference?.envKey === undefined ? {} : {envKey: reference.envKey}),\n });\n }\n\n return vars;\n}\n\nfunction materializeRunGraphJobs(params: {\n readonly params: CreateWorkflowRunParams;\n readonly run: WorkflowRun;\n readonly vars: Record<string, string> | undefined;\n readonly materializedJobs: readonly MaterializedWorkflowJob[];\n}): readonly MaterializedRunGraphJob[] {\n return params.materializedJobs.map((job, jobIndex) => ({\n job: {\n key: job.key,\n mode: job.mode,\n name: workflowTemplateSource(job.name),\n status: 'pending' as const,\n checkoutPersistCredentials: job.checkout.persistCredentials,\n checkoutPermissionsContents: job.checkout.permissions.contents,\n success: job.success ?? null,\n executionTimeoutMs: job.executionTimeoutMs ?? null,\n listeningTimeoutMs: job.listening?.timeoutMs ?? null,\n maxExecutions: job.listening?.maxExecutions ?? null,\n onResolve: job.listening?.onResolve ?? null,\n batchDebounceMs: job.listening?.batch?.debounceMs ?? null,\n batchMaxSize: job.listening?.batch?.maxSize ?? null,\n batchMaxWaitMs: job.listening?.batch?.maxWaitMs ?? null,\n listeningOn: job.listening?.on ? [...job.listening.on] : null,\n listeningUntil: job.listening?.until ? [...job.listening.until] : null,\n dependencies: [...job.dependencies],\n runner: job.runner.length === 0 ? null : [...job.runner],\n position: job.position,\n },\n createExecution: (jobRow) => {\n if (jobRow.mode === 'listening') return undefined;\n\n const fallbackName = `${jobRow.key} #1`;\n const modelJob = params.params.model.jobs[jobIndex];\n if (!modelJob) return undefined;\n const executionPlan = deriveInitialJobExecutionPlan({\n run: params.run,\n modelJob,\n job,\n jobId: jobRow.id,\n sequence: 1,\n fallbackName,\n triggerPayload: params.params.triggerPayload,\n inputs: params.params.inputs ?? null,\n vars: params.vars,\n });\n\n return {\n sequence: 1,\n name: executionPlan.name,\n runner: [...executionPlan.runner],\n status: 'pending' as const,\n evaluationTrace:\n executionPlan.evaluationTrace?.length === 0 ? null : executionPlan.evaluationTrace,\n };\n },\n createSteps: () =>\n job.steps.map((step) => ({\n key: step.key,\n name: step.name,\n sourceLocation: step.sourceLocation,\n status: step.status,\n type: step.type,\n config: step.config,\n condition: step.condition ?? null,\n configPlan: step.configPlan ?? null,\n authoredConfig: step.authoredConfig,\n position: step.position,\n })),\n }));\n}\n\nfunction referencedVariables(\n model: WorkflowModel,\n jobs: readonly WorkflowModelJob[],\n): readonly ReferencedVariable[] {\n const references: ReferencedVariable[] = [];\n\n if (jobs.length > 0) {\n collectTemplateVariableReferences(model.templates?.env, references);\n }\n\n for (const job of jobs) {\n collectFieldVariableReferences(job.name, references, {field: 'job.name'});\n for (const template of job.runnerTemplates ?? []) {\n collectFieldVariableReferences(template, references, {field: 'job.runner'});\n }\n collectTemplateVariableReferences(job.outputs, references, {field: 'job.outputs'});\n collectTemplateVariableReferences(job.templates?.env, references);\n\n for (const step of job.steps) {\n collectFieldVariableReferences(step.templates?.name, references, {field: 'step.name'});\n if (step.kind === 'run') {\n collectFieldVariableReferences(step.templates?.command, references, {field: 'run'});\n collectTemplateVariableReferences(step.templates?.env, references);\n } else {\n collectFieldVariableReferences(step.templates?.prompt, references, {field: 'agent.prompt'});\n collectFieldVariableReferences(step.templates?.model, references, {field: 'agent.model'});\n collectFieldVariableReferences(step.templates?.provider, references, {\n field: 'agent.provider',\n });\n }\n }\n }\n\n return references;\n}\n\nfunction collectTemplateVariableReferences(\n templates: Readonly<Record<string, readonly ResolvedFieldSegment[]>> | undefined,\n references: ReferencedVariable[],\n source?: {\n readonly field: InterpolationUnresolvableError['field'];\n },\n): void {\n for (const [envKey, template] of Object.entries(templates ?? {})) {\n collectFieldVariableReferences(\n template,\n references,\n source === undefined ? {field: 'env', envKey} : source,\n );\n }\n}\n\nfunction collectFieldVariableReferences(\n template: readonly ResolvedFieldSegment[] | undefined,\n references: ReferencedVariable[],\n source: {\n readonly field: InterpolationUnresolvableError['field'];\n readonly envKey?: string | undefined;\n },\n): void {\n for (const segment of template ?? []) {\n if (segment.kind === 'literal') continue;\n const keyAccess = analyzeContextKeyAccess(segment.expression);\n for (const reference of keyAccess.references) {\n if (reference.root !== 'vars') continue;\n references.push({\n key: reference.key,\n field: source.field,\n source: segment.expression.source,\n envKey: source.envKey,\n });\n }\n }\n}\n\nfunction workflowTemplateSource(template: MaterializedWorkflowJob['name']): string | null {\n if (template === undefined) return null;\n\n return template\n .map((segment) =>\n segment.kind === 'literal' ? segment.value : `$${'{{'} ${segment.expression.source} ${'}}'}`,\n )\n .join('');\n}\n\nfunction logTemplateDiagnostics(params: {\n readonly workflowRunId: string;\n readonly diagnostics: readonly (WorkflowStepTemplateDiagnostic & {\n readonly jobKey: string;\n readonly stepName: string;\n })[];\n}): void {\n if (params.diagnostics.length === 0) return;\n\n logger().warn(\n {workflowRunId: params.workflowRunId, diagnostics: params.diagnostics},\n 'Workflow interpolation resolved with diagnostics',\n );\n}\n"],"names":["createWorkflowModelSnapshot","analyzeContextKeyAccess","logger","eq","createAgentToolMaterializationSnapshot","loadAgentToolMaterializationContext","InterpolationUnresolvableError","deriveInitialJobExecutionPlan","materializeWorkflowRunJobs","recordWorkflowRunCreated","db","workflowRunAttempts","toWorkflowRun","workflowRuns","persistMaterializedRunGraph","createWorkflowRun","params","agentToolContext","integrations","undefined","model","workspaceId","projectId","projects","agentToolMaterialization","context","result","transaction","tx","insertResult","insert","values","definitionId","name","status","currentAttempt","triggerProvider","triggerPayload","provider","triggerSource","source","triggerEvent","event","inputs","sourceSnapshot","triggerIdempotencyKey","onConflictDoNothing","target","returning","runRow","Error","existing","select","from","where","limit","existingRow","run","created","attemptRow","workflowRunId","id","attempt","oneShotJobs","jobs","filter","job","mode","vars","loadReferencedVariables","secrets","materializedJobs","resolveAgentDefaults","agentToolSnapshot","graphJobs","materializeRunGraphJobs","workflowRunAttempt","logTemplateDiagnostics","diagnostics","flatMap","steps","step","map","diagnostic","jobKey","key","stepName","references","referencedVariables","keys","Set","reference","sort","length","getVariablesByNamespace","namespace","missingKey","find","candidate","field","envKey","jobIndex","workflowTemplateSource","checkoutPersistCredentials","checkout","persistCredentials","checkoutPermissionsContents","permissions","contents","success","executionTimeoutMs","listeningTimeoutMs","listening","timeoutMs","maxExecutions","onResolve","batchDebounceMs","batch","debounceMs","batchMaxSize","maxSize","batchMaxWaitMs","maxWaitMs","listeningOn","on","listeningUntil","until","dependencies","runner","position","createExecution","jobRow","fallbackName","modelJob","executionPlan","jobId","sequence","evaluationTrace","createSteps","sourceLocation","type","config","condition","configPlan","authoredConfig","collectTemplateVariableReferences","templates","env","collectFieldVariableReferences","template","runnerTemplates","outputs","kind","command","prompt","Object","entries","segment","keyAccess","expression","root","push","value","join","warn"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/db/workflow-runs/run-create.ts"],"sourcesContent":["import {createWorkflowModelSnapshot, type WorkflowModel} from '@shipfox/api-definitions-dto';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {analyzeContextKeyAccess, type ResolvedFieldSegment} from '@shipfox/expression';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {eq} from 'drizzle-orm';\nimport type {AgentDefaultsResolver} from '#core/agent-defaults.js';\nimport {\n createAgentToolMaterializationSnapshot,\n loadAgentToolMaterializationContext,\n} from '#core/agent-tools.js';\nimport type {\n TriggerPayload,\n WorkflowRun,\n WorkflowSourceSnapshot,\n} from '#core/entities/workflow-run.js';\nimport {InterpolationUnresolvableError} from '#core/errors.js';\nimport type {MaterializedWorkflowJob} from '#core/step-config/materialize-workflow-model.js';\nimport type {WorkflowStepTemplateDiagnostic} from '#core/step-config/resolve-step-config.js';\nimport {\n deriveInitialJobExecutionPlan,\n materializeWorkflowRunJobs,\n} from '#core/workflow-run-creation.js';\nimport {recordWorkflowRunCreated} from '#metrics/instance.js';\nimport {db} from '../db.js';\nimport {workflowRunAttempts} from '../schema/workflow-run-attempts.js';\nimport {toWorkflowRun, workflowRuns} from '../schema/workflow-runs.js';\nimport {type MaterializedRunGraphJob, persistMaterializedRunGraph} from './run-graph.js';\n\nexport type WorkflowModelJob = WorkflowModel['jobs'][number];\n\nexport interface ReferencedVariable {\n readonly key: string;\n readonly field: InterpolationUnresolvableError['field'];\n readonly source: string;\n readonly envKey?: string | undefined;\n}\n\nexport interface CreateWorkflowRunParams {\n workspaceId: string;\n projectId: string;\n definitionId: string;\n name?: string | undefined;\n model: WorkflowModel;\n triggerPayload: TriggerPayload;\n inputs?: Record<string, unknown> | undefined;\n sourceSnapshot?: WorkflowSourceSnapshot | null | undefined;\n triggerIdempotencyKey?: string | undefined;\n resolveAgentDefaults?: AgentDefaultsResolver | undefined;\n secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n integrations?: IntegrationsModuleClient | undefined;\n projects?: ProjectsModuleClient | undefined;\n}\n\nexport async function createWorkflowRun(params: CreateWorkflowRunParams): Promise<WorkflowRun> {\n const agentToolContext =\n params.integrations === undefined\n ? undefined\n : await loadAgentToolMaterializationContext({\n model: params.model,\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n integrations: params.integrations,\n projects: params.projects,\n });\n const agentToolMaterialization = createAgentToolMaterializationSnapshot({\n model: params.model,\n context: agentToolContext,\n });\n const result = await db().transaction(async (tx) => {\n const insertResult = await tx\n .insert(workflowRuns)\n .values({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: params.definitionId,\n name: params.name ?? params.model.name,\n status: 'pending',\n currentAttempt: 1,\n triggerProvider: params.triggerPayload.provider ?? null,\n triggerSource: params.triggerPayload.source,\n triggerEvent: params.triggerPayload.event,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n sourceSnapshot: params.sourceSnapshot ?? null,\n triggerIdempotencyKey: params.triggerIdempotencyKey ?? null,\n })\n .onConflictDoNothing({target: workflowRuns.triggerIdempotencyKey})\n .returning();\n\n const runRow = insertResult[0];\n if (!runRow) {\n // Conflict path: skip jobs/steps/outbox so the first insert keeps ownership of side effects.\n if (!params.triggerIdempotencyKey) {\n throw new Error('Insert returned no rows');\n }\n const existing = await tx\n .select()\n .from(workflowRuns)\n .where(eq(workflowRuns.triggerIdempotencyKey, params.triggerIdempotencyKey))\n .limit(1);\n const existingRow = existing[0];\n if (!existingRow) {\n throw new Error(\n `Idempotency conflict but existing run missing for key ${params.triggerIdempotencyKey}`,\n );\n }\n return {run: toWorkflowRun(existingRow), created: false};\n }\n\n const run = toWorkflowRun(runRow);\n const [attemptRow] = await tx\n .insert(workflowRunAttempts)\n .values({\n workflowRunId: runRow.id,\n attempt: 1,\n status: 'pending',\n model: createWorkflowModelSnapshot(params.model),\n agentToolMaterialization,\n })\n .returning();\n if (!attemptRow) throw new Error('Insert returned no rows');\n\n // Resolving one-shot templates here gives interpolation access to the inserted run id.\n // If resolution fails, the transaction rolls back the run, jobs, steps, and outbox event together.\n // Listening steps are resolved later when a job execution is created.\n const oneShotJobs = params.model.jobs.filter((job) => job.mode !== 'listening');\n const vars = await loadReferencedVariables({\n model: params.model,\n jobs: oneShotJobs,\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n definitionId: params.definitionId,\n secrets: params.secrets,\n });\n const materializedJobs = await materializeWorkflowRunJobs({\n run,\n model: params.model,\n triggerPayload: params.triggerPayload,\n inputs: params.inputs ?? null,\n vars,\n resolveAgentDefaults: params.resolveAgentDefaults,\n definitionId: params.definitionId,\n agentToolContext,\n agentToolSnapshot: agentToolMaterialization,\n });\n\n const graphJobs = materializeRunGraphJobs({\n params,\n run,\n vars,\n materializedJobs,\n });\n await persistMaterializedRunGraph(tx, {\n run,\n workflowRunAttempt: attemptRow,\n materializedJobs: graphJobs,\n });\n\n logTemplateDiagnostics({\n workflowRunId: runRow.id,\n diagnostics: materializedJobs.flatMap((job) =>\n job.steps.flatMap((step) =>\n (step.diagnostics ?? []).map((diagnostic) => ({\n jobKey: job.key,\n stepName: step.name,\n ...diagnostic,\n })),\n ),\n ),\n });\n\n return {run, created: true};\n });\n\n if (result.created)\n recordWorkflowRunCreated(result.run.triggerPayload.provider ?? result.run.triggerSource);\n\n return result.run;\n}\n\nexport async function loadReferencedVariables(params: {\n readonly model: WorkflowModel;\n readonly jobs?: readonly WorkflowModelJob[] | undefined;\n readonly workspaceId: string;\n readonly projectId: string;\n readonly definitionId: string;\n readonly secrets?: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'> | undefined;\n}): Promise<Record<string, string> | undefined> {\n const references = referencedVariables(params.model, params.jobs ?? params.model.jobs);\n const keys = [...new Set(references.map((reference) => reference.key))].sort();\n if (keys.length === 0) return undefined;\n\n if (!params.secrets) throw new Error('Secrets client is not configured.');\n const {values: vars} = await params.secrets.getVariablesByNamespace({\n workspaceId: params.workspaceId,\n projectId: params.projectId,\n namespace: '',\n });\n const missingKey = keys.find((key) => !(key in vars));\n if (missingKey !== undefined) {\n const reference = references.find((candidate) => candidate.key === missingKey);\n throw new InterpolationUnresolvableError(params.definitionId, {\n field: reference?.field ?? 'env',\n source: reference?.source ?? `vars.${missingKey}`,\n ...(reference?.envKey === undefined ? {} : {envKey: reference.envKey}),\n });\n }\n\n return vars;\n}\n\nfunction materializeRunGraphJobs(params: {\n readonly params: CreateWorkflowRunParams;\n readonly run: WorkflowRun;\n readonly vars: Record<string, string> | undefined;\n readonly materializedJobs: readonly MaterializedWorkflowJob[];\n}): readonly MaterializedRunGraphJob[] {\n return params.materializedJobs.map((job, jobIndex) => ({\n job: {\n key: job.key,\n mode: job.mode,\n name: workflowTemplateSource(job.name),\n status: 'pending' as const,\n checkoutPersistCredentials: job.checkout.persistCredentials,\n checkoutPermissionsContents: job.checkout.permissions.contents,\n success: job.success ?? null,\n executionTimeoutMs: job.executionTimeoutMs ?? null,\n listeningTimeoutMs: job.listening?.timeoutMs ?? null,\n maxExecutions: job.listening?.maxExecutions ?? null,\n onResolve: job.listening?.onResolve ?? null,\n batchDebounceMs: job.listening?.batch?.debounceMs ?? null,\n batchMaxSize: job.listening?.batch?.maxSize ?? null,\n batchMaxWaitMs: job.listening?.batch?.maxWaitMs ?? null,\n listeningOn: job.listening?.on ? [...job.listening.on] : null,\n listeningUntil: job.listening?.until ? [...job.listening.until] : null,\n dependencies: [...job.dependencies],\n runner: job.runner.length === 0 ? null : [...job.runner],\n position: job.position,\n },\n createExecution: (jobRow) => {\n if (jobRow.mode === 'listening') return undefined;\n\n const fallbackName = `${jobRow.key} #1`;\n const modelJob = params.params.model.jobs[jobIndex];\n if (!modelJob) return undefined;\n const executionPlan = deriveInitialJobExecutionPlan({\n run: params.run,\n modelJob,\n job,\n jobId: jobRow.id,\n sequence: 1,\n fallbackName,\n triggerPayload: params.params.triggerPayload,\n inputs: params.params.inputs ?? null,\n vars: params.vars,\n });\n\n return {\n sequence: 1,\n name: executionPlan.name,\n runner: [...executionPlan.runner],\n status: 'pending' as const,\n evaluationTrace:\n executionPlan.evaluationTrace?.length === 0 ? null : executionPlan.evaluationTrace,\n };\n },\n createSteps: () =>\n job.steps.map((step) => ({\n key: step.key,\n name: step.name,\n sourceLocation: step.sourceLocation,\n status: step.status,\n type: step.type,\n config: step.config,\n condition: step.condition ?? null,\n configPlan: step.configPlan ?? null,\n authoredConfig: step.authoredConfig,\n position: step.position,\n })),\n }));\n}\n\nfunction referencedVariables(\n model: WorkflowModel,\n jobs: readonly WorkflowModelJob[],\n): readonly ReferencedVariable[] {\n const references: ReferencedVariable[] = [];\n\n if (jobs.length > 0) {\n collectTemplateVariableReferences(model.templates?.env, references);\n }\n\n for (const job of jobs) {\n collectFieldVariableReferences(job.name, references, {field: 'job.name'});\n for (const template of job.runnerTemplates ?? []) {\n collectFieldVariableReferences(template, references, {field: 'job.runner'});\n }\n collectTemplateVariableReferences(job.outputs, references, {field: 'job.outputs'});\n collectTemplateVariableReferences(job.templates?.env, references);\n\n for (const step of job.steps) {\n collectFieldVariableReferences(step.templates?.name, references, {field: 'step.name'});\n if (step.kind === 'run') {\n collectFieldVariableReferences(step.templates?.command, references, {field: 'run'});\n collectTemplateVariableReferences(step.templates?.env, references);\n } else {\n collectFieldVariableReferences(step.templates?.prompt, references, {field: 'agent.prompt'});\n collectFieldVariableReferences(step.templates?.model, references, {field: 'agent.model'});\n collectFieldVariableReferences(step.templates?.provider, references, {\n field: 'agent.provider',\n });\n }\n }\n }\n\n return references;\n}\n\nfunction collectTemplateVariableReferences(\n templates: Readonly<Record<string, readonly ResolvedFieldSegment[]>> | undefined,\n references: ReferencedVariable[],\n source?: {\n readonly field: InterpolationUnresolvableError['field'];\n },\n): void {\n for (const [envKey, template] of Object.entries(templates ?? {})) {\n collectFieldVariableReferences(\n template,\n references,\n source === undefined ? {field: 'env', envKey} : source,\n );\n }\n}\n\nfunction collectFieldVariableReferences(\n template: readonly ResolvedFieldSegment[] | undefined,\n references: ReferencedVariable[],\n source: {\n readonly field: InterpolationUnresolvableError['field'];\n readonly envKey?: string | undefined;\n },\n): void {\n for (const segment of template ?? []) {\n if (segment.kind === 'literal') continue;\n const keyAccess = analyzeContextKeyAccess(segment.expression);\n for (const reference of keyAccess.references) {\n if (reference.root !== 'vars') continue;\n references.push({\n key: reference.key,\n field: source.field,\n source: segment.expression.source,\n envKey: source.envKey,\n });\n }\n }\n}\n\nfunction workflowTemplateSource(template: MaterializedWorkflowJob['name']): string | null {\n if (template === undefined) return null;\n\n return template\n .map((segment) =>\n segment.kind === 'literal' ? segment.value : `$${'{{'} ${segment.expression.source} ${'}}'}`,\n )\n .join('');\n}\n\nfunction logTemplateDiagnostics(params: {\n readonly workflowRunId: string;\n readonly diagnostics: readonly (WorkflowStepTemplateDiagnostic & {\n readonly jobKey: string;\n readonly stepName: string;\n })[];\n}): void {\n if (params.diagnostics.length === 0) return;\n\n logger().warn(\n {workflowRunId: params.workflowRunId, diagnostics: params.diagnostics},\n 'Workflow interpolation resolved with diagnostics',\n );\n}\n"],"names":["createWorkflowModelSnapshot","analyzeContextKeyAccess","logger","eq","createAgentToolMaterializationSnapshot","loadAgentToolMaterializationContext","InterpolationUnresolvableError","deriveInitialJobExecutionPlan","materializeWorkflowRunJobs","recordWorkflowRunCreated","db","workflowRunAttempts","toWorkflowRun","workflowRuns","persistMaterializedRunGraph","createWorkflowRun","params","agentToolContext","integrations","undefined","model","workspaceId","projectId","projects","agentToolMaterialization","context","result","transaction","tx","insertResult","insert","values","definitionId","name","status","currentAttempt","triggerProvider","triggerPayload","provider","triggerSource","source","triggerEvent","event","inputs","sourceSnapshot","triggerIdempotencyKey","onConflictDoNothing","target","returning","runRow","Error","existing","select","from","where","limit","existingRow","run","created","attemptRow","workflowRunId","id","attempt","oneShotJobs","jobs","filter","job","mode","vars","loadReferencedVariables","secrets","materializedJobs","resolveAgentDefaults","agentToolSnapshot","graphJobs","materializeRunGraphJobs","workflowRunAttempt","logTemplateDiagnostics","diagnostics","flatMap","steps","step","map","diagnostic","jobKey","key","stepName","references","referencedVariables","keys","Set","reference","sort","length","getVariablesByNamespace","namespace","missingKey","find","candidate","field","envKey","jobIndex","workflowTemplateSource","checkoutPersistCredentials","checkout","persistCredentials","checkoutPermissionsContents","permissions","contents","success","executionTimeoutMs","listeningTimeoutMs","listening","timeoutMs","maxExecutions","onResolve","batchDebounceMs","batch","debounceMs","batchMaxSize","maxSize","batchMaxWaitMs","maxWaitMs","listeningOn","on","listeningUntil","until","dependencies","runner","position","createExecution","jobRow","fallbackName","modelJob","executionPlan","jobId","sequence","evaluationTrace","createSteps","sourceLocation","type","config","condition","configPlan","authoredConfig","collectTemplateVariableReferences","templates","env","collectFieldVariableReferences","template","runnerTemplates","outputs","kind","command","prompt","Object","entries","segment","keyAccess","expression","root","push","value","join","warn"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export type { UpdateJobExecutionStatusAtVersionParams, UpdateJobExecutionStatusParams, } from './workflow-runs/job-executions.js';
2
- export { failJobExecutionAsTimedOut, getFirstJobExecutionByJobId, getJobExecutionById, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getLatestJobExecutionByJobId, lockActiveJobExecutionLeaseForUpdate, recordJobExecutionQueuedAt, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, updateJobExecutionStatus, } from './workflow-runs/job-executions.js';
2
+ export { failJobExecutionAsTimedOut, getFirstJobExecutionByJobId, getJobExecutionById, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getLatestJobExecutionByJobId, recordJobExecutionQueuedAt, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, updateJobExecutionStatus, } from './workflow-runs/job-executions.js';
3
3
  export type { EvaluateJobActivationsParams, EvaluateJobSuccessResult, JobActivationDecision, JobScope, UpdateJobStatusAtVersionParams, UpdateJobStatusParams, } from './workflow-runs/jobs.js';
4
4
  export { evaluateJobActivations, evaluateJobSuccess, getDirectDependencyJobContexts, getJobById, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, resolveJobStatusFromJobExecutions, updateJobStatus, updateJobStatusAtVersion, } from './workflow-runs/jobs.js';
5
5
  export { writeJobStepsSettledOutbox, writeStepAttemptTerminatedOutbox, writeStepRestartEnqueuedOutbox, } from './workflow-runs/outbox.js';
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-runs.d.ts","sourceRoot":"","sources":["../../src/db/workflow-runs.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uCAAuC,EACvC,8BAA8B,GAC/B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,sCAAsC,EACtC,4BAA4B,EAC5B,oCAAoC,EACpC,0BAA0B,EAC1B,2BAA2B,EAC3B,mCAAmC,EACnC,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,QAAQ,EACR,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,8BAA8B,EAC9B,UAAU,EACV,WAAW,EACX,6BAA6B,EAC7B,sBAAsB,EACtB,iCAAiC,EACjC,eAAe,EACf,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,+BAA+B,EAC/B,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,gBAAgB,EAChB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,0BAA0B,EAC1B,qCAAqC,EACrC,uBAAuB,EACvB,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,+BAA+B,EAC/B,iBAAiB,EACjB,eAAe,EACf,+BAA+B,EAC/B,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,iCAAiC,EACjC,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,eAAe,GAChB,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"workflow-runs.d.ts","sourceRoot":"","sources":["../../src/db/workflow-runs.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uCAAuC,EACvC,8BAA8B,GAC/B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,sCAAsC,EACtC,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,mCAAmC,EACnC,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,QAAQ,EACR,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,8BAA8B,EAC9B,UAAU,EACV,WAAW,EACX,6BAA6B,EAC7B,sBAAsB,EACtB,iCAAiC,EACjC,eAAe,EACf,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,+BAA+B,EAC/B,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,gBAAgB,EAChB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,0BAA0B,EAC1B,qCAAqC,EACrC,uBAAuB,EACvB,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,+BAA+B,EAC/B,iBAAiB,EACjB,eAAe,EACf,+BAA+B,EAC/B,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,iCAAiC,EACjC,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,eAAe,GAChB,MAAM,0BAA0B,CAAC"}
@@ -1,4 +1,4 @@
1
- export { failJobExecutionAsTimedOut, getFirstJobExecutionByJobId, getJobExecutionById, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getLatestJobExecutionByJobId, lockActiveJobExecutionLeaseForUpdate, recordJobExecutionQueuedAt, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, updateJobExecutionStatus } from './workflow-runs/job-executions.js';
1
+ export { failJobExecutionAsTimedOut, getFirstJobExecutionByJobId, getJobExecutionById, getJobExecutionsByJobId, getJobExecutionsByWorkflowRunAttemptId, getLatestJobExecutionByJobId, recordJobExecutionQueuedAt, recordJobExecutionStartedAt, resolveJobExecutionAfterLeaseExpiry, updateJobExecutionStatus } from './workflow-runs/job-executions.js';
2
2
  export { evaluateJobActivations, evaluateJobSuccess, getDirectDependencyJobContexts, getJobById, getJobScope, getJobsByWorkflowRunAttemptId, getJobsByWorkflowRunId, resolveJobStatusFromJobExecutions, updateJobStatus, updateJobStatusAtVersion } from './workflow-runs/jobs.js';
3
3
  export { writeJobStepsSettledOutbox, writeStepAttemptTerminatedOutbox, writeStepRestartEnqueuedOutbox } from './workflow-runs/outbox.js';
4
4
  export { buildWorkflowRunListConditions, getJobExecutionDetail, getLatestAttempt, getWorkflowJobExecutionDepth, getWorkflowRunAggregates, getWorkflowRunAttemptById, getWorkflowRunByAttemptId, getWorkflowRunById, getWorkflowRunDetail, listRunAttempts, listWorkflowRuns, listWorkflowRunsByProject } from './workflow-runs/queries.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/db/workflow-runs.ts"],"sourcesContent":["export type {\n UpdateJobExecutionStatusAtVersionParams,\n UpdateJobExecutionStatusParams,\n} from './workflow-runs/job-executions.js';\nexport {\n failJobExecutionAsTimedOut,\n getFirstJobExecutionByJobId,\n getJobExecutionById,\n getJobExecutionsByJobId,\n getJobExecutionsByWorkflowRunAttemptId,\n getLatestJobExecutionByJobId,\n lockActiveJobExecutionLeaseForUpdate,\n recordJobExecutionQueuedAt,\n recordJobExecutionStartedAt,\n resolveJobExecutionAfterLeaseExpiry,\n updateJobExecutionStatus,\n} from './workflow-runs/job-executions.js';\nexport type {\n EvaluateJobActivationsParams,\n EvaluateJobSuccessResult,\n JobActivationDecision,\n JobScope,\n UpdateJobStatusAtVersionParams,\n UpdateJobStatusParams,\n} from './workflow-runs/jobs.js';\nexport {\n evaluateJobActivations,\n evaluateJobSuccess,\n getDirectDependencyJobContexts,\n getJobById,\n getJobScope,\n getJobsByWorkflowRunAttemptId,\n getJobsByWorkflowRunId,\n resolveJobStatusFromJobExecutions,\n updateJobStatus,\n updateJobStatusAtVersion,\n} from './workflow-runs/jobs.js';\nexport {\n writeJobStepsSettledOutbox,\n writeStepAttemptTerminatedOutbox,\n writeStepRestartEnqueuedOutbox,\n} from './workflow-runs/outbox.js';\nexport type {\n ListWorkflowRunsParams,\n ListWorkflowRunsResult,\n WorkflowJobExecutionDepth,\n WorkflowJobExecutionDepthParams,\n WorkflowRunAggregates,\n WorkflowRunCursor,\n WorkflowRunFilters,\n} from './workflow-runs/queries.js';\nexport {\n buildWorkflowRunListConditions,\n getJobExecutionDetail,\n getLatestAttempt,\n getWorkflowJobExecutionDepth,\n getWorkflowRunAggregates,\n getWorkflowRunAttemptById,\n getWorkflowRunByAttemptId,\n getWorkflowRunById,\n getWorkflowRunDetail,\n listRunAttempts,\n listWorkflowRuns,\n listWorkflowRunsByProject,\n} from './workflow-runs/queries.js';\nexport type {\n CancelWorkflowRunParams,\n CreateRerunWorkflowRunParams,\n CreateWorkflowRunParams,\n FailWorkflowRunAsTimedOutParams,\n UpdateWorkflowRunStatusParams,\n} from './workflow-runs/runs.js';\nexport {\n cancelWorkflowRun,\n createRerunWorkflowRun,\n createWorkflowRun,\n failWorkflowRunAsTimedOut,\n updateWorkflowRunStatus,\n} from './workflow-runs/runs.js';\nexport type {\n ApplyStepResultParams,\n BulkUpdateStepStatusesParams,\n CancelRemainingStepsParams,\n DispatchStepWithCompletedConfigParams,\n FinishStepAttemptParams,\n InsertRunningStepAttemptParams,\n MarkStepRunningParams,\n MarkStepSkippedParams,\n RewindStepsToPendingParams,\n} from './workflow-runs/steps.js';\nexport {\n applyStepResult,\n bulkUpdateStepStatuses,\n cancelRemainingSteps,\n countStepAttempts,\n dispatchStepWithCompletedConfig,\n finishStepAttempt,\n getStepAttempts,\n getStepAttemptsByJobExecutionId,\n getStepAttemptsByJobIds,\n getStepById,\n getStepByIdForJobExecution,\n getStepsByJobExecutionId,\n getStepsByJobExecutionIdForUpdate,\n getStepsByJobId,\n insertRunningStepAttempt,\n markStepRunning,\n markStepSkipped,\n rewindStepsToPending,\n settleJobFailed,\n} from './workflow-runs/steps.js';\n"],"names":["failJobExecutionAsTimedOut","getFirstJobExecutionByJobId","getJobExecutionById","getJobExecutionsByJobId","getJobExecutionsByWorkflowRunAttemptId","getLatestJobExecutionByJobId","lockActiveJobExecutionLeaseForUpdate","recordJobExecutionQueuedAt","recordJobExecutionStartedAt","resolveJobExecutionAfterLeaseExpiry","updateJobExecutionStatus","evaluateJobActivations","evaluateJobSuccess","getDirectDependencyJobContexts","getJobById","getJobScope","getJobsByWorkflowRunAttemptId","getJobsByWorkflowRunId","resolveJobStatusFromJobExecutions","updateJobStatus","updateJobStatusAtVersion","writeJobStepsSettledOutbox","writeStepAttemptTerminatedOutbox","writeStepRestartEnqueuedOutbox","buildWorkflowRunListConditions","getJobExecutionDetail","getLatestAttempt","getWorkflowJobExecutionDepth","getWorkflowRunAggregates","getWorkflowRunAttemptById","getWorkflowRunByAttemptId","getWorkflowRunById","getWorkflowRunDetail","listRunAttempts","listWorkflowRuns","listWorkflowRunsByProject","cancelWorkflowRun","createRerunWorkflowRun","createWorkflowRun","failWorkflowRunAsTimedOut","updateWorkflowRunStatus","applyStepResult","bulkUpdateStepStatuses","cancelRemainingSteps","countStepAttempts","dispatchStepWithCompletedConfig","finishStepAttempt","getStepAttempts","getStepAttemptsByJobExecutionId","getStepAttemptsByJobIds","getStepById","getStepByIdForJobExecution","getStepsByJobExecutionId","getStepsByJobExecutionIdForUpdate","getStepsByJobId","insertRunningStepAttempt","markStepRunning","markStepSkipped","rewindStepsToPending","settleJobFailed"],"mappings":"AAIA,SACEA,0BAA0B,EAC1BC,2BAA2B,EAC3BC,mBAAmB,EACnBC,uBAAuB,EACvBC,sCAAsC,EACtCC,4BAA4B,EAC5BC,oCAAoC,EACpCC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,mCAAmC,EACnCC,wBAAwB,QACnB,oCAAoC;AAS3C,SACEC,sBAAsB,EACtBC,kBAAkB,EAClBC,8BAA8B,EAC9BC,UAAU,EACVC,WAAW,EACXC,6BAA6B,EAC7BC,sBAAsB,EACtBC,iCAAiC,EACjCC,eAAe,EACfC,wBAAwB,QACnB,0BAA0B;AACjC,SACEC,0BAA0B,EAC1BC,gCAAgC,EAChCC,8BAA8B,QACzB,4BAA4B;AAUnC,SACEC,8BAA8B,EAC9BC,qBAAqB,EACrBC,gBAAgB,EAChBC,4BAA4B,EAC5BC,wBAAwB,EACxBC,yBAAyB,EACzBC,yBAAyB,EACzBC,kBAAkB,EAClBC,oBAAoB,EACpBC,eAAe,EACfC,gBAAgB,EAChBC,yBAAyB,QACpB,6BAA6B;AAQpC,SACEC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,EACjBC,yBAAyB,EACzBC,uBAAuB,QAClB,0BAA0B;AAYjC,SACEC,eAAe,EACfC,sBAAsB,EACtBC,oBAAoB,EACpBC,iBAAiB,EACjBC,+BAA+B,EAC/BC,iBAAiB,EACjBC,eAAe,EACfC,+BAA+B,EAC/BC,uBAAuB,EACvBC,WAAW,EACXC,0BAA0B,EAC1BC,wBAAwB,EACxBC,iCAAiC,EACjCC,eAAe,EACfC,wBAAwB,EACxBC,eAAe,EACfC,eAAe,EACfC,oBAAoB,EACpBC,eAAe,QACV,2BAA2B"}
1
+ {"version":3,"sources":["../../src/db/workflow-runs.ts"],"sourcesContent":["export type {\n UpdateJobExecutionStatusAtVersionParams,\n UpdateJobExecutionStatusParams,\n} from './workflow-runs/job-executions.js';\nexport {\n failJobExecutionAsTimedOut,\n getFirstJobExecutionByJobId,\n getJobExecutionById,\n getJobExecutionsByJobId,\n getJobExecutionsByWorkflowRunAttemptId,\n getLatestJobExecutionByJobId,\n recordJobExecutionQueuedAt,\n recordJobExecutionStartedAt,\n resolveJobExecutionAfterLeaseExpiry,\n updateJobExecutionStatus,\n} from './workflow-runs/job-executions.js';\nexport type {\n EvaluateJobActivationsParams,\n EvaluateJobSuccessResult,\n JobActivationDecision,\n JobScope,\n UpdateJobStatusAtVersionParams,\n UpdateJobStatusParams,\n} from './workflow-runs/jobs.js';\nexport {\n evaluateJobActivations,\n evaluateJobSuccess,\n getDirectDependencyJobContexts,\n getJobById,\n getJobScope,\n getJobsByWorkflowRunAttemptId,\n getJobsByWorkflowRunId,\n resolveJobStatusFromJobExecutions,\n updateJobStatus,\n updateJobStatusAtVersion,\n} from './workflow-runs/jobs.js';\nexport {\n writeJobStepsSettledOutbox,\n writeStepAttemptTerminatedOutbox,\n writeStepRestartEnqueuedOutbox,\n} from './workflow-runs/outbox.js';\nexport type {\n ListWorkflowRunsParams,\n ListWorkflowRunsResult,\n WorkflowJobExecutionDepth,\n WorkflowJobExecutionDepthParams,\n WorkflowRunAggregates,\n WorkflowRunCursor,\n WorkflowRunFilters,\n} from './workflow-runs/queries.js';\nexport {\n buildWorkflowRunListConditions,\n getJobExecutionDetail,\n getLatestAttempt,\n getWorkflowJobExecutionDepth,\n getWorkflowRunAggregates,\n getWorkflowRunAttemptById,\n getWorkflowRunByAttemptId,\n getWorkflowRunById,\n getWorkflowRunDetail,\n listRunAttempts,\n listWorkflowRuns,\n listWorkflowRunsByProject,\n} from './workflow-runs/queries.js';\nexport type {\n CancelWorkflowRunParams,\n CreateRerunWorkflowRunParams,\n CreateWorkflowRunParams,\n FailWorkflowRunAsTimedOutParams,\n UpdateWorkflowRunStatusParams,\n} from './workflow-runs/runs.js';\nexport {\n cancelWorkflowRun,\n createRerunWorkflowRun,\n createWorkflowRun,\n failWorkflowRunAsTimedOut,\n updateWorkflowRunStatus,\n} from './workflow-runs/runs.js';\nexport type {\n ApplyStepResultParams,\n BulkUpdateStepStatusesParams,\n CancelRemainingStepsParams,\n DispatchStepWithCompletedConfigParams,\n FinishStepAttemptParams,\n InsertRunningStepAttemptParams,\n MarkStepRunningParams,\n MarkStepSkippedParams,\n RewindStepsToPendingParams,\n} from './workflow-runs/steps.js';\nexport {\n applyStepResult,\n bulkUpdateStepStatuses,\n cancelRemainingSteps,\n countStepAttempts,\n dispatchStepWithCompletedConfig,\n finishStepAttempt,\n getStepAttempts,\n getStepAttemptsByJobExecutionId,\n getStepAttemptsByJobIds,\n getStepById,\n getStepByIdForJobExecution,\n getStepsByJobExecutionId,\n getStepsByJobExecutionIdForUpdate,\n getStepsByJobId,\n insertRunningStepAttempt,\n markStepRunning,\n markStepSkipped,\n rewindStepsToPending,\n settleJobFailed,\n} from './workflow-runs/steps.js';\n"],"names":["failJobExecutionAsTimedOut","getFirstJobExecutionByJobId","getJobExecutionById","getJobExecutionsByJobId","getJobExecutionsByWorkflowRunAttemptId","getLatestJobExecutionByJobId","recordJobExecutionQueuedAt","recordJobExecutionStartedAt","resolveJobExecutionAfterLeaseExpiry","updateJobExecutionStatus","evaluateJobActivations","evaluateJobSuccess","getDirectDependencyJobContexts","getJobById","getJobScope","getJobsByWorkflowRunAttemptId","getJobsByWorkflowRunId","resolveJobStatusFromJobExecutions","updateJobStatus","updateJobStatusAtVersion","writeJobStepsSettledOutbox","writeStepAttemptTerminatedOutbox","writeStepRestartEnqueuedOutbox","buildWorkflowRunListConditions","getJobExecutionDetail","getLatestAttempt","getWorkflowJobExecutionDepth","getWorkflowRunAggregates","getWorkflowRunAttemptById","getWorkflowRunByAttemptId","getWorkflowRunById","getWorkflowRunDetail","listRunAttempts","listWorkflowRuns","listWorkflowRunsByProject","cancelWorkflowRun","createRerunWorkflowRun","createWorkflowRun","failWorkflowRunAsTimedOut","updateWorkflowRunStatus","applyStepResult","bulkUpdateStepStatuses","cancelRemainingSteps","countStepAttempts","dispatchStepWithCompletedConfig","finishStepAttempt","getStepAttempts","getStepAttemptsByJobExecutionId","getStepAttemptsByJobIds","getStepById","getStepByIdForJobExecution","getStepsByJobExecutionId","getStepsByJobExecutionIdForUpdate","getStepsByJobId","insertRunningStepAttempt","markStepRunning","markStepSkipped","rewindStepsToPending","settleJobFailed"],"mappings":"AAIA,SACEA,0BAA0B,EAC1BC,2BAA2B,EAC3BC,mBAAmB,EACnBC,uBAAuB,EACvBC,sCAAsC,EACtCC,4BAA4B,EAC5BC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,mCAAmC,EACnCC,wBAAwB,QACnB,oCAAoC;AAS3C,SACEC,sBAAsB,EACtBC,kBAAkB,EAClBC,8BAA8B,EAC9BC,UAAU,EACVC,WAAW,EACXC,6BAA6B,EAC7BC,sBAAsB,EACtBC,iCAAiC,EACjCC,eAAe,EACfC,wBAAwB,QACnB,0BAA0B;AACjC,SACEC,0BAA0B,EAC1BC,gCAAgC,EAChCC,8BAA8B,QACzB,4BAA4B;AAUnC,SACEC,8BAA8B,EAC9BC,qBAAqB,EACrBC,gBAAgB,EAChBC,4BAA4B,EAC5BC,wBAAwB,EACxBC,yBAAyB,EACzBC,yBAAyB,EACzBC,kBAAkB,EAClBC,oBAAoB,EACpBC,eAAe,EACfC,gBAAgB,EAChBC,yBAAyB,QACpB,6BAA6B;AAQpC,SACEC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,EACjBC,yBAAyB,EACzBC,uBAAuB,QAClB,0BAA0B;AAYjC,SACEC,eAAe,EACfC,sBAAsB,EACtBC,oBAAoB,EACpBC,iBAAiB,EACjBC,+BAA+B,EAC/BC,iBAAiB,EACjBC,eAAe,EACfC,+BAA+B,EAC/BC,uBAAuB,EACvBC,WAAW,EACXC,0BAA0B,EAC1BC,wBAAwB,EACxBC,iCAAiC,EACjCC,eAAe,EACfC,wBAAwB,EACxBC,eAAe,EACfC,eAAe,EACfC,oBAAoB,EACpBC,eAAe,QACV,2BAA2B"}
package/dist/index.d.ts CHANGED
@@ -2,8 +2,8 @@ import type { AnnotationsInterModuleClient } from '@shipfox/annotations-dto/inte
2
2
  import type { AgentInterModuleClient } from '@shipfox/api-agent-dto/inter-module';
3
3
  import type { AuthInterModuleClient } from '@shipfox/api-auth-dto/inter-module';
4
4
  import type { DefinitionsInterModuleClient } from '@shipfox/api-definitions-dto/inter-module';
5
- import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto';
6
- import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
5
+ import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto/inter-module';
6
+ import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
7
7
  import type { RunnersInterModuleClient } from '@shipfox/api-runners-dto/inter-module';
8
8
  import type { SecretsInterModuleClient } from '@shipfox/api-secrets-dto/inter-module';
9
9
  import { type ShipfoxModule } from '@shipfox/node-module';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,uCAAuC,CAAC;AACxF,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,2CAA2C,CAAC;AAC5F,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAOpE,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AACpF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AASpF,OAAO,EAAC,KAAK,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAgB3E,YAAY,EACV,GAAG,EACH,gBAAgB,EAChB,2BAA2B,EAC3B,iBAAiB,EACjB,IAAI,EACJ,cAAc,EACd,WAAW,EACX,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,2BAA2B,EAC3B,oBAAoB,EACpB,WAAW,EACX,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,OAAO,EACP,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,EAAE,EACF,sBAAsB,EACtB,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,qBAAqB,EAAC,MAAM,qCAAqC,CAAC;AAO1E,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,WAAW,EACX,WAAW,EACX,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,OAAO,GACR,EAAE;IACD,KAAK,EAAE,sBAAsB,CAAC;IAC9B,WAAW,EAAE,4BAA4B,CAAC;IAC1C,WAAW,EAAE,4BAA4B,CAAC;IAC1C,IAAI,EAAE,qBAAqB,CAAC;IAC5B,YAAY,EAAE,wBAAwB,CAAC;IACvC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,OAAO,EAAE,wBAAwB,CAAC;IAClC,OAAO,EAAE,wBAAwB,CAAC;CACnC,GAAG,aAAa,CA8ChB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,uCAAuC,CAAC;AACxF,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,2CAA2C,CAAC;AAC5F,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAOjF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AACpF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AASpF,OAAO,EAAC,KAAK,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAgB3E,YAAY,EACV,GAAG,EACH,gBAAgB,EAChB,2BAA2B,EAC3B,iBAAiB,EACjB,IAAI,EACJ,cAAc,EACd,WAAW,EACX,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,2BAA2B,EAC3B,oBAAoB,EACpB,WAAW,EACX,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,OAAO,EACP,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,EAAE,EACF,sBAAsB,EACtB,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,qBAAqB,EAAC,MAAM,qCAAqC,CAAC;AAO1E,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,WAAW,EACX,WAAW,EACX,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,OAAO,GACR,EAAE;IACD,KAAK,EAAE,sBAAsB,CAAC;IAC9B,WAAW,EAAE,4BAA4B,CAAC;IAC1C,WAAW,EAAE,4BAA4B,CAAC;IAC1C,IAAI,EAAE,qBAAqB,CAAC;IAC5B,YAAY,EAAE,wBAAwB,CAAC;IACvC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,OAAO,EAAE,wBAAwB,CAAC;IAClC,OAAO,EAAE,wBAAwB,CAAC;CACnC,GAAG,aAAa,CA8ChB"}
package/dist/index.js CHANGED
@@ -19,7 +19,8 @@ export function createWorkflowsModule({ agent, definitions, annotations, auth, i
19
19
  name: 'workflows',
20
20
  database: {
21
21
  db,
22
- migrationsPath
22
+ migrationsPath,
23
+ databaseNamespace: 'workflows'
23
24
  },
24
25
  routes: createWorkflowRoutes({
25
26
  agent,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport type {AnnotationsInterModuleClient} from '@shipfox/annotations-dto/inter-module';\nimport type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport type {AuthInterModuleClient} from '@shipfox/api-auth-dto/inter-module';\nimport type {DefinitionsInterModuleClient} from '@shipfox/api-definitions-dto/inter-module';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport {\n RUNNER_JOB_CLAIMED,\n RUNNER_JOB_LEASE_EXPIRED,\n RUNNER_JOB_QUEUED,\n type RunnersEventMap,\n} from '@shipfox/api-runners-dto';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {\n WORKFLOWS_JOB_EVENT_DELIVERED,\n WORKFLOWS_JOB_STEPS_SETTLED,\n WORKFLOWS_WORKFLOW_RUN_ATTEMPT_CREATED,\n WORKFLOWS_WORKFLOW_RUN_CANCELLED,\n type WorkflowsEventMapDto,\n workflowsEventSchemas,\n} from '@shipfox/api-workflows-dto';\nimport {type ShipfoxModule, subscriberFactory} from '@shipfox/node-module';\nimport {db, migrationsPath, workflowsOutbox} from '#db/index.js';\nimport {registerWorkflowsServiceMetrics} from '#metrics/index.js';\nimport {\n createWorkflowRoutes,\n onJobEventDelivered,\n onJobStepsSettled,\n onRunnerJobClaimed,\n onRunnerJobLeaseExpired,\n onRunnerJobQueued,\n onWorkflowRunAttemptCreated,\n onWorkflowRunCancelled,\n} from '#presentation/index.js';\nimport {createWorkflowsInterModulePresentation} from '#presentation/inter-module.js';\nimport {createOrchestrationActivities, WORKFLOWS_TASK_QUEUE} from '#temporal/index.js';\n\nexport type {\n Job,\n JobListenerEvent,\n JobListenerEventDisposition,\n RunWorkflowParams,\n Step,\n TriggerPayload,\n WorkflowRun,\n WorkflowSourceSnapshot,\n} from '#core/index.js';\nexport {\n DefinitionNotFoundError,\n InterpolationUnresolvableError,\n isPermanentRunWorkflowError,\n ProjectMismatchError,\n runWorkflow,\n WorkflowRunNotCancellableError,\n} from '#core/index.js';\nexport {\n closeDb,\n type DeliverEventToListenerParams,\n type DeliverEventToListenerResult,\n db,\n deliverEventToListener,\n getStepById,\n getStepByIdForJobExecution,\n migrationsPath,\n workflowsOutbox,\n} from '#db/index.js';\nexport {loadRunningLeasedStep} from '#presentation/routes/leased-step.js';\n\nconst packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');\nconst workflowsPath = resolve(packageRoot, 'dist/temporal/workflows/index.js');\n\nconst subscriber = subscriberFactory<WorkflowsEventMapDto & RunnersEventMap>();\n\nexport function createWorkflowsModule({\n agent,\n definitions,\n annotations,\n auth,\n integrations,\n projects,\n runners,\n secrets,\n}: {\n agent: AgentInterModuleClient;\n definitions: DefinitionsInterModuleClient;\n annotations: AnnotationsInterModuleClient;\n auth: AuthInterModuleClient;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n runners: RunnersInterModuleClient;\n secrets: SecretsInterModuleClient;\n}): ShipfoxModule {\n return {\n name: 'workflows',\n database: {db, migrationsPath},\n routes: createWorkflowRoutes({\n agent,\n annotations,\n auth,\n integrations,\n projects,\n runners,\n secrets,\n }),\n metrics: registerWorkflowsServiceMetrics,\n publishers: [\n {name: 'workflows', table: workflowsOutbox, db, eventSchemas: workflowsEventSchemas},\n ],\n subscribers: [\n subscriber(WORKFLOWS_WORKFLOW_RUN_ATTEMPT_CREATED, onWorkflowRunAttemptCreated),\n subscriber(WORKFLOWS_WORKFLOW_RUN_CANCELLED, onWorkflowRunCancelled),\n subscriber(WORKFLOWS_JOB_EVENT_DELIVERED, onJobEventDelivered),\n subscriber(WORKFLOWS_JOB_STEPS_SETTLED, onJobStepsSettled),\n subscriber(RUNNER_JOB_LEASE_EXPIRED, onRunnerJobLeaseExpired),\n subscriber(RUNNER_JOB_QUEUED, onRunnerJobQueued),\n subscriber(RUNNER_JOB_CLAIMED, onRunnerJobClaimed),\n ],\n workers: [\n {\n taskQueue: WORKFLOWS_TASK_QUEUE,\n workflowsPath,\n activities: () =>\n createOrchestrationActivities({agent, integrations, projects, runners, secrets}),\n workflows: [],\n },\n ],\n interModulePresentations: [\n createWorkflowsInterModulePresentation({\n agent,\n definitions,\n integrations,\n projects,\n runners,\n secrets,\n }),\n ],\n };\n}\n"],"names":["dirname","resolve","fileURLToPath","RUNNER_JOB_CLAIMED","RUNNER_JOB_LEASE_EXPIRED","RUNNER_JOB_QUEUED","WORKFLOWS_JOB_EVENT_DELIVERED","WORKFLOWS_JOB_STEPS_SETTLED","WORKFLOWS_WORKFLOW_RUN_ATTEMPT_CREATED","WORKFLOWS_WORKFLOW_RUN_CANCELLED","workflowsEventSchemas","subscriberFactory","db","migrationsPath","workflowsOutbox","registerWorkflowsServiceMetrics","createWorkflowRoutes","onJobEventDelivered","onJobStepsSettled","onRunnerJobClaimed","onRunnerJobLeaseExpired","onRunnerJobQueued","onWorkflowRunAttemptCreated","onWorkflowRunCancelled","createWorkflowsInterModulePresentation","createOrchestrationActivities","WORKFLOWS_TASK_QUEUE","DefinitionNotFoundError","InterpolationUnresolvableError","isPermanentRunWorkflowError","ProjectMismatchError","runWorkflow","WorkflowRunNotCancellableError","closeDb","deliverEventToListener","getStepById","getStepByIdForJobExecution","loadRunningLeasedStep","packageRoot","url","workflowsPath","subscriber","createWorkflowsModule","agent","definitions","annotations","auth","integrations","projects","runners","secrets","name","database","routes","metrics","publishers","table","eventSchemas","subscribers","workers","taskQueue","activities","workflows","interModulePresentations"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AAOvC,SACEC,kBAAkB,EAClBC,wBAAwB,EACxBC,iBAAiB,QAEZ,2BAA2B;AAGlC,SACEC,6BAA6B,EAC7BC,2BAA2B,EAC3BC,sCAAsC,EACtCC,gCAAgC,EAEhCC,qBAAqB,QAChB,6BAA6B;AACpC,SAA4BC,iBAAiB,QAAO,uBAAuB;AAC3E,SAAQC,EAAE,EAAEC,cAAc,EAAEC,eAAe,QAAO,eAAe;AACjE,SAAQC,+BAA+B,QAAO,oBAAoB;AAClE,SACEC,oBAAoB,EACpBC,mBAAmB,EACnBC,iBAAiB,EACjBC,kBAAkB,EAClBC,uBAAuB,EACvBC,iBAAiB,EACjBC,2BAA2B,EAC3BC,sBAAsB,QACjB,yBAAyB;AAChC,SAAQC,sCAAsC,QAAO,gCAAgC;AACrF,SAAQC,6BAA6B,EAAEC,oBAAoB,QAAO,qBAAqB;AAYvF,SACEC,uBAAuB,EACvBC,8BAA8B,EAC9BC,2BAA2B,EAC3BC,oBAAoB,EACpBC,WAAW,EACXC,8BAA8B,QACzB,iBAAiB;AACxB,SACEC,OAAO,EAGPrB,EAAE,EACFsB,sBAAsB,EACtBC,WAAW,EACXC,0BAA0B,EAC1BvB,cAAc,EACdC,eAAe,QACV,eAAe;AACtB,SAAQuB,qBAAqB,QAAO,sCAAsC;AAE1E,MAAMC,cAAcrC,QAAQD,QAAQE,cAAc,YAAYqC,GAAG,IAAI;AACrE,MAAMC,gBAAgBvC,QAAQqC,aAAa;AAE3C,MAAMG,aAAa9B;AAEnB,OAAO,SAAS+B,sBAAsB,EACpCC,KAAK,EACLC,WAAW,EACXC,WAAW,EACXC,IAAI,EACJC,YAAY,EACZC,QAAQ,EACRC,OAAO,EACPC,OAAO,EAUR;IACC,OAAO;QACLC,MAAM;QACNC,UAAU;YAACxC;YAAIC;QAAc;QAC7BwC,QAAQrC,qBAAqB;YAC3B2B;YACAE;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;QACAI,SAASvC;QACTwC,YAAY;YACV;gBAACJ,MAAM;gBAAaK,OAAO1C;gBAAiBF;gBAAI6C,cAAc/C;YAAqB;SACpF;QACDgD,aAAa;YACXjB,WAAWjC,wCAAwCc;YACnDmB,WAAWhC,kCAAkCc;YAC7CkB,WAAWnC,+BAA+BW;YAC1CwB,WAAWlC,6BAA6BW;YACxCuB,WAAWrC,0BAA0BgB;YACrCqB,WAAWpC,mBAAmBgB;YAC9BoB,WAAWtC,oBAAoBgB;SAChC;QACDwC,SAAS;YACP;gBACEC,WAAWlC;gBACXc;gBACAqB,YAAY,IACVpC,8BAA8B;wBAACkB;wBAAOI;wBAAcC;wBAAUC;wBAASC;oBAAO;gBAChFY,WAAW,EAAE;YACf;SACD;QACDC,0BAA0B;YACxBvC,uCAAuC;gBACrCmB;gBACAC;gBACAG;gBACAC;gBACAC;gBACAC;YACF;SACD;IACH;AACF"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport type {AnnotationsInterModuleClient} from '@shipfox/annotations-dto/inter-module';\nimport type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport type {AuthInterModuleClient} from '@shipfox/api-auth-dto/inter-module';\nimport type {DefinitionsInterModuleClient} from '@shipfox/api-definitions-dto/inter-module';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport {\n RUNNER_JOB_CLAIMED,\n RUNNER_JOB_LEASE_EXPIRED,\n RUNNER_JOB_QUEUED,\n type RunnersEventMap,\n} from '@shipfox/api-runners-dto';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {\n WORKFLOWS_JOB_EVENT_DELIVERED,\n WORKFLOWS_JOB_STEPS_SETTLED,\n WORKFLOWS_WORKFLOW_RUN_ATTEMPT_CREATED,\n WORKFLOWS_WORKFLOW_RUN_CANCELLED,\n type WorkflowsEventMapDto,\n workflowsEventSchemas,\n} from '@shipfox/api-workflows-dto';\nimport {type ShipfoxModule, subscriberFactory} from '@shipfox/node-module';\nimport {db, migrationsPath, workflowsOutbox} from '#db/index.js';\nimport {registerWorkflowsServiceMetrics} from '#metrics/index.js';\nimport {\n createWorkflowRoutes,\n onJobEventDelivered,\n onJobStepsSettled,\n onRunnerJobClaimed,\n onRunnerJobLeaseExpired,\n onRunnerJobQueued,\n onWorkflowRunAttemptCreated,\n onWorkflowRunCancelled,\n} from '#presentation/index.js';\nimport {createWorkflowsInterModulePresentation} from '#presentation/inter-module.js';\nimport {createOrchestrationActivities, WORKFLOWS_TASK_QUEUE} from '#temporal/index.js';\n\nexport type {\n Job,\n JobListenerEvent,\n JobListenerEventDisposition,\n RunWorkflowParams,\n Step,\n TriggerPayload,\n WorkflowRun,\n WorkflowSourceSnapshot,\n} from '#core/index.js';\nexport {\n DefinitionNotFoundError,\n InterpolationUnresolvableError,\n isPermanentRunWorkflowError,\n ProjectMismatchError,\n runWorkflow,\n WorkflowRunNotCancellableError,\n} from '#core/index.js';\nexport {\n closeDb,\n type DeliverEventToListenerParams,\n type DeliverEventToListenerResult,\n db,\n deliverEventToListener,\n getStepById,\n getStepByIdForJobExecution,\n migrationsPath,\n workflowsOutbox,\n} from '#db/index.js';\nexport {loadRunningLeasedStep} from '#presentation/routes/leased-step.js';\n\nconst packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');\nconst workflowsPath = resolve(packageRoot, 'dist/temporal/workflows/index.js');\n\nconst subscriber = subscriberFactory<WorkflowsEventMapDto & RunnersEventMap>();\n\nexport function createWorkflowsModule({\n agent,\n definitions,\n annotations,\n auth,\n integrations,\n projects,\n runners,\n secrets,\n}: {\n agent: AgentInterModuleClient;\n definitions: DefinitionsInterModuleClient;\n annotations: AnnotationsInterModuleClient;\n auth: AuthInterModuleClient;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n runners: RunnersInterModuleClient;\n secrets: SecretsInterModuleClient;\n}): ShipfoxModule {\n return {\n name: 'workflows',\n database: {db, migrationsPath, databaseNamespace: 'workflows'},\n routes: createWorkflowRoutes({\n agent,\n annotations,\n auth,\n integrations,\n projects,\n runners,\n secrets,\n }),\n metrics: registerWorkflowsServiceMetrics,\n publishers: [\n {name: 'workflows', table: workflowsOutbox, db, eventSchemas: workflowsEventSchemas},\n ],\n subscribers: [\n subscriber(WORKFLOWS_WORKFLOW_RUN_ATTEMPT_CREATED, onWorkflowRunAttemptCreated),\n subscriber(WORKFLOWS_WORKFLOW_RUN_CANCELLED, onWorkflowRunCancelled),\n subscriber(WORKFLOWS_JOB_EVENT_DELIVERED, onJobEventDelivered),\n subscriber(WORKFLOWS_JOB_STEPS_SETTLED, onJobStepsSettled),\n subscriber(RUNNER_JOB_LEASE_EXPIRED, onRunnerJobLeaseExpired),\n subscriber(RUNNER_JOB_QUEUED, onRunnerJobQueued),\n subscriber(RUNNER_JOB_CLAIMED, onRunnerJobClaimed),\n ],\n workers: [\n {\n taskQueue: WORKFLOWS_TASK_QUEUE,\n workflowsPath,\n activities: () =>\n createOrchestrationActivities({agent, integrations, projects, runners, secrets}),\n workflows: [],\n },\n ],\n interModulePresentations: [\n createWorkflowsInterModulePresentation({\n agent,\n definitions,\n integrations,\n projects,\n runners,\n secrets,\n }),\n ],\n };\n}\n"],"names":["dirname","resolve","fileURLToPath","RUNNER_JOB_CLAIMED","RUNNER_JOB_LEASE_EXPIRED","RUNNER_JOB_QUEUED","WORKFLOWS_JOB_EVENT_DELIVERED","WORKFLOWS_JOB_STEPS_SETTLED","WORKFLOWS_WORKFLOW_RUN_ATTEMPT_CREATED","WORKFLOWS_WORKFLOW_RUN_CANCELLED","workflowsEventSchemas","subscriberFactory","db","migrationsPath","workflowsOutbox","registerWorkflowsServiceMetrics","createWorkflowRoutes","onJobEventDelivered","onJobStepsSettled","onRunnerJobClaimed","onRunnerJobLeaseExpired","onRunnerJobQueued","onWorkflowRunAttemptCreated","onWorkflowRunCancelled","createWorkflowsInterModulePresentation","createOrchestrationActivities","WORKFLOWS_TASK_QUEUE","DefinitionNotFoundError","InterpolationUnresolvableError","isPermanentRunWorkflowError","ProjectMismatchError","runWorkflow","WorkflowRunNotCancellableError","closeDb","deliverEventToListener","getStepById","getStepByIdForJobExecution","loadRunningLeasedStep","packageRoot","url","workflowsPath","subscriber","createWorkflowsModule","agent","definitions","annotations","auth","integrations","projects","runners","secrets","name","database","databaseNamespace","routes","metrics","publishers","table","eventSchemas","subscribers","workers","taskQueue","activities","workflows","interModulePresentations"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AAOvC,SACEC,kBAAkB,EAClBC,wBAAwB,EACxBC,iBAAiB,QAEZ,2BAA2B;AAGlC,SACEC,6BAA6B,EAC7BC,2BAA2B,EAC3BC,sCAAsC,EACtCC,gCAAgC,EAEhCC,qBAAqB,QAChB,6BAA6B;AACpC,SAA4BC,iBAAiB,QAAO,uBAAuB;AAC3E,SAAQC,EAAE,EAAEC,cAAc,EAAEC,eAAe,QAAO,eAAe;AACjE,SAAQC,+BAA+B,QAAO,oBAAoB;AAClE,SACEC,oBAAoB,EACpBC,mBAAmB,EACnBC,iBAAiB,EACjBC,kBAAkB,EAClBC,uBAAuB,EACvBC,iBAAiB,EACjBC,2BAA2B,EAC3BC,sBAAsB,QACjB,yBAAyB;AAChC,SAAQC,sCAAsC,QAAO,gCAAgC;AACrF,SAAQC,6BAA6B,EAAEC,oBAAoB,QAAO,qBAAqB;AAYvF,SACEC,uBAAuB,EACvBC,8BAA8B,EAC9BC,2BAA2B,EAC3BC,oBAAoB,EACpBC,WAAW,EACXC,8BAA8B,QACzB,iBAAiB;AACxB,SACEC,OAAO,EAGPrB,EAAE,EACFsB,sBAAsB,EACtBC,WAAW,EACXC,0BAA0B,EAC1BvB,cAAc,EACdC,eAAe,QACV,eAAe;AACtB,SAAQuB,qBAAqB,QAAO,sCAAsC;AAE1E,MAAMC,cAAcrC,QAAQD,QAAQE,cAAc,YAAYqC,GAAG,IAAI;AACrE,MAAMC,gBAAgBvC,QAAQqC,aAAa;AAE3C,MAAMG,aAAa9B;AAEnB,OAAO,SAAS+B,sBAAsB,EACpCC,KAAK,EACLC,WAAW,EACXC,WAAW,EACXC,IAAI,EACJC,YAAY,EACZC,QAAQ,EACRC,OAAO,EACPC,OAAO,EAUR;IACC,OAAO;QACLC,MAAM;QACNC,UAAU;YAACxC;YAAIC;YAAgBwC,mBAAmB;QAAW;QAC7DC,QAAQtC,qBAAqB;YAC3B2B;YACAE;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;QACAK,SAASxC;QACTyC,YAAY;YACV;gBAACL,MAAM;gBAAaM,OAAO3C;gBAAiBF;gBAAI8C,cAAchD;YAAqB;SACpF;QACDiD,aAAa;YACXlB,WAAWjC,wCAAwCc;YACnDmB,WAAWhC,kCAAkCc;YAC7CkB,WAAWnC,+BAA+BW;YAC1CwB,WAAWlC,6BAA6BW;YACxCuB,WAAWrC,0BAA0BgB;YACrCqB,WAAWpC,mBAAmBgB;YAC9BoB,WAAWtC,oBAAoBgB;SAChC;QACDyC,SAAS;YACP;gBACEC,WAAWnC;gBACXc;gBACAsB,YAAY,IACVrC,8BAA8B;wBAACkB;wBAAOI;wBAAcC;wBAAUC;wBAASC;oBAAO;gBAChFa,WAAW,EAAE;YACf;SACD;QACDC,0BAA0B;YACxBxC,uCAAuC;gBACrCmB;gBACAC;gBACAG;gBACAC;gBACAC;gBACAC;YACF;SACD;IACH;AACF"}
@@ -1,7 +1,7 @@
1
1
  import type { AgentInterModuleClient } from '@shipfox/api-agent-dto/inter-module';
2
2
  import type { DefinitionsInterModuleClient } from '@shipfox/api-definitions-dto/inter-module';
3
- import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto';
4
- import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
3
+ import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto/inter-module';
4
+ import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
5
5
  import type { RunnersInterModuleClient } from '@shipfox/api-runners-dto/inter-module';
6
6
  import type { SecretsInterModuleClient } from '@shipfox/api-secrets-dto/inter-module';
7
7
  import { workflowsInterModuleContract } from '@shipfox/api-workflows-dto/inter-module';
@@ -1 +1 @@
1
- {"version":3,"file":"inter-module.d.ts","sourceRoot":"","sources":["../../src/presentation/inter-module.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,2CAA2C,CAAC;AAC5F,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AACpF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAC,4BAA4B,EAAC,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAa/B,wBAAgB,sCAAsC,CAAC,MAAM,EAAE;IAC7D,KAAK,EAAE,sBAAsB,CAAC;IAC9B,WAAW,EAAE,4BAA4B,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAAC;IACnE,OAAO,EAAE,wBAAwB,CAAC;IAClC,YAAY,EAAE,wBAAwB,CAAC;IACvC,QAAQ,EAAE,oBAAoB,CAAC;CAChC,GAAG,uBAAuB,CAAC,OAAO,4BAA4B,CAAC,CA+D/D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CA8BlF"}
1
+ {"version":3,"file":"inter-module.d.ts","sourceRoot":"","sources":["../../src/presentation/inter-module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,2CAA2C,CAAC;AAC5F,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gDAAgD,CAAC;AAC7F,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AACjF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AACpF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAC,4BAA4B,EAAC,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAc/B,wBAAgB,sCAAsC,CAAC,MAAM,EAAE;IAC7D,KAAK,EAAE,sBAAsB,CAAC;IAC9B,WAAW,EAAE,4BAA4B,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAAC;IACnE,OAAO,EAAE,wBAAwB,CAAC;IAClC,YAAY,EAAE,wBAAwB,CAAC;IACvC,QAAQ,EAAE,oBAAoB,CAAC;CAChC,GAAG,uBAAuB,CAAC,OAAO,4BAA4B,CAAC,CA+D/D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CA8BlF"}
@@ -1,6 +1,7 @@
1
- import { DEFAULT_HARNESS, harnessSchema, materializedAgentStepConfigSchema } from '@shipfox/api-agent-dto';
1
+ import { materializedAgentStepConfigSchema } from '@shipfox/api-agent-dto';
2
2
  import { workflowsInterModuleContract } from '@shipfox/api-workflows-dto/inter-module';
3
3
  import { createInterModuleKnownError, defineInterModulePresentation } from '@shipfox/inter-module';
4
+ import { DEFAULT_HARNESS, harnessSchema } from '@shipfox/workflow-document';
4
5
  import { InvalidJobRunnerLabelsError } from '#core/errors.js';
5
6
  import { AgentConfigUnresolvableError, AgentIntegrationMaterializationError, DefinitionNotFoundError, InterpolationUnresolvableError, ProjectMismatchError, runWorkflow } from '#core/index.js';
6
7
  import { getJobScope, getStepById, getStepByIdForJobExecution } from '#db/index.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/presentation/inter-module.ts"],"sourcesContent":["import {\n DEFAULT_HARNESS,\n harnessSchema,\n materializedAgentStepConfigSchema,\n} from '@shipfox/api-agent-dto';\nimport type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport type {DefinitionsInterModuleClient} from '@shipfox/api-definitions-dto/inter-module';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {workflowsInterModuleContract} from '@shipfox/api-workflows-dto/inter-module';\nimport {\n createInterModuleKnownError,\n defineInterModulePresentation,\n type InterModulePresentation,\n} from '@shipfox/inter-module';\nimport {InvalidJobRunnerLabelsError} from '#core/errors.js';\nimport {\n AgentConfigUnresolvableError,\n AgentIntegrationMaterializationError,\n DefinitionNotFoundError,\n InterpolationUnresolvableError,\n ProjectMismatchError,\n runWorkflow,\n} from '#core/index.js';\nimport {getJobScope, getStepById, getStepByIdForJobExecution} from '#db/index.js';\nimport {deliverEventToListener} from '#db/job-listener-events.js';\n\nexport function createWorkflowsInterModulePresentation(params: {\n agent: AgentInterModuleClient;\n definitions: DefinitionsInterModuleClient;\n secrets: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'>;\n runners: RunnersInterModuleClient;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n}): InterModulePresentation<typeof workflowsInterModuleContract> {\n return defineInterModulePresentation(workflowsInterModuleContract, {\n startRunFromTrigger: async (input) => {\n try {\n const run = await runWorkflow(\n params.definitions,\n {\n agent: params.agent,\n workspaceId: input.workspaceId,\n projectId: input.projectId,\n definitionId: input.definitionId,\n triggerPayload: input.triggerPayload,\n inputs: input.inputs,\n triggerIdempotencyKey: input.idempotencyKey,\n integrations: params.integrations,\n projects: params.projects,\n },\n {secrets: params.secrets},\n );\n return {id: run.id, name: run.name};\n } catch (error) {\n throw toStartRunKnownError(error, input.definitionId);\n }\n },\n deliverEventToJobListener: async (input) =>\n await deliverEventToListener({...input, receivedAt: new Date(input.receivedAt)}),\n getStepLogContext: async ({stepId}) => {\n const step = await getStepById(stepId);\n const parsed = harnessSchema.safeParse(step?.config.harness);\n return {harness: parsed.success ? parsed.data : DEFAULT_HARNESS};\n },\n getLeasedAgentToolContext: async (input) => {\n const method = workflowsInterModuleContract.methods.getLeasedAgentToolContext;\n const {active: leaseIsActive} = await params.runners.getLeaseState({\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n runnerSessionId: input.runnerSessionId,\n });\n if (!leaseIsActive) throw createInterModuleKnownError(method, 'lease-not-active', {});\n\n const step = await getStepByIdForJobExecution({\n stepId: input.stepId,\n jobExecutionId: input.jobExecutionId,\n });\n if (!step) throw createInterModuleKnownError(method, 'step-not-found', {});\n\n const scope = await getJobScope(input.jobId);\n if (!scope) throw createInterModuleKnownError(method, 'job-not-found', {});\n if (step.currentAttempt !== input.attempt) {\n throw createInterModuleKnownError(method, 'step-attempt-mismatch', {});\n }\n if (step.status !== 'running')\n throw createInterModuleKnownError(method, 'step-not-running', {});\n if (step.type !== 'agent')\n throw createInterModuleKnownError(method, 'leased-step-not-agent', {});\n\n const config = materializedAgentStepConfigSchema.safeParse(step.config);\n if (!config.success) {\n throw createInterModuleKnownError(method, 'agent-step-config-invalid', {});\n }\n return {workspaceId: scope.workspaceId, integrations: config.data.integrations ?? []};\n },\n });\n}\n\nexport function toStartRunKnownError(error: unknown, definitionId: string): unknown {\n const method = workflowsInterModuleContract.methods.startRunFromTrigger;\n if (error instanceof DefinitionNotFoundError) {\n return createInterModuleKnownError(method, 'definition-not-found', {definitionId});\n }\n if (error instanceof ProjectMismatchError) {\n return createInterModuleKnownError(method, 'project-mismatch', {});\n }\n if (error instanceof AgentConfigUnresolvableError) {\n return createInterModuleKnownError(method, 'agent-config-unresolvable', {\n definitionId: error.definitionId,\n });\n }\n if (error instanceof AgentIntegrationMaterializationError) {\n return createInterModuleKnownError(method, 'agent-integration-materialization-failed', {});\n }\n if (error instanceof InterpolationUnresolvableError) {\n return createInterModuleKnownError(method, 'interpolation-unresolvable', {\n definitionId: error.definitionId,\n field: error.field,\n source: error.source,\n ...(error.envKey === undefined ? {} : {envKey: error.envKey}),\n });\n }\n if (error instanceof InvalidJobRunnerLabelsError) {\n return createInterModuleKnownError(method, 'invalid-job-runner-labels', {\n labels: [...error.labels],\n });\n }\n return error;\n}\n"],"names":["DEFAULT_HARNESS","harnessSchema","materializedAgentStepConfigSchema","workflowsInterModuleContract","createInterModuleKnownError","defineInterModulePresentation","InvalidJobRunnerLabelsError","AgentConfigUnresolvableError","AgentIntegrationMaterializationError","DefinitionNotFoundError","InterpolationUnresolvableError","ProjectMismatchError","runWorkflow","getJobScope","getStepById","getStepByIdForJobExecution","deliverEventToListener","createWorkflowsInterModulePresentation","params","startRunFromTrigger","input","run","definitions","agent","workspaceId","projectId","definitionId","triggerPayload","inputs","triggerIdempotencyKey","idempotencyKey","integrations","projects","secrets","id","name","error","toStartRunKnownError","deliverEventToJobListener","receivedAt","Date","getStepLogContext","stepId","step","parsed","safeParse","config","harness","success","data","getLeasedAgentToolContext","method","methods","active","leaseIsActive","runners","getLeaseState","jobId","jobExecutionId","runnerSessionId","scope","currentAttempt","attempt","status","type","field","source","envKey","undefined","labels"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/presentation/inter-module.ts"],"sourcesContent":["import {materializedAgentStepConfigSchema} from '@shipfox/api-agent-dto';\nimport type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport type {DefinitionsInterModuleClient} from '@shipfox/api-definitions-dto/inter-module';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport type {SecretsInterModuleClient} from '@shipfox/api-secrets-dto/inter-module';\nimport {workflowsInterModuleContract} from '@shipfox/api-workflows-dto/inter-module';\nimport {\n createInterModuleKnownError,\n defineInterModulePresentation,\n type InterModulePresentation,\n} from '@shipfox/inter-module';\nimport {DEFAULT_HARNESS, harnessSchema} from '@shipfox/workflow-document';\nimport {InvalidJobRunnerLabelsError} from '#core/errors.js';\nimport {\n AgentConfigUnresolvableError,\n AgentIntegrationMaterializationError,\n DefinitionNotFoundError,\n InterpolationUnresolvableError,\n ProjectMismatchError,\n runWorkflow,\n} from '#core/index.js';\nimport {getJobScope, getStepById, getStepByIdForJobExecution} from '#db/index.js';\nimport {deliverEventToListener} from '#db/job-listener-events.js';\n\nexport function createWorkflowsInterModulePresentation(params: {\n agent: AgentInterModuleClient;\n definitions: DefinitionsInterModuleClient;\n secrets: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'>;\n runners: RunnersInterModuleClient;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n}): InterModulePresentation<typeof workflowsInterModuleContract> {\n return defineInterModulePresentation(workflowsInterModuleContract, {\n startRunFromTrigger: async (input) => {\n try {\n const run = await runWorkflow(\n params.definitions,\n {\n agent: params.agent,\n workspaceId: input.workspaceId,\n projectId: input.projectId,\n definitionId: input.definitionId,\n triggerPayload: input.triggerPayload,\n inputs: input.inputs,\n triggerIdempotencyKey: input.idempotencyKey,\n integrations: params.integrations,\n projects: params.projects,\n },\n {secrets: params.secrets},\n );\n return {id: run.id, name: run.name};\n } catch (error) {\n throw toStartRunKnownError(error, input.definitionId);\n }\n },\n deliverEventToJobListener: async (input) =>\n await deliverEventToListener({...input, receivedAt: new Date(input.receivedAt)}),\n getStepLogContext: async ({stepId}) => {\n const step = await getStepById(stepId);\n const parsed = harnessSchema.safeParse(step?.config.harness);\n return {harness: parsed.success ? parsed.data : DEFAULT_HARNESS};\n },\n getLeasedAgentToolContext: async (input) => {\n const method = workflowsInterModuleContract.methods.getLeasedAgentToolContext;\n const {active: leaseIsActive} = await params.runners.getLeaseState({\n jobId: input.jobId,\n jobExecutionId: input.jobExecutionId,\n runnerSessionId: input.runnerSessionId,\n });\n if (!leaseIsActive) throw createInterModuleKnownError(method, 'lease-not-active', {});\n\n const step = await getStepByIdForJobExecution({\n stepId: input.stepId,\n jobExecutionId: input.jobExecutionId,\n });\n if (!step) throw createInterModuleKnownError(method, 'step-not-found', {});\n\n const scope = await getJobScope(input.jobId);\n if (!scope) throw createInterModuleKnownError(method, 'job-not-found', {});\n if (step.currentAttempt !== input.attempt) {\n throw createInterModuleKnownError(method, 'step-attempt-mismatch', {});\n }\n if (step.status !== 'running')\n throw createInterModuleKnownError(method, 'step-not-running', {});\n if (step.type !== 'agent')\n throw createInterModuleKnownError(method, 'leased-step-not-agent', {});\n\n const config = materializedAgentStepConfigSchema.safeParse(step.config);\n if (!config.success) {\n throw createInterModuleKnownError(method, 'agent-step-config-invalid', {});\n }\n return {workspaceId: scope.workspaceId, integrations: config.data.integrations ?? []};\n },\n });\n}\n\nexport function toStartRunKnownError(error: unknown, definitionId: string): unknown {\n const method = workflowsInterModuleContract.methods.startRunFromTrigger;\n if (error instanceof DefinitionNotFoundError) {\n return createInterModuleKnownError(method, 'definition-not-found', {definitionId});\n }\n if (error instanceof ProjectMismatchError) {\n return createInterModuleKnownError(method, 'project-mismatch', {});\n }\n if (error instanceof AgentConfigUnresolvableError) {\n return createInterModuleKnownError(method, 'agent-config-unresolvable', {\n definitionId: error.definitionId,\n });\n }\n if (error instanceof AgentIntegrationMaterializationError) {\n return createInterModuleKnownError(method, 'agent-integration-materialization-failed', {});\n }\n if (error instanceof InterpolationUnresolvableError) {\n return createInterModuleKnownError(method, 'interpolation-unresolvable', {\n definitionId: error.definitionId,\n field: error.field,\n source: error.source,\n ...(error.envKey === undefined ? {} : {envKey: error.envKey}),\n });\n }\n if (error instanceof InvalidJobRunnerLabelsError) {\n return createInterModuleKnownError(method, 'invalid-job-runner-labels', {\n labels: [...error.labels],\n });\n }\n return error;\n}\n"],"names":["materializedAgentStepConfigSchema","workflowsInterModuleContract","createInterModuleKnownError","defineInterModulePresentation","DEFAULT_HARNESS","harnessSchema","InvalidJobRunnerLabelsError","AgentConfigUnresolvableError","AgentIntegrationMaterializationError","DefinitionNotFoundError","InterpolationUnresolvableError","ProjectMismatchError","runWorkflow","getJobScope","getStepById","getStepByIdForJobExecution","deliverEventToListener","createWorkflowsInterModulePresentation","params","startRunFromTrigger","input","run","definitions","agent","workspaceId","projectId","definitionId","triggerPayload","inputs","triggerIdempotencyKey","idempotencyKey","integrations","projects","secrets","id","name","error","toStartRunKnownError","deliverEventToJobListener","receivedAt","Date","getStepLogContext","stepId","step","parsed","safeParse","config","harness","success","data","getLeasedAgentToolContext","method","methods","active","leaseIsActive","runners","getLeaseState","jobId","jobExecutionId","runnerSessionId","scope","currentAttempt","attempt","status","type","field","source","envKey","undefined","labels"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import type { ProjectsModuleClient } from '@shipfox/api-projects-dto';
1
+ import type { ProjectsModuleClient } from '@shipfox/api-projects-dto/inter-module';
2
2
  export declare function cancelRunRoute(projects: ProjectsModuleClient): import("@shipfox/node-fastify").RouteDefinition;
3
3
  //# sourceMappingURL=cancel-run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cancel-run.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/cancel-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AASpE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,oBAAoB,mDA8B5D"}
1
+ {"version":3,"file":"cancel-run.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/cancel-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AASjF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,oBAAoB,mDA8B5D"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/cancel-run.ts"],"sourcesContent":["import type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport {workflowRunDtoSchema} from '@shipfox/api-workflows-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {WorkflowRunNotCancellableError, WorkflowRunNotFoundError} from '#core/errors.js';\nimport {cancelWorkflowRun} from '#db/index.js';\nimport {toRunDto} from '#presentation/dto/index.js';\nimport {requireAccessibleRun} from './require-accessible-run.js';\n\nexport function cancelRunRoute(projects: ProjectsModuleClient) {\n return defineRoute({\n method: 'POST',\n path: '/:id/cancel',\n description: 'Cancel an in-progress workflow run',\n schema: {\n params: z.object({\n id: z.string().uuid(),\n }),\n response: {\n 200: workflowRunDtoSchema,\n },\n },\n errorHandler: (error) => {\n if (error instanceof WorkflowRunNotCancellableError) {\n throw new ClientError(error.message, 'run-already-finished', {status: 409});\n }\n if (error instanceof WorkflowRunNotFoundError) {\n throw new ClientError('Run not found', 'not-found', {status: 404});\n }\n throw error;\n },\n handler: async (request) => {\n const {id} = request.params;\n const run = await requireAccessibleRun({request, id, projects});\n\n const cancelled = await cancelWorkflowRun({workflowRunId: run.id});\n return toRunDto(cancelled);\n },\n });\n}\n"],"names":["workflowRunDtoSchema","ClientError","defineRoute","z","WorkflowRunNotCancellableError","WorkflowRunNotFoundError","cancelWorkflowRun","toRunDto","requireAccessibleRun","cancelRunRoute","projects","method","path","description","schema","params","object","id","string","uuid","response","errorHandler","error","message","status","handler","request","run","cancelled","workflowRunId"],"mappings":"AACA,SAAQA,oBAAoB,QAAO,6BAA6B;AAChE,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,8BAA8B,EAAEC,wBAAwB,QAAO,kBAAkB;AACzF,SAAQC,iBAAiB,QAAO,eAAe;AAC/C,SAAQC,QAAQ,QAAO,6BAA6B;AACpD,SAAQC,oBAAoB,QAAO,8BAA8B;AAEjE,OAAO,SAASC,eAAeC,QAA8B;IAC3D,OAAOR,YAAY;QACjBS,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,QAAQZ,EAAEa,MAAM,CAAC;gBACfC,IAAId,EAAEe,MAAM,GAAGC,IAAI;YACrB;YACAC,UAAU;gBACR,KAAKpB;YACP;QACF;QACAqB,cAAc,CAACC;YACb,IAAIA,iBAAiBlB,gCAAgC;gBACnD,MAAM,IAAIH,YAAYqB,MAAMC,OAAO,EAAE,wBAAwB;oBAACC,QAAQ;gBAAG;YAC3E;YACA,IAAIF,iBAAiBjB,0BAA0B;gBAC7C,MAAM,IAAIJ,YAAY,iBAAiB,aAAa;oBAACuB,QAAQ;gBAAG;YAClE;YACA,MAAMF;QACR;QACAG,SAAS,OAAOC;YACd,MAAM,EAACT,EAAE,EAAC,GAAGS,QAAQX,MAAM;YAC3B,MAAMY,MAAM,MAAMnB,qBAAqB;gBAACkB;gBAAST;gBAAIP;YAAQ;YAE7D,MAAMkB,YAAY,MAAMtB,kBAAkB;gBAACuB,eAAeF,IAAIV,EAAE;YAAA;YAChE,OAAOV,SAASqB;QAClB;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/cancel-run.ts"],"sourcesContent":["import type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport {workflowRunDtoSchema} from '@shipfox/api-workflows-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {WorkflowRunNotCancellableError, WorkflowRunNotFoundError} from '#core/errors.js';\nimport {cancelWorkflowRun} from '#db/index.js';\nimport {toRunDto} from '#presentation/dto/index.js';\nimport {requireAccessibleRun} from './require-accessible-run.js';\n\nexport function cancelRunRoute(projects: ProjectsModuleClient) {\n return defineRoute({\n method: 'POST',\n path: '/:id/cancel',\n description: 'Cancel an in-progress workflow run',\n schema: {\n params: z.object({\n id: z.string().uuid(),\n }),\n response: {\n 200: workflowRunDtoSchema,\n },\n },\n errorHandler: (error) => {\n if (error instanceof WorkflowRunNotCancellableError) {\n throw new ClientError(error.message, 'run-already-finished', {status: 409});\n }\n if (error instanceof WorkflowRunNotFoundError) {\n throw new ClientError('Run not found', 'not-found', {status: 404});\n }\n throw error;\n },\n handler: async (request) => {\n const {id} = request.params;\n const run = await requireAccessibleRun({request, id, projects});\n\n const cancelled = await cancelWorkflowRun({workflowRunId: run.id});\n return toRunDto(cancelled);\n },\n });\n}\n"],"names":["workflowRunDtoSchema","ClientError","defineRoute","z","WorkflowRunNotCancellableError","WorkflowRunNotFoundError","cancelWorkflowRun","toRunDto","requireAccessibleRun","cancelRunRoute","projects","method","path","description","schema","params","object","id","string","uuid","response","errorHandler","error","message","status","handler","request","run","cancelled","workflowRunId"],"mappings":"AACA,SAAQA,oBAAoB,QAAO,6BAA6B;AAChE,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,8BAA8B,EAAEC,wBAAwB,QAAO,kBAAkB;AACzF,SAAQC,iBAAiB,QAAO,eAAe;AAC/C,SAAQC,QAAQ,QAAO,6BAA6B;AACpD,SAAQC,oBAAoB,QAAO,8BAA8B;AAEjE,OAAO,SAASC,eAAeC,QAA8B;IAC3D,OAAOR,YAAY;QACjBS,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,QAAQZ,EAAEa,MAAM,CAAC;gBACfC,IAAId,EAAEe,MAAM,GAAGC,IAAI;YACrB;YACAC,UAAU;gBACR,KAAKpB;YACP;QACF;QACAqB,cAAc,CAACC;YACb,IAAIA,iBAAiBlB,gCAAgC;gBACnD,MAAM,IAAIH,YAAYqB,MAAMC,OAAO,EAAE,wBAAwB;oBAACC,QAAQ;gBAAG;YAC3E;YACA,IAAIF,iBAAiBjB,0BAA0B;gBAC7C,MAAM,IAAIJ,YAAY,iBAAiB,aAAa;oBAACuB,QAAQ;gBAAG;YAClE;YACA,MAAMF;QACR;QACAG,SAAS,OAAOC;YACd,MAAM,EAACT,EAAE,EAAC,GAAGS,QAAQX,MAAM;YAC3B,MAAMY,MAAM,MAAMnB,qBAAqB;gBAACkB;gBAAST;gBAAIP;YAAQ;YAE7D,MAAMkB,YAAY,MAAMtB,kBAAkB;gBAACuB,eAAeF,IAAIV,EAAE;YAAA;YAChE,OAAOV,SAASqB;QAClB;IACF;AACF"}