@shipfox/api-workflows 13.1.0 → 15.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +61 -0
  3. package/README.md +12 -5
  4. package/dist/core/checkout.d.ts +4 -2
  5. package/dist/core/checkout.d.ts.map +1 -1
  6. package/dist/core/checkout.js +7 -2
  7. package/dist/core/checkout.js.map +1 -1
  8. package/dist/core/entities/job.d.ts +1 -1
  9. package/dist/core/entities/job.d.ts.map +1 -1
  10. package/dist/core/entities/job.js.map +1 -1
  11. package/dist/core/entities/workflow-run.d.ts +25 -6
  12. package/dist/core/entities/workflow-run.d.ts.map +1 -1
  13. package/dist/core/entities/workflow-run.js.map +1 -1
  14. package/dist/core/index.d.ts +2 -2
  15. package/dist/core/index.d.ts.map +1 -1
  16. package/dist/core/index.js +1 -1
  17. package/dist/core/index.js.map +1 -1
  18. package/dist/core/run-workflow.d.ts +26 -1
  19. package/dist/core/run-workflow.d.ts.map +1 -1
  20. package/dist/core/run-workflow.js +27 -1
  21. package/dist/core/run-workflow.js.map +1 -1
  22. package/dist/db/db.d.ts +72 -0
  23. package/dist/db/db.d.ts.map +1 -1
  24. package/dist/db/schema/workflow-runs.d.ts +45 -1
  25. package/dist/db/schema/workflow-runs.d.ts.map +1 -1
  26. package/dist/db/schema/workflow-runs.js +42 -1
  27. package/dist/db/schema/workflow-runs.js.map +1 -1
  28. package/dist/db/workflow-runs/jobs.d.ts +3 -1
  29. package/dist/db/workflow-runs/jobs.d.ts.map +1 -1
  30. package/dist/db/workflow-runs/jobs.js +12 -3
  31. package/dist/db/workflow-runs/jobs.js.map +1 -1
  32. package/dist/db/workflow-runs/queries.d.ts +3 -2
  33. package/dist/db/workflow-runs/queries.d.ts.map +1 -1
  34. package/dist/db/workflow-runs/queries.js +3 -0
  35. package/dist/db/workflow-runs/queries.js.map +1 -1
  36. package/dist/db/workflow-runs/run-create.d.ts +4 -1
  37. package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
  38. package/dist/db/workflow-runs/run-create.js +14 -1
  39. package/dist/db/workflow-runs/run-create.js.map +1 -1
  40. package/dist/presentation/dto/workflow-run.d.ts.map +1 -1
  41. package/dist/presentation/dto/workflow-run.js +14 -0
  42. package/dist/presentation/dto/workflow-run.js.map +1 -1
  43. package/dist/presentation/inter-module.d.ts +1 -0
  44. package/dist/presentation/inter-module.d.ts.map +1 -1
  45. package/dist/presentation/inter-module.js +41 -4
  46. package/dist/presentation/inter-module.js.map +1 -1
  47. package/dist/presentation/routes/checkout-token.d.ts.map +1 -1
  48. package/dist/presentation/routes/checkout-token.js +2 -1
  49. package/dist/presentation/routes/checkout-token.js.map +1 -1
  50. package/dist/presentation/routes/get-run-aggregates.d.ts.map +1 -1
  51. package/dist/presentation/routes/get-run-aggregates.js +2 -1
  52. package/dist/presentation/routes/get-run-aggregates.js.map +1 -1
  53. package/dist/presentation/routes/leased-step.d.ts +3 -1
  54. package/dist/presentation/routes/leased-step.d.ts.map +1 -1
  55. package/dist/presentation/routes/leased-step.js +2 -1
  56. package/dist/presentation/routes/leased-step.js.map +1 -1
  57. package/dist/presentation/routes/list-runs.d.ts.map +1 -1
  58. package/dist/presentation/routes/list-runs.js +2 -1
  59. package/dist/presentation/routes/list-runs.js.map +1 -1
  60. package/dist/presentation/routes/project-access.d.ts +1 -0
  61. package/dist/presentation/routes/project-access.d.ts.map +1 -1
  62. package/dist/tsconfig.test.tsbuildinfo +1 -1
  63. package/drizzle/0004_dev_run_origin.sql +12 -0
  64. package/drizzle/meta/0004_snapshot.json +1773 -0
  65. package/drizzle/meta/_journal.json +7 -0
  66. package/package.json +16 -16
  67. package/src/core/checkout.test.ts +198 -1
  68. package/src/core/checkout.ts +18 -5
  69. package/src/core/entities/job.ts +1 -1
  70. package/src/core/entities/workflow-run.ts +26 -6
  71. package/src/core/index.ts +2 -2
  72. package/src/core/job-transition/decide-job-activation.test.ts +2 -0
  73. package/src/core/run-workflow.test.ts +151 -3
  74. package/src/core/run-workflow.ts +59 -3
  75. package/src/core/workflow-run-creation.test.ts +2 -0
  76. package/src/db/job-listeners.test.ts +17 -0
  77. package/src/db/schema/workflow-runs.ts +58 -0
  78. package/src/db/workflow-runs/jobs.ts +17 -3
  79. package/src/db/workflow-runs/queries.ts +6 -1
  80. package/src/db/workflow-runs/run-create.test.ts +87 -0
  81. package/src/db/workflow-runs/run-create.ts +23 -1
  82. package/src/presentation/dto/workflow-run.ts +23 -1
  83. package/src/presentation/inter-module.test.ts +131 -1
  84. package/src/presentation/inter-module.ts +48 -3
  85. package/src/presentation/routes/checkout-token.test.ts +45 -0
  86. package/src/presentation/routes/checkout-token.ts +2 -1
  87. package/src/presentation/routes/get-run-aggregates.test.ts +56 -0
  88. package/src/presentation/routes/get-run-aggregates.ts +2 -0
  89. package/src/presentation/routes/get-step-secrets.test.ts +1 -0
  90. package/src/presentation/routes/leased-step.ts +7 -1
  91. package/src/presentation/routes/list-runs.test.ts +152 -0
  92. package/src/presentation/routes/list-runs.ts +2 -0
  93. package/test/factories/workflow-run.ts +2 -0
  94. package/tsconfig.build.tsbuildinfo +1 -1
@@ -3,7 +3,7 @@ import { workflowsInterModuleContract } from '@shipfox/api-workflows-dto/inter-m
3
3
  import { createInterModuleKnownError, defineInterModulePresentation } from '@shipfox/inter-module';
4
4
  import { DEFAULT_HARNESS, harnessSchema } from '@shipfox/workflow-document';
5
5
  import { InvalidJobRunnerLabelsError, WorkspaceDeletedError, WorkspaceNotFoundError, WorkspaceSuspendedError } from '#core/errors.js';
6
- import { AgentConfigUnresolvableError, AgentIntegrationMaterializationError, DefinitionNotFoundError, InterpolationUnresolvableError, ProjectMismatchError, runWorkflow } from '#core/index.js';
6
+ import { AgentConfigUnresolvableError, AgentIntegrationMaterializationError, DefinitionNotFoundError, InterpolationUnresolvableError, ProjectMismatchError, runDevWorkflow, runWorkflow } from '#core/index.js';
7
7
  import { resolveWorkflowRunTriggerReference } from '#core/resolve-trigger-reference.js';
8
8
  import { assertWorkspaceAdmitsNewJobs } from '#core/workspace-admission.js';
9
9
  import { getJobScope, getStepById, getStepByIdForJobExecution } from '#db/index.js';
@@ -35,6 +35,35 @@ export function createWorkflowsInterModulePresentation(params) {
35
35
  throw toStartRunKnownError(error, input.definitionId);
36
36
  }
37
37
  },
38
+ startDevRun: async (input)=>{
39
+ try {
40
+ await assertWorkspaceAdmitsNewJobs(params.workspaces, input.workspaceId);
41
+ const run = await runDevWorkflow(params.agent, {
42
+ workspaceId: input.workspaceId,
43
+ projectId: input.projectId,
44
+ workflowId: input.workflowId,
45
+ model: input.model,
46
+ sourceSnapshot: input.sourceSnapshot,
47
+ devSource: {
48
+ ...input.devSource,
49
+ replayOfEventId: input.devSource.replayOfEventId ?? null
50
+ },
51
+ triggerPayload: input.triggerPayload,
52
+ triggerConnectionId: input.triggerConnectionId,
53
+ inputs: input.inputs,
54
+ integrations: params.integrations,
55
+ projects: params.projects
56
+ }, {
57
+ secrets: params.secrets
58
+ });
59
+ return {
60
+ id: run.id,
61
+ name: run.name
62
+ };
63
+ } catch (error) {
64
+ throw toStartDevRunKnownError(error);
65
+ }
66
+ },
38
67
  resolveWorkflowRunTriggerReference: async (input)=>await resolveWorkflowRunTriggerReference({
39
68
  workspaceId: input.workspaceId,
40
69
  triggerConnectionId: input.triggerConnectionId,
@@ -118,8 +147,8 @@ export function createWorkflowsInterModulePresentation(params) {
118
147
  }
119
148
  export function toStartRunKnownError(error, definitionId) {
120
149
  const method = workflowsInterModuleContract.methods.startRunFromTrigger;
121
- const workspaceError = toWorkspaceAdmissionKnownError(method, error);
122
- if (workspaceError !== undefined) return workspaceError;
150
+ const mapped = toRunCreationKnownError(method, error);
151
+ if (mapped !== undefined) return mapped;
123
152
  if (error instanceof DefinitionNotFoundError) {
124
153
  return createInterModuleKnownError(method, 'definition-not-found', {
125
154
  definitionId
@@ -128,6 +157,14 @@ export function toStartRunKnownError(error, definitionId) {
128
157
  if (error instanceof ProjectMismatchError) {
129
158
  return createInterModuleKnownError(method, 'project-mismatch', {});
130
159
  }
160
+ return error;
161
+ }
162
+ export function toStartDevRunKnownError(error) {
163
+ return toRunCreationKnownError(workflowsInterModuleContract.methods.startDevRun, error) ?? error;
164
+ }
165
+ function toRunCreationKnownError(method, error) {
166
+ const workspaceError = toWorkspaceAdmissionKnownError(method, error);
167
+ if (workspaceError !== undefined) return workspaceError;
131
168
  if (error instanceof AgentConfigUnresolvableError) {
132
169
  return createInterModuleKnownError(method, 'agent-config-unresolvable', {
133
170
  definitionId: error.definitionId
@@ -153,7 +190,7 @@ export function toStartRunKnownError(error, definitionId) {
153
190
  ]
154
191
  });
155
192
  }
156
- return error;
193
+ return undefined;
157
194
  }
158
195
  function toWorkspaceAdmissionKnownError(method, error) {
159
196
  if (error instanceof WorkspaceSuspendedError) {
@@ -1 +1 @@
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 type {WorkspacesInterModuleClient} from '@shipfox/api-workspaces-dto/inter-module';\nimport {\n createInterModuleKnownError,\n defineInterModulePresentation,\n type InterModuleKnownErrorFor,\n type InterModulePresentation,\n} from '@shipfox/inter-module';\nimport {DEFAULT_HARNESS, harnessSchema} from '@shipfox/workflow-document';\nimport type {WorkflowRunTriggerReference} from '#core/entities/workflow-run.js';\nimport {\n InvalidJobRunnerLabelsError,\n WorkspaceDeletedError,\n WorkspaceNotFoundError,\n WorkspaceSuspendedError,\n} from '#core/errors.js';\nimport {\n AgentConfigUnresolvableError,\n AgentIntegrationMaterializationError,\n DefinitionNotFoundError,\n InterpolationUnresolvableError,\n ProjectMismatchError,\n runWorkflow,\n} from '#core/index.js';\nimport {resolveWorkflowRunTriggerReference} from '#core/resolve-trigger-reference.js';\nimport {assertWorkspaceAdmitsNewJobs} from '#core/workspace-admission.js';\nimport {getJobScope, getStepById, getStepByIdForJobExecution} from '#db/index.js';\nimport {deliverEventToListener} from '#db/job-listener-events.js';\n\ntype WorkspaceAdmissionKnownError = InterModuleKnownErrorFor<\n typeof workflowsInterModuleContract.methods.deliverEventToJobListener\n>;\n\nexport function createWorkflowsInterModulePresentation(params: {\n agent: AgentInterModuleClient;\n definitions: DefinitionsInterModuleClient;\n workspaces: WorkspacesInterModuleClient;\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 await assertWorkspaceAdmitsNewJobs(params.workspaces, input.workspaceId);\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 triggerConnectionId: input.triggerConnectionId,\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 resolveWorkflowRunTriggerReference: async (input) =>\n await resolveWorkflowRunTriggerReference({\n workspaceId: input.workspaceId,\n triggerConnectionId: input.triggerConnectionId,\n triggerPayload: input.triggerPayload,\n integrations: params.integrations,\n projects: params.projects,\n }),\n deliverEventToJobListener: async (input) => {\n const method = workflowsInterModuleContract.methods.deliverEventToJobListener;\n try {\n const scope = input.disposition === 'fire' ? await getJobScope(input.jobId) : undefined;\n if (scope) {\n await assertWorkspaceAdmitsNewJobs(params.workspaces, scope.workspaceId);\n }\n\n let triggerReference: WorkflowRunTriggerReference | null = null;\n if (input.triggerReference !== undefined) {\n triggerReference = input.triggerReference;\n } else if (scope) {\n triggerReference = await resolveWorkflowRunTriggerReference({\n workspaceId: scope.workspaceId,\n triggerConnectionId: input.triggerConnectionId,\n triggerPayload: {\n provider: input.provider,\n source: input.source,\n event: input.event,\n deliveryId: input.deliveryId,\n data: input.payload,\n },\n integrations: params.integrations,\n projects: params.projects,\n });\n }\n return await deliverEventToListener({\n ...input,\n triggerReference,\n receivedAt: new Date(input.receivedAt),\n });\n } catch (error) {\n const workspaceError = toWorkspaceAdmissionKnownError(method, error);\n if (workspaceError !== undefined) throw workspaceError;\n throw error;\n }\n },\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 const workspaceError = toWorkspaceAdmissionKnownError(method, error);\n if (workspaceError !== undefined) return workspaceError;\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\nfunction toWorkspaceAdmissionKnownError(\n method:\n | typeof workflowsInterModuleContract.methods.startRunFromTrigger\n | typeof workflowsInterModuleContract.methods.deliverEventToJobListener,\n error: unknown,\n): WorkspaceAdmissionKnownError | undefined {\n if (error instanceof WorkspaceSuspendedError) {\n return createInterModuleKnownError(method, 'workspace-suspended', {\n workspaceId: error.workspaceId,\n });\n }\n if (error instanceof WorkspaceDeletedError) {\n return createInterModuleKnownError(method, 'workspace-deleted', {\n workspaceId: error.workspaceId,\n });\n }\n if (error instanceof WorkspaceNotFoundError) {\n return createInterModuleKnownError(method, 'workspace-not-found', {\n workspaceId: error.workspaceId,\n });\n }\n return undefined;\n}\n"],"names":["materializedAgentStepConfigSchema","workflowsInterModuleContract","createInterModuleKnownError","defineInterModulePresentation","DEFAULT_HARNESS","harnessSchema","InvalidJobRunnerLabelsError","WorkspaceDeletedError","WorkspaceNotFoundError","WorkspaceSuspendedError","AgentConfigUnresolvableError","AgentIntegrationMaterializationError","DefinitionNotFoundError","InterpolationUnresolvableError","ProjectMismatchError","runWorkflow","resolveWorkflowRunTriggerReference","assertWorkspaceAdmitsNewJobs","getJobScope","getStepById","getStepByIdForJobExecution","deliverEventToListener","createWorkflowsInterModulePresentation","params","startRunFromTrigger","input","workspaces","workspaceId","run","definitions","agent","projectId","definitionId","triggerPayload","triggerConnectionId","inputs","triggerIdempotencyKey","idempotencyKey","integrations","projects","secrets","id","name","error","toStartRunKnownError","deliverEventToJobListener","method","methods","scope","disposition","jobId","undefined","triggerReference","provider","source","event","deliveryId","data","payload","receivedAt","Date","workspaceError","toWorkspaceAdmissionKnownError","getStepLogContext","stepId","step","parsed","safeParse","config","harness","success","getLeasedAgentToolContext","active","leaseIsActive","runners","getLeaseState","jobExecutionId","runnerSessionId","currentAttempt","attempt","status","type","field","envKey","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 type {WorkspacesInterModuleClient} from '@shipfox/api-workspaces-dto/inter-module';\nimport {\n createInterModuleKnownError,\n defineInterModulePresentation,\n type InterModuleKnownErrorFor,\n type InterModulePresentation,\n} from '@shipfox/inter-module';\nimport {DEFAULT_HARNESS, harnessSchema} from '@shipfox/workflow-document';\nimport type {WorkflowRunTriggerReference} from '#core/entities/workflow-run.js';\nimport {\n InvalidJobRunnerLabelsError,\n WorkspaceDeletedError,\n WorkspaceNotFoundError,\n WorkspaceSuspendedError,\n} from '#core/errors.js';\nimport {\n AgentConfigUnresolvableError,\n AgentIntegrationMaterializationError,\n DefinitionNotFoundError,\n InterpolationUnresolvableError,\n ProjectMismatchError,\n runDevWorkflow,\n runWorkflow,\n} from '#core/index.js';\nimport {resolveWorkflowRunTriggerReference} from '#core/resolve-trigger-reference.js';\nimport {assertWorkspaceAdmitsNewJobs} from '#core/workspace-admission.js';\nimport {getJobScope, getStepById, getStepByIdForJobExecution} from '#db/index.js';\nimport {deliverEventToListener} from '#db/job-listener-events.js';\n\ntype WorkspaceAdmissionKnownError = InterModuleKnownErrorFor<\n typeof workflowsInterModuleContract.methods.deliverEventToJobListener\n>;\n\nexport function createWorkflowsInterModulePresentation(params: {\n agent: AgentInterModuleClient;\n definitions: DefinitionsInterModuleClient;\n workspaces: WorkspacesInterModuleClient;\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 await assertWorkspaceAdmitsNewJobs(params.workspaces, input.workspaceId);\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 triggerConnectionId: input.triggerConnectionId,\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 startDevRun: async (input) => {\n try {\n await assertWorkspaceAdmitsNewJobs(params.workspaces, input.workspaceId);\n const run = await runDevWorkflow(\n params.agent,\n {\n workspaceId: input.workspaceId,\n projectId: input.projectId,\n workflowId: input.workflowId,\n model: input.model,\n sourceSnapshot: input.sourceSnapshot,\n devSource: {\n ...input.devSource,\n replayOfEventId: input.devSource.replayOfEventId ?? null,\n },\n triggerPayload: input.triggerPayload,\n triggerConnectionId: input.triggerConnectionId,\n inputs: input.inputs,\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 toStartDevRunKnownError(error);\n }\n },\n resolveWorkflowRunTriggerReference: async (input) =>\n await resolveWorkflowRunTriggerReference({\n workspaceId: input.workspaceId,\n triggerConnectionId: input.triggerConnectionId,\n triggerPayload: input.triggerPayload,\n integrations: params.integrations,\n projects: params.projects,\n }),\n deliverEventToJobListener: async (input) => {\n const method = workflowsInterModuleContract.methods.deliverEventToJobListener;\n try {\n const scope = input.disposition === 'fire' ? await getJobScope(input.jobId) : undefined;\n if (scope) {\n await assertWorkspaceAdmitsNewJobs(params.workspaces, scope.workspaceId);\n }\n\n let triggerReference: WorkflowRunTriggerReference | null = null;\n if (input.triggerReference !== undefined) {\n triggerReference = input.triggerReference;\n } else if (scope) {\n triggerReference = await resolveWorkflowRunTriggerReference({\n workspaceId: scope.workspaceId,\n triggerConnectionId: input.triggerConnectionId,\n triggerPayload: {\n provider: input.provider,\n source: input.source,\n event: input.event,\n deliveryId: input.deliveryId,\n data: input.payload,\n },\n integrations: params.integrations,\n projects: params.projects,\n });\n }\n return await deliverEventToListener({\n ...input,\n triggerReference,\n receivedAt: new Date(input.receivedAt),\n });\n } catch (error) {\n const workspaceError = toWorkspaceAdmissionKnownError(method, error);\n if (workspaceError !== undefined) throw workspaceError;\n throw error;\n }\n },\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 const mapped = toRunCreationKnownError(method, error);\n if (mapped !== undefined) return mapped;\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 return error;\n}\n\nexport function toStartDevRunKnownError(error: unknown): unknown {\n return toRunCreationKnownError(workflowsInterModuleContract.methods.startDevRun, error) ?? error;\n}\n\nfunction toRunCreationKnownError(\n method:\n | typeof workflowsInterModuleContract.methods.startRunFromTrigger\n | typeof workflowsInterModuleContract.methods.startDevRun,\n error: unknown,\n): unknown {\n const workspaceError = toWorkspaceAdmissionKnownError(method, error);\n if (workspaceError !== undefined) return workspaceError;\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 undefined;\n}\n\nfunction toWorkspaceAdmissionKnownError(\n method:\n | typeof workflowsInterModuleContract.methods.startRunFromTrigger\n | typeof workflowsInterModuleContract.methods.startDevRun\n | typeof workflowsInterModuleContract.methods.deliverEventToJobListener,\n error: unknown,\n): WorkspaceAdmissionKnownError | undefined {\n if (error instanceof WorkspaceSuspendedError) {\n return createInterModuleKnownError(method, 'workspace-suspended', {\n workspaceId: error.workspaceId,\n });\n }\n if (error instanceof WorkspaceDeletedError) {\n return createInterModuleKnownError(method, 'workspace-deleted', {\n workspaceId: error.workspaceId,\n });\n }\n if (error instanceof WorkspaceNotFoundError) {\n return createInterModuleKnownError(method, 'workspace-not-found', {\n workspaceId: error.workspaceId,\n });\n }\n return undefined;\n}\n"],"names":["materializedAgentStepConfigSchema","workflowsInterModuleContract","createInterModuleKnownError","defineInterModulePresentation","DEFAULT_HARNESS","harnessSchema","InvalidJobRunnerLabelsError","WorkspaceDeletedError","WorkspaceNotFoundError","WorkspaceSuspendedError","AgentConfigUnresolvableError","AgentIntegrationMaterializationError","DefinitionNotFoundError","InterpolationUnresolvableError","ProjectMismatchError","runDevWorkflow","runWorkflow","resolveWorkflowRunTriggerReference","assertWorkspaceAdmitsNewJobs","getJobScope","getStepById","getStepByIdForJobExecution","deliverEventToListener","createWorkflowsInterModulePresentation","params","startRunFromTrigger","input","workspaces","workspaceId","run","definitions","agent","projectId","definitionId","triggerPayload","triggerConnectionId","inputs","triggerIdempotencyKey","idempotencyKey","integrations","projects","secrets","id","name","error","toStartRunKnownError","startDevRun","workflowId","model","sourceSnapshot","devSource","replayOfEventId","toStartDevRunKnownError","deliverEventToJobListener","method","methods","scope","disposition","jobId","undefined","triggerReference","provider","source","event","deliveryId","data","payload","receivedAt","Date","workspaceError","toWorkspaceAdmissionKnownError","getStepLogContext","stepId","step","parsed","safeParse","config","harness","success","getLeasedAgentToolContext","active","leaseIsActive","runners","getLeaseState","jobExecutionId","runnerSessionId","currentAttempt","attempt","status","type","mapped","toRunCreationKnownError","field","envKey","labels"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkout-token.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/checkout-token.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAapF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAChD,OAAO,EAAE,wBAAwB,CAAC;IAClC,YAAY,EAAE,wBAAwB,CAAC;IACvC,QAAQ,EAAE,oBAAoB,CAAC;CAChC,mDA6HA"}
1
+ {"version":3,"file":"checkout-token.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/checkout-token.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAapF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAChD,OAAO,EAAE,wBAAwB,CAAC;IAClC,YAAY,EAAE,wBAAwB,CAAC;IACvC,QAAQ,EAAE,oBAAoB,CAAC;CAChC,mDA8HA"}
@@ -63,7 +63,7 @@ export function createCheckoutTokenRoute(clients) {
63
63
  handler: async (request, reply)=>{
64
64
  const { stepId } = request.params;
65
65
  const { attempt } = request.query;
66
- const { step, workspaceId, projectId, triggerReference } = await loadRunningLeasedStep({
66
+ const { step, workspaceId, projectId, triggerReference, run } = await loadRunningLeasedStep({
67
67
  runners: clients.runners,
68
68
  request,
69
69
  stepId,
@@ -79,6 +79,7 @@ export function createCheckoutTokenRoute(clients) {
79
79
  workspaceId,
80
80
  projectId,
81
81
  triggerReference,
82
+ run,
82
83
  integrations: clients.integrations,
83
84
  projects: clients.projects
84
85
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/checkout-token.ts"],"sourcesContent":["import {\n type IntegrationsModuleClient,\n integrationsInterModuleContract,\n} from '@shipfox/api-integration-core-dto/inter-module';\nimport {\n type ProjectsModuleClient,\n projectsInterModuleContract,\n} from '@shipfox/api-projects-dto/inter-module';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport {\n checkoutTokenParamsSchema,\n checkoutTokenQuerySchema,\n checkoutTokenResponseSchema,\n} from '@shipfox/api-workflows-dto';\nimport {isInterModuleKnownError} from '@shipfox/inter-module';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {createStepCheckoutSpec} from '#core/checkout.js';\nimport {CheckoutConfigInvalidError, CheckoutIntentUnresolvedError} from '#core/errors.js';\nimport {toCheckoutTokenDto} from '#presentation/dto/checkout-token.js';\nimport {loadRunningLeasedStep} from './leased-step.js';\n\nexport function createCheckoutTokenRoute(clients: {\n runners: RunnersInterModuleClient;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n}) {\n return defineRoute({\n method: 'POST',\n path: '/steps/:stepId/checkout-token',\n description:\n \"Exchanges the runner's lease for short-lived checkout credentials for the currently running checkout step. The step id and attempt are checked against the lease and the server-frozen step config supplies the target, ref, permissions, and fetch depth.\",\n schema: {\n params: checkoutTokenParamsSchema,\n querystring: checkoutTokenQuerySchema,\n response: {200: checkoutTokenResponseSchema},\n },\n errorHandler: (error) => {\n const known = isInterModuleKnownError(\n integrationsInterModuleContract.methods.createCheckoutSpec,\n error,\n )\n ? error\n : undefined;\n const targetError = isInterModuleKnownError(\n projectsInterModuleContract.methods.resolveCheckoutTarget,\n error,\n )\n ? error\n : undefined;\n if (error instanceof CheckoutIntentUnresolvedError)\n throw new ClientError(error.message, 'checkout-unavailable', {status: 404});\n if (error instanceof CheckoutConfigInvalidError)\n throw new ClientError('Checkout configuration is invalid', 'checkout-config-invalid', {\n status: 409,\n });\n if (targetError?.code === 'checkout-repository-not-authorized')\n throw new ClientError(\n 'Checkout repository is not authorized for this workspace',\n 'checkout-repository-not-authorized',\n {status: 404},\n );\n if (known?.code === 'connection-not-found')\n throw new ClientError(\n 'Integration connection not found',\n 'integration-connection-not-found',\n {\n status: 404,\n },\n );\n if (known?.code === 'connection-inactive')\n throw new ClientError(\n 'Integration connection is not active',\n 'integration-connection-inactive',\n {\n status: 422,\n },\n );\n if (known?.code === 'connection-workspace-mismatch')\n throw new ClientError(\n 'Integration connection does not belong to this workspace',\n 'forbidden',\n {status: 403},\n );\n if (known?.code === 'provider-unavailable')\n throw new ClientError(\n 'Integration provider is unavailable',\n 'integration-provider-unavailable',\n {\n status: 422,\n },\n );\n if (known?.code === 'capability-unavailable')\n throw new ClientError(\n 'Integration capability is unavailable',\n 'integration-capability-unavailable',\n {\n status: 422,\n },\n );\n if (known?.code === 'checkout-unsupported')\n throw new ClientError(\n 'Integration checkout is unsupported',\n 'integration-checkout-unsupported',\n {\n status: 422,\n },\n );\n if (known?.code === 'provider-failure') {\n const status =\n known.details.reason === 'rate-limited'\n ? 429\n : known.details.reason === 'timeout' || known.details.reason === 'provider-unavailable'\n ? 503\n : 422;\n throw new ClientError('Integration provider request failed', known.details.reason, {\n details: {retry_after_seconds: known.details.retryAfterSeconds},\n status,\n });\n }\n throw error;\n },\n handler: async (request, reply) => {\n const {stepId} = request.params;\n const {attempt} = request.query;\n const {step, workspaceId, projectId, triggerReference} = await loadRunningLeasedStep({\n runners: clients.runners,\n request,\n stepId,\n attempt,\n });\n\n if (step.type !== 'setup' && step.type !== 'checkout') {\n throw new ClientError('Step is not a checkout step', 'step-not-checkout', {status: 409});\n }\n\n const checkout = await createStepCheckoutSpec({\n step,\n workspaceId,\n projectId,\n triggerReference,\n integrations: clients.integrations,\n projects: clients.projects,\n });\n reply.header('cache-control', 'no-store');\n return toCheckoutTokenDto(checkout.spec, {\n fetchDepth: checkout.fetchDepth,\n persist: checkout.persistCredentials,\n });\n },\n });\n}\n"],"names":["integrationsInterModuleContract","projectsInterModuleContract","checkoutTokenParamsSchema","checkoutTokenQuerySchema","checkoutTokenResponseSchema","isInterModuleKnownError","ClientError","defineRoute","createStepCheckoutSpec","CheckoutConfigInvalidError","CheckoutIntentUnresolvedError","toCheckoutTokenDto","loadRunningLeasedStep","createCheckoutTokenRoute","clients","method","path","description","schema","params","querystring","response","errorHandler","error","known","methods","createCheckoutSpec","undefined","targetError","resolveCheckoutTarget","message","status","code","details","reason","retry_after_seconds","retryAfterSeconds","handler","request","reply","stepId","attempt","query","step","workspaceId","projectId","triggerReference","runners","type","checkout","integrations","projects","header","spec","fetchDepth","persist","persistCredentials"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/checkout-token.ts"],"sourcesContent":["import {\n type IntegrationsModuleClient,\n integrationsInterModuleContract,\n} from '@shipfox/api-integration-core-dto/inter-module';\nimport {\n type ProjectsModuleClient,\n projectsInterModuleContract,\n} from '@shipfox/api-projects-dto/inter-module';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport {\n checkoutTokenParamsSchema,\n checkoutTokenQuerySchema,\n checkoutTokenResponseSchema,\n} from '@shipfox/api-workflows-dto';\nimport {isInterModuleKnownError} from '@shipfox/inter-module';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {createStepCheckoutSpec} from '#core/checkout.js';\nimport {CheckoutConfigInvalidError, CheckoutIntentUnresolvedError} from '#core/errors.js';\nimport {toCheckoutTokenDto} from '#presentation/dto/checkout-token.js';\nimport {loadRunningLeasedStep} from './leased-step.js';\n\nexport function createCheckoutTokenRoute(clients: {\n runners: RunnersInterModuleClient;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n}) {\n return defineRoute({\n method: 'POST',\n path: '/steps/:stepId/checkout-token',\n description:\n \"Exchanges the runner's lease for short-lived checkout credentials for the currently running checkout step. The step id and attempt are checked against the lease and the server-frozen step config supplies the target, ref, permissions, and fetch depth.\",\n schema: {\n params: checkoutTokenParamsSchema,\n querystring: checkoutTokenQuerySchema,\n response: {200: checkoutTokenResponseSchema},\n },\n errorHandler: (error) => {\n const known = isInterModuleKnownError(\n integrationsInterModuleContract.methods.createCheckoutSpec,\n error,\n )\n ? error\n : undefined;\n const targetError = isInterModuleKnownError(\n projectsInterModuleContract.methods.resolveCheckoutTarget,\n error,\n )\n ? error\n : undefined;\n if (error instanceof CheckoutIntentUnresolvedError)\n throw new ClientError(error.message, 'checkout-unavailable', {status: 404});\n if (error instanceof CheckoutConfigInvalidError)\n throw new ClientError('Checkout configuration is invalid', 'checkout-config-invalid', {\n status: 409,\n });\n if (targetError?.code === 'checkout-repository-not-authorized')\n throw new ClientError(\n 'Checkout repository is not authorized for this workspace',\n 'checkout-repository-not-authorized',\n {status: 404},\n );\n if (known?.code === 'connection-not-found')\n throw new ClientError(\n 'Integration connection not found',\n 'integration-connection-not-found',\n {\n status: 404,\n },\n );\n if (known?.code === 'connection-inactive')\n throw new ClientError(\n 'Integration connection is not active',\n 'integration-connection-inactive',\n {\n status: 422,\n },\n );\n if (known?.code === 'connection-workspace-mismatch')\n throw new ClientError(\n 'Integration connection does not belong to this workspace',\n 'forbidden',\n {status: 403},\n );\n if (known?.code === 'provider-unavailable')\n throw new ClientError(\n 'Integration provider is unavailable',\n 'integration-provider-unavailable',\n {\n status: 422,\n },\n );\n if (known?.code === 'capability-unavailable')\n throw new ClientError(\n 'Integration capability is unavailable',\n 'integration-capability-unavailable',\n {\n status: 422,\n },\n );\n if (known?.code === 'checkout-unsupported')\n throw new ClientError(\n 'Integration checkout is unsupported',\n 'integration-checkout-unsupported',\n {\n status: 422,\n },\n );\n if (known?.code === 'provider-failure') {\n const status =\n known.details.reason === 'rate-limited'\n ? 429\n : known.details.reason === 'timeout' || known.details.reason === 'provider-unavailable'\n ? 503\n : 422;\n throw new ClientError('Integration provider request failed', known.details.reason, {\n details: {retry_after_seconds: known.details.retryAfterSeconds},\n status,\n });\n }\n throw error;\n },\n handler: async (request, reply) => {\n const {stepId} = request.params;\n const {attempt} = request.query;\n const {step, workspaceId, projectId, triggerReference, run} = await loadRunningLeasedStep({\n runners: clients.runners,\n request,\n stepId,\n attempt,\n });\n\n if (step.type !== 'setup' && step.type !== 'checkout') {\n throw new ClientError('Step is not a checkout step', 'step-not-checkout', {status: 409});\n }\n\n const checkout = await createStepCheckoutSpec({\n step,\n workspaceId,\n projectId,\n triggerReference,\n run,\n integrations: clients.integrations,\n projects: clients.projects,\n });\n reply.header('cache-control', 'no-store');\n return toCheckoutTokenDto(checkout.spec, {\n fetchDepth: checkout.fetchDepth,\n persist: checkout.persistCredentials,\n });\n },\n });\n}\n"],"names":["integrationsInterModuleContract","projectsInterModuleContract","checkoutTokenParamsSchema","checkoutTokenQuerySchema","checkoutTokenResponseSchema","isInterModuleKnownError","ClientError","defineRoute","createStepCheckoutSpec","CheckoutConfigInvalidError","CheckoutIntentUnresolvedError","toCheckoutTokenDto","loadRunningLeasedStep","createCheckoutTokenRoute","clients","method","path","description","schema","params","querystring","response","errorHandler","error","known","methods","createCheckoutSpec","undefined","targetError","resolveCheckoutTarget","message","status","code","details","reason","retry_after_seconds","retryAfterSeconds","handler","request","reply","stepId","attempt","query","step","workspaceId","projectId","triggerReference","run","runners","type","checkout","integrations","projects","header","spec","fetchDepth","persist","persistCredentials"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-run-aggregates.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/get-run-aggregates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAUjF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,mDAuDnE"}
1
+ {"version":3,"file":"get-run-aggregates.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/get-run-aggregates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAUjF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,mDAyDnE"}
@@ -16,12 +16,13 @@ export function getRunAggregatesRoute(projects) {
16
16
  },
17
17
  handler: async (request)=>{
18
18
  const startedAt = performance.now();
19
- const { project_id: projectId, status, definition_id: definitionId, trigger_source: triggerSource, created_from: createdFrom, created_to: createdTo } = request.query;
19
+ const { project_id: projectId, status, definition_id: definitionId, trigger_source: triggerSource, origin, created_from: createdFrom, created_to: createdTo } = request.query;
20
20
  const project = await requireProjectAccess(request, projectId, projects);
21
21
  const filters = {
22
22
  status,
23
23
  definitionId,
24
24
  triggerSource,
25
+ origin,
25
26
  createdFrom: createdFrom ? new Date(createdFrom) : undefined,
26
27
  createdTo: createdTo ? new Date(createdTo) : undefined
27
28
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/get-run-aggregates.ts"],"sourcesContent":["import type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport {\n workflowRunAggregatesQuerySchema,\n workflowRunAggregatesResponseSchema,\n} from '@shipfox/api-workflows-dto';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {getWorkflowRunAggregates} from '#db/index.js';\nimport {requireProjectAccess} from './project-access.js';\n\nexport function getRunAggregatesRoute(projects: ProjectsModuleClient) {\n return defineRoute({\n method: 'GET',\n path: '/aggregates',\n description: 'Get faceted workflow run counts for a project',\n schema: {\n querystring: workflowRunAggregatesQuerySchema,\n response: {\n 200: workflowRunAggregatesResponseSchema,\n },\n },\n handler: async (request) => {\n const startedAt = performance.now();\n const {\n project_id: projectId,\n status,\n definition_id: definitionId,\n trigger_source: triggerSource,\n created_from: createdFrom,\n created_to: createdTo,\n } = request.query;\n\n const project = await requireProjectAccess(request, projectId, projects);\n const filters = {\n status,\n definitionId,\n triggerSource,\n createdFrom: createdFrom ? new Date(createdFrom) : undefined,\n createdTo: createdTo ? new Date(createdTo) : undefined,\n };\n const aggregates = await getWorkflowRunAggregates({projectId: project.id, filters});\n\n logger().info(\n {\n projectId: project.id,\n filterKeys: Object.entries(filters)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => key),\n aggregateBucketSizes: {\n status: aggregates.status.length,\n triggerSource: aggregates.triggerSource.length,\n workflow: aggregates.workflow.length,\n },\n durationMs: Math.round(performance.now() - startedAt),\n },\n 'Aggregated workflow runs',\n );\n\n return {\n status: aggregates.status,\n trigger_source: aggregates.triggerSource,\n workflow: aggregates.workflow,\n };\n },\n });\n}\n"],"names":["workflowRunAggregatesQuerySchema","workflowRunAggregatesResponseSchema","defineRoute","logger","getWorkflowRunAggregates","requireProjectAccess","getRunAggregatesRoute","projects","method","path","description","schema","querystring","response","handler","request","startedAt","performance","now","project_id","projectId","status","definition_id","definitionId","trigger_source","triggerSource","created_from","createdFrom","created_to","createdTo","query","project","filters","Date","undefined","aggregates","id","info","filterKeys","Object","entries","filter","value","map","key","aggregateBucketSizes","length","workflow","durationMs","Math","round"],"mappings":"AACA,SACEA,gCAAgC,EAChCC,mCAAmC,QAC9B,6BAA6B;AACpC,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,MAAM,QAAO,8BAA8B;AACnD,SAAQC,wBAAwB,QAAO,eAAe;AACtD,SAAQC,oBAAoB,QAAO,sBAAsB;AAEzD,OAAO,SAASC,sBAAsBC,QAA8B;IAClE,OAAOL,YAAY;QACjBM,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,aAAaZ;YACba,UAAU;gBACR,KAAKZ;YACP;QACF;QACAa,SAAS,OAAOC;YACd,MAAMC,YAAYC,YAAYC,GAAG;YACjC,MAAM,EACJC,YAAYC,SAAS,EACrBC,MAAM,EACNC,eAAeC,YAAY,EAC3BC,gBAAgBC,aAAa,EAC7BC,cAAcC,WAAW,EACzBC,YAAYC,SAAS,EACtB,GAAGd,QAAQe,KAAK;YAEjB,MAAMC,UAAU,MAAM1B,qBAAqBU,SAASK,WAAWb;YAC/D,MAAMyB,UAAU;gBACdX;gBACAE;gBACAE;gBACAE,aAAaA,cAAc,IAAIM,KAAKN,eAAeO;gBACnDL,WAAWA,YAAY,IAAII,KAAKJ,aAAaK;YAC/C;YACA,MAAMC,aAAa,MAAM/B,yBAAyB;gBAACgB,WAAWW,QAAQK,EAAE;gBAAEJ;YAAO;YAEjF7B,SAASkC,IAAI,CACX;gBACEjB,WAAWW,QAAQK,EAAE;gBACrBE,YAAYC,OAAOC,OAAO,CAACR,SACxBS,MAAM,CAAC,CAAC,GAAGC,MAAM,GAAKA,UAAUR,WAChCS,GAAG,CAAC,CAAC,CAACC,IAAI,GAAKA;gBAClBC,sBAAsB;oBACpBxB,QAAQc,WAAWd,MAAM,CAACyB,MAAM;oBAChCrB,eAAeU,WAAWV,aAAa,CAACqB,MAAM;oBAC9CC,UAAUZ,WAAWY,QAAQ,CAACD,MAAM;gBACtC;gBACAE,YAAYC,KAAKC,KAAK,CAACjC,YAAYC,GAAG,KAAKF;YAC7C,GACA;YAGF,OAAO;gBACLK,QAAQc,WAAWd,MAAM;gBACzBG,gBAAgBW,WAAWV,aAAa;gBACxCsB,UAAUZ,WAAWY,QAAQ;YAC/B;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/get-run-aggregates.ts"],"sourcesContent":["import type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport {\n workflowRunAggregatesQuerySchema,\n workflowRunAggregatesResponseSchema,\n} from '@shipfox/api-workflows-dto';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {getWorkflowRunAggregates} from '#db/index.js';\nimport {requireProjectAccess} from './project-access.js';\n\nexport function getRunAggregatesRoute(projects: ProjectsModuleClient) {\n return defineRoute({\n method: 'GET',\n path: '/aggregates',\n description: 'Get faceted workflow run counts for a project',\n schema: {\n querystring: workflowRunAggregatesQuerySchema,\n response: {\n 200: workflowRunAggregatesResponseSchema,\n },\n },\n handler: async (request) => {\n const startedAt = performance.now();\n const {\n project_id: projectId,\n status,\n definition_id: definitionId,\n trigger_source: triggerSource,\n origin,\n created_from: createdFrom,\n created_to: createdTo,\n } = request.query;\n\n const project = await requireProjectAccess(request, projectId, projects);\n const filters = {\n status,\n definitionId,\n triggerSource,\n origin,\n createdFrom: createdFrom ? new Date(createdFrom) : undefined,\n createdTo: createdTo ? new Date(createdTo) : undefined,\n };\n const aggregates = await getWorkflowRunAggregates({projectId: project.id, filters});\n\n logger().info(\n {\n projectId: project.id,\n filterKeys: Object.entries(filters)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => key),\n aggregateBucketSizes: {\n status: aggregates.status.length,\n triggerSource: aggregates.triggerSource.length,\n workflow: aggregates.workflow.length,\n },\n durationMs: Math.round(performance.now() - startedAt),\n },\n 'Aggregated workflow runs',\n );\n\n return {\n status: aggregates.status,\n trigger_source: aggregates.triggerSource,\n workflow: aggregates.workflow,\n };\n },\n });\n}\n"],"names":["workflowRunAggregatesQuerySchema","workflowRunAggregatesResponseSchema","defineRoute","logger","getWorkflowRunAggregates","requireProjectAccess","getRunAggregatesRoute","projects","method","path","description","schema","querystring","response","handler","request","startedAt","performance","now","project_id","projectId","status","definition_id","definitionId","trigger_source","triggerSource","origin","created_from","createdFrom","created_to","createdTo","query","project","filters","Date","undefined","aggregates","id","info","filterKeys","Object","entries","filter","value","map","key","aggregateBucketSizes","length","workflow","durationMs","Math","round"],"mappings":"AACA,SACEA,gCAAgC,EAChCC,mCAAmC,QAC9B,6BAA6B;AACpC,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,MAAM,QAAO,8BAA8B;AACnD,SAAQC,wBAAwB,QAAO,eAAe;AACtD,SAAQC,oBAAoB,QAAO,sBAAsB;AAEzD,OAAO,SAASC,sBAAsBC,QAA8B;IAClE,OAAOL,YAAY;QACjBM,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,aAAaZ;YACba,UAAU;gBACR,KAAKZ;YACP;QACF;QACAa,SAAS,OAAOC;YACd,MAAMC,YAAYC,YAAYC,GAAG;YACjC,MAAM,EACJC,YAAYC,SAAS,EACrBC,MAAM,EACNC,eAAeC,YAAY,EAC3BC,gBAAgBC,aAAa,EAC7BC,MAAM,EACNC,cAAcC,WAAW,EACzBC,YAAYC,SAAS,EACtB,GAAGf,QAAQgB,KAAK;YAEjB,MAAMC,UAAU,MAAM3B,qBAAqBU,SAASK,WAAWb;YAC/D,MAAM0B,UAAU;gBACdZ;gBACAE;gBACAE;gBACAC;gBACAE,aAAaA,cAAc,IAAIM,KAAKN,eAAeO;gBACnDL,WAAWA,YAAY,IAAII,KAAKJ,aAAaK;YAC/C;YACA,MAAMC,aAAa,MAAMhC,yBAAyB;gBAACgB,WAAWY,QAAQK,EAAE;gBAAEJ;YAAO;YAEjF9B,SAASmC,IAAI,CACX;gBACElB,WAAWY,QAAQK,EAAE;gBACrBE,YAAYC,OAAOC,OAAO,CAACR,SACxBS,MAAM,CAAC,CAAC,GAAGC,MAAM,GAAKA,UAAUR,WAChCS,GAAG,CAAC,CAAC,CAACC,IAAI,GAAKA;gBAClBC,sBAAsB;oBACpBzB,QAAQe,WAAWf,MAAM,CAAC0B,MAAM;oBAChCtB,eAAeW,WAAWX,aAAa,CAACsB,MAAM;oBAC9CC,UAAUZ,WAAWY,QAAQ,CAACD,MAAM;gBACtC;gBACAE,YAAYC,KAAKC,KAAK,CAAClC,YAAYC,GAAG,KAAKF;YAC7C,GACA;YAGF,OAAO;gBACLK,QAAQe,WAAWf,MAAM;gBACzBG,gBAAgBY,WAAWX,aAAa;gBACxCuB,UAAUZ,WAAWY,QAAQ;YAC/B;QACF;IACF;AACF"}
@@ -1,13 +1,15 @@
1
1
  import { type LeasedJobContext } from '@shipfox/api-auth-context';
2
2
  import type { RunnersInterModuleClient } from '@shipfox/api-runners-dto/inter-module';
3
3
  import type { Step } from '#core/entities/step.js';
4
- import type { WorkflowRunTriggerReference } from '#core/entities/workflow-run.js';
4
+ import type { WorkflowRunOriginState, WorkflowRunTriggerReference } from '#core/entities/workflow-run.js';
5
5
  export interface LoadedRunningLeasedStep {
6
6
  leasedJob: LeasedJobContext;
7
7
  step: Step;
8
8
  workspaceId: string;
9
9
  projectId: string;
10
10
  triggerReference: WorkflowRunTriggerReference | null;
11
+ /** The run's origin state, forwarded for checkout fallbacks. */
12
+ run: WorkflowRunOriginState;
11
13
  }
12
14
  export declare function loadRunningLeasedStep(params: {
13
15
  runners: RunnersInterModuleClient;
@@ -1 +1 @@
1
- {"version":3,"file":"leased-step.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/leased-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,gBAAgB,EAA0B,MAAM,2BAA2B,CAAC;AACzF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAEpF,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,gCAAgC,CAAC;AAGhF,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,2BAA2B,GAAG,IAAI,CAAC;CACtD;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,OAAO,EAAE,wBAAwB,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA0CnC"}
1
+ {"version":3,"file":"leased-step.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/leased-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,gBAAgB,EAA0B,MAAM,2BAA2B,CAAC;AACzF,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAEpF,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EACV,sBAAsB,EACtB,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AAGxC,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,2BAA2B,GAAG,IAAI,CAAC;IACrD,gEAAgE;IAChE,GAAG,EAAE,sBAAsB,CAAC;CAC7B;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,OAAO,EAAE,wBAAwB,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA2CnC"}
@@ -43,7 +43,8 @@ export async function loadRunningLeasedStep(params) {
43
43
  step,
44
44
  workspaceId: scope.workspaceId,
45
45
  projectId: scope.projectId,
46
- triggerReference: scope.triggerReference
46
+ triggerReference: scope.triggerReference,
47
+ run: scope.run
47
48
  };
48
49
  }
49
50
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/leased-step.ts"],"sourcesContent":["import {type LeasedJobContext, requireLeasedJobContext} from '@shipfox/api-auth-context';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport {ClientError} from '@shipfox/node-fastify';\nimport type {Step} from '#core/entities/step.js';\nimport type {WorkflowRunTriggerReference} from '#core/entities/workflow-run.js';\nimport {getJobScope, getStepByIdForJobExecution} from '#db/index.js';\n\nexport interface LoadedRunningLeasedStep {\n leasedJob: LeasedJobContext;\n step: Step;\n workspaceId: string;\n projectId: string;\n triggerReference: WorkflowRunTriggerReference | null;\n}\n\nexport async function loadRunningLeasedStep(params: {\n runners: RunnersInterModuleClient;\n request: object;\n stepId: string;\n attempt: number;\n}): Promise<LoadedRunningLeasedStep> {\n const leasedJob = requireLeasedJobContext(params.request);\n\n const {active: leaseIsActive} = await params.runners.getLeaseState({\n jobId: leasedJob.jobId,\n jobExecutionId: leasedJob.jobExecutionId,\n runnerSessionId: leasedJob.runnerSessionId,\n });\n if (!leaseIsActive) {\n throw new ClientError('Job lease is no longer active', 'lease-not-active', {status: 404});\n }\n\n const step = await getStepByIdForJobExecution({\n stepId: params.stepId,\n jobExecutionId: leasedJob.jobExecutionId,\n });\n if (!step) {\n throw new ClientError('Step not found for leased job', 'step-not-found', {status: 404});\n }\n\n const scope = await getJobScope(leasedJob.jobId);\n if (!scope) {\n throw new ClientError('Leased job not found', 'job-not-found', {status: 404});\n }\n\n if (step.currentAttempt !== params.attempt) {\n throw new ClientError('Step attempt does not match current attempt', 'step-attempt-mismatch', {\n status: 409,\n });\n }\n\n if (step.status !== 'running') {\n throw new ClientError('Step is not running', 'step-not-running', {status: 409});\n }\n\n return {\n leasedJob,\n step,\n workspaceId: scope.workspaceId,\n projectId: scope.projectId,\n triggerReference: scope.triggerReference,\n };\n}\n"],"names":["requireLeasedJobContext","ClientError","getJobScope","getStepByIdForJobExecution","loadRunningLeasedStep","params","leasedJob","request","active","leaseIsActive","runners","getLeaseState","jobId","jobExecutionId","runnerSessionId","status","step","stepId","scope","currentAttempt","attempt","workspaceId","projectId","triggerReference"],"mappings":"AAAA,SAA+BA,uBAAuB,QAAO,4BAA4B;AAEzF,SAAQC,WAAW,QAAO,wBAAwB;AAGlD,SAAQC,WAAW,EAAEC,0BAA0B,QAAO,eAAe;AAUrE,OAAO,eAAeC,sBAAsBC,MAK3C;IACC,MAAMC,YAAYN,wBAAwBK,OAAOE,OAAO;IAExD,MAAM,EAACC,QAAQC,aAAa,EAAC,GAAG,MAAMJ,OAAOK,OAAO,CAACC,aAAa,CAAC;QACjEC,OAAON,UAAUM,KAAK;QACtBC,gBAAgBP,UAAUO,cAAc;QACxCC,iBAAiBR,UAAUQ,eAAe;IAC5C;IACA,IAAI,CAACL,eAAe;QAClB,MAAM,IAAIR,YAAY,iCAAiC,oBAAoB;YAACc,QAAQ;QAAG;IACzF;IAEA,MAAMC,OAAO,MAAMb,2BAA2B;QAC5Cc,QAAQZ,OAAOY,MAAM;QACrBJ,gBAAgBP,UAAUO,cAAc;IAC1C;IACA,IAAI,CAACG,MAAM;QACT,MAAM,IAAIf,YAAY,iCAAiC,kBAAkB;YAACc,QAAQ;QAAG;IACvF;IAEA,MAAMG,QAAQ,MAAMhB,YAAYI,UAAUM,KAAK;IAC/C,IAAI,CAACM,OAAO;QACV,MAAM,IAAIjB,YAAY,wBAAwB,iBAAiB;YAACc,QAAQ;QAAG;IAC7E;IAEA,IAAIC,KAAKG,cAAc,KAAKd,OAAOe,OAAO,EAAE;QAC1C,MAAM,IAAInB,YAAY,+CAA+C,yBAAyB;YAC5Fc,QAAQ;QACV;IACF;IAEA,IAAIC,KAAKD,MAAM,KAAK,WAAW;QAC7B,MAAM,IAAId,YAAY,uBAAuB,oBAAoB;YAACc,QAAQ;QAAG;IAC/E;IAEA,OAAO;QACLT;QACAU;QACAK,aAAaH,MAAMG,WAAW;QAC9BC,WAAWJ,MAAMI,SAAS;QAC1BC,kBAAkBL,MAAMK,gBAAgB;IAC1C;AACF"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/leased-step.ts"],"sourcesContent":["import {type LeasedJobContext, requireLeasedJobContext} from '@shipfox/api-auth-context';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport {ClientError} from '@shipfox/node-fastify';\nimport type {Step} from '#core/entities/step.js';\nimport type {\n WorkflowRunOriginState,\n WorkflowRunTriggerReference,\n} from '#core/entities/workflow-run.js';\nimport {getJobScope, getStepByIdForJobExecution} from '#db/index.js';\n\nexport interface LoadedRunningLeasedStep {\n leasedJob: LeasedJobContext;\n step: Step;\n workspaceId: string;\n projectId: string;\n triggerReference: WorkflowRunTriggerReference | null;\n /** The run's origin state, forwarded for checkout fallbacks. */\n run: WorkflowRunOriginState;\n}\n\nexport async function loadRunningLeasedStep(params: {\n runners: RunnersInterModuleClient;\n request: object;\n stepId: string;\n attempt: number;\n}): Promise<LoadedRunningLeasedStep> {\n const leasedJob = requireLeasedJobContext(params.request);\n\n const {active: leaseIsActive} = await params.runners.getLeaseState({\n jobId: leasedJob.jobId,\n jobExecutionId: leasedJob.jobExecutionId,\n runnerSessionId: leasedJob.runnerSessionId,\n });\n if (!leaseIsActive) {\n throw new ClientError('Job lease is no longer active', 'lease-not-active', {status: 404});\n }\n\n const step = await getStepByIdForJobExecution({\n stepId: params.stepId,\n jobExecutionId: leasedJob.jobExecutionId,\n });\n if (!step) {\n throw new ClientError('Step not found for leased job', 'step-not-found', {status: 404});\n }\n\n const scope = await getJobScope(leasedJob.jobId);\n if (!scope) {\n throw new ClientError('Leased job not found', 'job-not-found', {status: 404});\n }\n\n if (step.currentAttempt !== params.attempt) {\n throw new ClientError('Step attempt does not match current attempt', 'step-attempt-mismatch', {\n status: 409,\n });\n }\n\n if (step.status !== 'running') {\n throw new ClientError('Step is not running', 'step-not-running', {status: 409});\n }\n\n return {\n leasedJob,\n step,\n workspaceId: scope.workspaceId,\n projectId: scope.projectId,\n triggerReference: scope.triggerReference,\n run: scope.run,\n };\n}\n"],"names":["requireLeasedJobContext","ClientError","getJobScope","getStepByIdForJobExecution","loadRunningLeasedStep","params","leasedJob","request","active","leaseIsActive","runners","getLeaseState","jobId","jobExecutionId","runnerSessionId","status","step","stepId","scope","currentAttempt","attempt","workspaceId","projectId","triggerReference","run"],"mappings":"AAAA,SAA+BA,uBAAuB,QAAO,4BAA4B;AAEzF,SAAQC,WAAW,QAAO,wBAAwB;AAMlD,SAAQC,WAAW,EAAEC,0BAA0B,QAAO,eAAe;AAYrE,OAAO,eAAeC,sBAAsBC,MAK3C;IACC,MAAMC,YAAYN,wBAAwBK,OAAOE,OAAO;IAExD,MAAM,EAACC,QAAQC,aAAa,EAAC,GAAG,MAAMJ,OAAOK,OAAO,CAACC,aAAa,CAAC;QACjEC,OAAON,UAAUM,KAAK;QACtBC,gBAAgBP,UAAUO,cAAc;QACxCC,iBAAiBR,UAAUQ,eAAe;IAC5C;IACA,IAAI,CAACL,eAAe;QAClB,MAAM,IAAIR,YAAY,iCAAiC,oBAAoB;YAACc,QAAQ;QAAG;IACzF;IAEA,MAAMC,OAAO,MAAMb,2BAA2B;QAC5Cc,QAAQZ,OAAOY,MAAM;QACrBJ,gBAAgBP,UAAUO,cAAc;IAC1C;IACA,IAAI,CAACG,MAAM;QACT,MAAM,IAAIf,YAAY,iCAAiC,kBAAkB;YAACc,QAAQ;QAAG;IACvF;IAEA,MAAMG,QAAQ,MAAMhB,YAAYI,UAAUM,KAAK;IAC/C,IAAI,CAACM,OAAO;QACV,MAAM,IAAIjB,YAAY,wBAAwB,iBAAiB;YAACc,QAAQ;QAAG;IAC7E;IAEA,IAAIC,KAAKG,cAAc,KAAKd,OAAOe,OAAO,EAAE;QAC1C,MAAM,IAAInB,YAAY,+CAA+C,yBAAyB;YAC5Fc,QAAQ;QACV;IACF;IAEA,IAAIC,KAAKD,MAAM,KAAK,WAAW;QAC7B,MAAM,IAAId,YAAY,uBAAuB,oBAAoB;YAACc,QAAQ;QAAG;IAC/E;IAEA,OAAO;QACLT;QACAU;QACAK,aAAaH,MAAMG,WAAW;QAC9BC,WAAWJ,MAAMI,SAAS;QAC1BC,kBAAkBL,MAAMK,gBAAgB;QACxCC,KAAKN,MAAMM,GAAG;IAChB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-runs.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/list-runs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAYjF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,oBAAoB,mDAwE3D"}
1
+ {"version":3,"file":"list-runs.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/list-runs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAYjF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,oBAAoB,mDA0E3D"}
@@ -18,7 +18,7 @@ export function listRunsRoute(projects) {
18
18
  },
19
19
  handler: async (request)=>{
20
20
  const startedAt = performance.now();
21
- const { project_id: projectId, limit, cursor, status, definition_id: definitionId, trigger_source: triggerSource, created_from: createdFrom, created_to: createdTo } = request.query;
21
+ const { project_id: projectId, limit, cursor, status, definition_id: definitionId, trigger_source: triggerSource, origin, created_from: createdFrom, created_to: createdTo } = request.query;
22
22
  const decodedCursor = decodeTimestampIdCursor(cursor);
23
23
  if (cursor && !decodedCursor) {
24
24
  throw new ClientError('Invalid cursor', 'invalid-cursor', {
@@ -30,6 +30,7 @@ export function listRunsRoute(projects) {
30
30
  status,
31
31
  definitionId,
32
32
  triggerSource,
33
+ origin,
33
34
  createdFrom: createdFrom ? new Date(createdFrom) : undefined,
34
35
  createdTo: createdTo ? new Date(createdTo) : undefined
35
36
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/list-runs.ts"],"sourcesContent":["import type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport {\n workflowRunListQuerySchema,\n workflowRunListResponseSchema,\n} from '@shipfox/api-workflows-dto';\nimport {decodeTimestampIdCursor, encodeTimestampIdCursor} from '@shipfox/node-drizzle';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {listWorkflowRunJobSummaries, listWorkflowRuns} from '#db/index.js';\nimport {toRunListItemDto} from '#presentation/dto/index.js';\nimport {requireProjectAccess} from './project-access.js';\n\nexport function listRunsRoute(projects: ProjectsModuleClient) {\n return defineRoute({\n method: 'GET',\n path: '/',\n description: 'List workflow runs for a project',\n schema: {\n querystring: workflowRunListQuerySchema,\n response: {\n 200: workflowRunListResponseSchema,\n },\n },\n handler: async (request) => {\n const startedAt = performance.now();\n const {\n project_id: projectId,\n limit,\n cursor,\n status,\n definition_id: definitionId,\n trigger_source: triggerSource,\n created_from: createdFrom,\n created_to: createdTo,\n } = request.query;\n const decodedCursor = decodeTimestampIdCursor(cursor);\n if (cursor && !decodedCursor) {\n throw new ClientError('Invalid cursor', 'invalid-cursor', {status: 400});\n }\n\n const project = await requireProjectAccess(request, projectId, projects);\n\n const filters = {\n status,\n definitionId,\n triggerSource,\n createdFrom: createdFrom ? new Date(createdFrom) : undefined,\n createdTo: createdTo ? new Date(createdTo) : undefined,\n };\n const result = await listWorkflowRuns({\n projectId: project.id,\n limit,\n cursor: decodedCursor,\n filters,\n includeTotal: !decodedCursor,\n });\n // Paired with the attempt this read returned, so a re-run landing mid-request cannot\n // pair one attempt's metadata with another's jobs.\n const jobsByRun = await listWorkflowRunJobSummaries(\n result.runs.map((run) => ({id: run.id, currentAttempt: run.currentAttempt})),\n );\n\n logger().info(\n {\n projectId: project.id,\n filterKeys: Object.entries(filters)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => key),\n limit,\n cursorPresent: Boolean(cursor),\n resultCount: result.runs.length,\n nextCursorPresent: Boolean(result.nextCursor),\n durationMs: Math.round(performance.now() - startedAt),\n },\n 'Listed workflow runs',\n );\n\n return {\n runs: result.runs.map((run) => toRunListItemDto(run, jobsByRun.get(run.id))),\n next_cursor: result.nextCursor ? encodeTimestampIdCursor(result.nextCursor) : null,\n filtered_total_count: result.filteredTotalCount,\n };\n },\n });\n}\n"],"names":["workflowRunListQuerySchema","workflowRunListResponseSchema","decodeTimestampIdCursor","encodeTimestampIdCursor","ClientError","defineRoute","logger","listWorkflowRunJobSummaries","listWorkflowRuns","toRunListItemDto","requireProjectAccess","listRunsRoute","projects","method","path","description","schema","querystring","response","handler","request","startedAt","performance","now","project_id","projectId","limit","cursor","status","definition_id","definitionId","trigger_source","triggerSource","created_from","createdFrom","created_to","createdTo","query","decodedCursor","project","filters","Date","undefined","result","id","includeTotal","jobsByRun","runs","map","run","currentAttempt","info","filterKeys","Object","entries","filter","value","key","cursorPresent","Boolean","resultCount","length","nextCursorPresent","nextCursor","durationMs","Math","round","get","next_cursor","filtered_total_count","filteredTotalCount"],"mappings":"AACA,SACEA,0BAA0B,EAC1BC,6BAA6B,QACxB,6BAA6B;AACpC,SAAQC,uBAAuB,EAAEC,uBAAuB,QAAO,wBAAwB;AACvF,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,MAAM,QAAO,8BAA8B;AACnD,SAAQC,2BAA2B,EAAEC,gBAAgB,QAAO,eAAe;AAC3E,SAAQC,gBAAgB,QAAO,6BAA6B;AAC5D,SAAQC,oBAAoB,QAAO,sBAAsB;AAEzD,OAAO,SAASC,cAAcC,QAA8B;IAC1D,OAAOP,YAAY;QACjBQ,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,aAAajB;YACbkB,UAAU;gBACR,KAAKjB;YACP;QACF;QACAkB,SAAS,OAAOC;YACd,MAAMC,YAAYC,YAAYC,GAAG;YACjC,MAAM,EACJC,YAAYC,SAAS,EACrBC,KAAK,EACLC,MAAM,EACNC,MAAM,EACNC,eAAeC,YAAY,EAC3BC,gBAAgBC,aAAa,EAC7BC,cAAcC,WAAW,EACzBC,YAAYC,SAAS,EACtB,GAAGhB,QAAQiB,KAAK;YACjB,MAAMC,gBAAgBpC,wBAAwByB;YAC9C,IAAIA,UAAU,CAACW,eAAe;gBAC5B,MAAM,IAAIlC,YAAY,kBAAkB,kBAAkB;oBAACwB,QAAQ;gBAAG;YACxE;YAEA,MAAMW,UAAU,MAAM7B,qBAAqBU,SAASK,WAAWb;YAE/D,MAAM4B,UAAU;gBACdZ;gBACAE;gBACAE;gBACAE,aAAaA,cAAc,IAAIO,KAAKP,eAAeQ;gBACnDN,WAAWA,YAAY,IAAIK,KAAKL,aAAaM;YAC/C;YACA,MAAMC,SAAS,MAAMnC,iBAAiB;gBACpCiB,WAAWc,QAAQK,EAAE;gBACrBlB;gBACAC,QAAQW;gBACRE;gBACAK,cAAc,CAACP;YACjB;YACA,qFAAqF;YACrF,mDAAmD;YACnD,MAAMQ,YAAY,MAAMvC,4BACtBoC,OAAOI,IAAI,CAACC,GAAG,CAAC,CAACC,MAAS,CAAA;oBAACL,IAAIK,IAAIL,EAAE;oBAAEM,gBAAgBD,IAAIC,cAAc;gBAAA,CAAA;YAG3E5C,SAAS6C,IAAI,CACX;gBACE1B,WAAWc,QAAQK,EAAE;gBACrBQ,YAAYC,OAAOC,OAAO,CAACd,SACxBe,MAAM,CAAC,CAAC,GAAGC,MAAM,GAAKA,UAAUd,WAChCM,GAAG,CAAC,CAAC,CAACS,IAAI,GAAKA;gBAClB/B;gBACAgC,eAAeC,QAAQhC;gBACvBiC,aAAajB,OAAOI,IAAI,CAACc,MAAM;gBAC/BC,mBAAmBH,QAAQhB,OAAOoB,UAAU;gBAC5CC,YAAYC,KAAKC,KAAK,CAAC5C,YAAYC,GAAG,KAAKF;YAC7C,GACA;YAGF,OAAO;gBACL0B,MAAMJ,OAAOI,IAAI,CAACC,GAAG,CAAC,CAACC,MAAQxC,iBAAiBwC,KAAKH,UAAUqB,GAAG,CAAClB,IAAIL,EAAE;gBACzEwB,aAAazB,OAAOoB,UAAU,GAAG5D,wBAAwBwC,OAAOoB,UAAU,IAAI;gBAC9EM,sBAAsB1B,OAAO2B,kBAAkB;YACjD;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/list-runs.ts"],"sourcesContent":["import type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';\nimport {\n workflowRunListQuerySchema,\n workflowRunListResponseSchema,\n} from '@shipfox/api-workflows-dto';\nimport {decodeTimestampIdCursor, encodeTimestampIdCursor} from '@shipfox/node-drizzle';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {listWorkflowRunJobSummaries, listWorkflowRuns} from '#db/index.js';\nimport {toRunListItemDto} from '#presentation/dto/index.js';\nimport {requireProjectAccess} from './project-access.js';\n\nexport function listRunsRoute(projects: ProjectsModuleClient) {\n return defineRoute({\n method: 'GET',\n path: '/',\n description: 'List workflow runs for a project',\n schema: {\n querystring: workflowRunListQuerySchema,\n response: {\n 200: workflowRunListResponseSchema,\n },\n },\n handler: async (request) => {\n const startedAt = performance.now();\n const {\n project_id: projectId,\n limit,\n cursor,\n status,\n definition_id: definitionId,\n trigger_source: triggerSource,\n origin,\n created_from: createdFrom,\n created_to: createdTo,\n } = request.query;\n const decodedCursor = decodeTimestampIdCursor(cursor);\n if (cursor && !decodedCursor) {\n throw new ClientError('Invalid cursor', 'invalid-cursor', {status: 400});\n }\n\n const project = await requireProjectAccess(request, projectId, projects);\n\n const filters = {\n status,\n definitionId,\n triggerSource,\n origin,\n createdFrom: createdFrom ? new Date(createdFrom) : undefined,\n createdTo: createdTo ? new Date(createdTo) : undefined,\n };\n const result = await listWorkflowRuns({\n projectId: project.id,\n limit,\n cursor: decodedCursor,\n filters,\n includeTotal: !decodedCursor,\n });\n // Paired with the attempt this read returned, so a re-run landing mid-request cannot\n // pair one attempt's metadata with another's jobs.\n const jobsByRun = await listWorkflowRunJobSummaries(\n result.runs.map((run) => ({id: run.id, currentAttempt: run.currentAttempt})),\n );\n\n logger().info(\n {\n projectId: project.id,\n filterKeys: Object.entries(filters)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => key),\n limit,\n cursorPresent: Boolean(cursor),\n resultCount: result.runs.length,\n nextCursorPresent: Boolean(result.nextCursor),\n durationMs: Math.round(performance.now() - startedAt),\n },\n 'Listed workflow runs',\n );\n\n return {\n runs: result.runs.map((run) => toRunListItemDto(run, jobsByRun.get(run.id))),\n next_cursor: result.nextCursor ? encodeTimestampIdCursor(result.nextCursor) : null,\n filtered_total_count: result.filteredTotalCount,\n };\n },\n });\n}\n"],"names":["workflowRunListQuerySchema","workflowRunListResponseSchema","decodeTimestampIdCursor","encodeTimestampIdCursor","ClientError","defineRoute","logger","listWorkflowRunJobSummaries","listWorkflowRuns","toRunListItemDto","requireProjectAccess","listRunsRoute","projects","method","path","description","schema","querystring","response","handler","request","startedAt","performance","now","project_id","projectId","limit","cursor","status","definition_id","definitionId","trigger_source","triggerSource","origin","created_from","createdFrom","created_to","createdTo","query","decodedCursor","project","filters","Date","undefined","result","id","includeTotal","jobsByRun","runs","map","run","currentAttempt","info","filterKeys","Object","entries","filter","value","key","cursorPresent","Boolean","resultCount","length","nextCursorPresent","nextCursor","durationMs","Math","round","get","next_cursor","filtered_total_count","filteredTotalCount"],"mappings":"AACA,SACEA,0BAA0B,EAC1BC,6BAA6B,QACxB,6BAA6B;AACpC,SAAQC,uBAAuB,EAAEC,uBAAuB,QAAO,wBAAwB;AACvF,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,MAAM,QAAO,8BAA8B;AACnD,SAAQC,2BAA2B,EAAEC,gBAAgB,QAAO,eAAe;AAC3E,SAAQC,gBAAgB,QAAO,6BAA6B;AAC5D,SAAQC,oBAAoB,QAAO,sBAAsB;AAEzD,OAAO,SAASC,cAAcC,QAA8B;IAC1D,OAAOP,YAAY;QACjBQ,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,aAAajB;YACbkB,UAAU;gBACR,KAAKjB;YACP;QACF;QACAkB,SAAS,OAAOC;YACd,MAAMC,YAAYC,YAAYC,GAAG;YACjC,MAAM,EACJC,YAAYC,SAAS,EACrBC,KAAK,EACLC,MAAM,EACNC,MAAM,EACNC,eAAeC,YAAY,EAC3BC,gBAAgBC,aAAa,EAC7BC,MAAM,EACNC,cAAcC,WAAW,EACzBC,YAAYC,SAAS,EACtB,GAAGjB,QAAQkB,KAAK;YACjB,MAAMC,gBAAgBrC,wBAAwByB;YAC9C,IAAIA,UAAU,CAACY,eAAe;gBAC5B,MAAM,IAAInC,YAAY,kBAAkB,kBAAkB;oBAACwB,QAAQ;gBAAG;YACxE;YAEA,MAAMY,UAAU,MAAM9B,qBAAqBU,SAASK,WAAWb;YAE/D,MAAM6B,UAAU;gBACdb;gBACAE;gBACAE;gBACAC;gBACAE,aAAaA,cAAc,IAAIO,KAAKP,eAAeQ;gBACnDN,WAAWA,YAAY,IAAIK,KAAKL,aAAaM;YAC/C;YACA,MAAMC,SAAS,MAAMpC,iBAAiB;gBACpCiB,WAAWe,QAAQK,EAAE;gBACrBnB;gBACAC,QAAQY;gBACRE;gBACAK,cAAc,CAACP;YACjB;YACA,qFAAqF;YACrF,mDAAmD;YACnD,MAAMQ,YAAY,MAAMxC,4BACtBqC,OAAOI,IAAI,CAACC,GAAG,CAAC,CAACC,MAAS,CAAA;oBAACL,IAAIK,IAAIL,EAAE;oBAAEM,gBAAgBD,IAAIC,cAAc;gBAAA,CAAA;YAG3E7C,SAAS8C,IAAI,CACX;gBACE3B,WAAWe,QAAQK,EAAE;gBACrBQ,YAAYC,OAAOC,OAAO,CAACd,SACxBe,MAAM,CAAC,CAAC,GAAGC,MAAM,GAAKA,UAAUd,WAChCM,GAAG,CAAC,CAAC,CAACS,IAAI,GAAKA;gBAClBhC;gBACAiC,eAAeC,QAAQjC;gBACvBkC,aAAajB,OAAOI,IAAI,CAACc,MAAM;gBAC/BC,mBAAmBH,QAAQhB,OAAOoB,UAAU;gBAC5CC,YAAYC,KAAKC,KAAK,CAAC7C,YAAYC,GAAG,KAAKF;YAC7C,GACA;YAGF,OAAO;gBACL2B,MAAMJ,OAAOI,IAAI,CAACC,GAAG,CAAC,CAACC,MAAQzC,iBAAiByC,KAAKH,UAAUqB,GAAG,CAAClB,IAAIL,EAAE;gBACzEwB,aAAazB,OAAOoB,UAAU,GAAG7D,wBAAwByC,OAAOoB,UAAU,IAAI;gBAC9EM,sBAAsB1B,OAAO2B,kBAAkB;YACjD;QACF;IACF;AACF"}
@@ -6,6 +6,7 @@ export declare function requireProjectAccess(request: FastifyRequest, projectId:
6
6
  sourceConnectionId: string;
7
7
  sourceExternalRepositoryId: string;
8
8
  sourceRepositoryOwner?: string | null | undefined;
9
+ sourceDefaultBranch?: string | null | undefined;
9
10
  name: string;
10
11
  }>;
11
12
  //# sourceMappingURL=project-access.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-access.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/project-access.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAEjF,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAE5C,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,oBAAoB;;;;;;;GAO/B"}
1
+ {"version":3,"file":"project-access.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/project-access.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAEjF,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAE5C,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,oBAAoB;;;;;;;;GAO/B"}