@shipfox/api-workflows 11.0.0 → 12.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.
- package/.turbo/turbo-build.log +8 -8
- package/CHANGELOG.md +100 -0
- package/README.md +75 -0
- package/dist/core/agent-defaults.d.ts +2 -1
- package/dist/core/agent-defaults.d.ts.map +1 -1
- package/dist/core/agent-defaults.js.map +1 -1
- package/dist/core/checkout.d.ts +7 -21
- package/dist/core/checkout.d.ts.map +1 -1
- package/dist/core/checkout.js +122 -41
- package/dist/core/checkout.js.map +1 -1
- package/dist/core/entities/job-execution.d.ts +8 -0
- package/dist/core/entities/job-execution.d.ts.map +1 -1
- package/dist/core/entities/job-execution.js +13 -1
- package/dist/core/entities/job-execution.js.map +1 -1
- package/dist/core/entities/job-listener-event.d.ts +2 -0
- package/dist/core/entities/job-listener-event.d.ts.map +1 -1
- package/dist/core/entities/job-listener-event.js.map +1 -1
- package/dist/core/entities/step.d.ts +13 -3
- package/dist/core/entities/step.d.ts.map +1 -1
- package/dist/core/entities/step.js +6 -0
- package/dist/core/entities/step.js.map +1 -1
- package/dist/core/entities/workflow-run-attempt.d.ts +1 -0
- package/dist/core/entities/workflow-run-attempt.d.ts.map +1 -1
- package/dist/core/entities/workflow-run-attempt.js.map +1 -1
- package/dist/core/entities/workflow-run.d.ts +17 -0
- package/dist/core/entities/workflow-run.d.ts.map +1 -1
- package/dist/core/entities/workflow-run.js.map +1 -1
- package/dist/core/errors.d.ts +9 -2
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +10 -5
- package/dist/core/errors.js.map +1 -1
- package/dist/core/job-execution.d.ts.map +1 -1
- package/dist/core/job-execution.js +14 -8
- package/dist/core/job-execution.js.map +1 -1
- package/dist/core/job-transition/decide-job-activation.d.ts +1 -0
- package/dist/core/job-transition/decide-job-activation.d.ts.map +1 -1
- package/dist/core/job-transition/decide-job-activation.js +1 -0
- package/dist/core/job-transition/decide-job-activation.js.map +1 -1
- package/dist/core/job-transition/derive-job-success.d.ts +1 -0
- package/dist/core/job-transition/derive-job-success.d.ts.map +1 -1
- package/dist/core/job-transition/derive-job-success.js +5 -8
- package/dist/core/job-transition/derive-job-success.js.map +1 -1
- package/dist/core/listener-execution-materialization.d.ts +6 -3
- package/dist/core/listener-execution-materialization.d.ts.map +1 -1
- package/dist/core/listener-execution-materialization.js +44 -6
- package/dist/core/listener-execution-materialization.js.map +1 -1
- package/dist/core/resolve-trigger-reference.d.ts +11 -0
- package/dist/core/resolve-trigger-reference.d.ts.map +1 -0
- package/dist/core/resolve-trigger-reference.js +39 -0
- package/dist/core/resolve-trigger-reference.js.map +1 -0
- package/dist/core/run-workflow.d.ts +1 -0
- package/dist/core/run-workflow.d.ts.map +1 -1
- package/dist/core/run-workflow.js +1 -0
- package/dist/core/run-workflow.js.map +1 -1
- package/dist/core/step-config/agent.d.ts +1 -2
- package/dist/core/step-config/agent.d.ts.map +1 -1
- package/dist/core/step-config/agent.js +22 -7
- package/dist/core/step-config/agent.js.map +1 -1
- package/dist/core/step-config/assemble-run-context.d.ts +19 -8
- package/dist/core/step-config/assemble-run-context.d.ts.map +1 -1
- package/dist/core/step-config/assemble-run-context.js +51 -19
- package/dist/core/step-config/assemble-run-context.js.map +1 -1
- package/dist/core/step-config/complete-step-dispatch-config.d.ts.map +1 -1
- package/dist/core/step-config/complete-step-dispatch-config.js +72 -4
- package/dist/core/step-config/complete-step-dispatch-config.js.map +1 -1
- package/dist/core/step-config/index.d.ts +1 -0
- package/dist/core/step-config/index.d.ts.map +1 -1
- package/dist/core/step-config/index.js +1 -0
- package/dist/core/step-config/index.js.map +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.d.ts +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.d.ts.map +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.js +49 -8
- package/dist/core/step-config/materialize-job-execution-steps.js.map +1 -1
- package/dist/core/step-config/materialize-workflow-model.d.ts +3 -3
- package/dist/core/step-config/materialize-workflow-model.d.ts.map +1 -1
- package/dist/core/step-config/materialize-workflow-model.js +9 -5
- package/dist/core/step-config/materialize-workflow-model.js.map +1 -1
- package/dist/core/step-config/resolve-job-execution-name.d.ts +3 -3
- package/dist/core/step-config/resolve-job-execution-name.d.ts.map +1 -1
- package/dist/core/step-config/resolve-job-execution-name.js +24 -13
- package/dist/core/step-config/resolve-job-execution-name.js.map +1 -1
- package/dist/core/step-config/resolve-step-config.d.ts.map +1 -1
- package/dist/core/step-config/resolve-step-config.js +174 -9
- package/dist/core/step-config/resolve-step-config.js.map +1 -1
- package/dist/core/step-config/resolve-workflow-run-name.d.ts +19 -0
- package/dist/core/step-config/resolve-workflow-run-name.d.ts.map +1 -0
- package/dist/core/step-config/resolve-workflow-run-name.js +73 -0
- package/dist/core/step-config/resolve-workflow-run-name.js.map +1 -0
- package/dist/core/step-transition/decide-step-transition.js.map +1 -1
- package/dist/core/step-transition/evaluate-gate.d.ts +2 -1
- package/dist/core/step-transition/evaluate-gate.d.ts.map +1 -1
- package/dist/core/step-transition/evaluate-gate.js +5 -3
- package/dist/core/step-transition/evaluate-gate.js.map +1 -1
- package/dist/core/workflow-run-creation.d.ts +3 -0
- package/dist/core/workflow-run-creation.d.ts.map +1 -1
- package/dist/core/workflow-run-creation.js +22 -7
- package/dist/core/workflow-run-creation.js.map +1 -1
- package/dist/db/db.d.ts +278 -10
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +2 -0
- package/dist/db/db.js.map +1 -1
- package/dist/db/index.d.ts +3 -2
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +2 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/job-listener-events.d.ts +2 -0
- package/dist/db/job-listener-events.d.ts.map +1 -1
- package/dist/db/job-listener-events.js +1 -0
- package/dist/db/job-listener-events.js.map +1 -1
- package/dist/db/job-listeners.d.ts +2 -0
- package/dist/db/job-listeners.d.ts.map +1 -1
- package/dist/db/job-listeners.js +81 -21
- package/dist/db/job-listeners.js.map +1 -1
- package/dist/db/schema/job-executions.d.ts +3 -3
- package/dist/db/schema/job-executions.d.ts.map +1 -1
- package/dist/db/schema/job-executions.js +8 -4
- package/dist/db/schema/job-executions.js.map +1 -1
- package/dist/db/schema/job-listener-events.d.ts +20 -0
- package/dist/db/schema/job-listener-events.d.ts.map +1 -1
- package/dist/db/schema/job-listener-events.js +2 -0
- package/dist/db/schema/job-listener-events.js.map +1 -1
- package/dist/db/schema/step-attempts.js +2 -2
- package/dist/db/schema/step-attempts.js.map +1 -1
- package/dist/db/schema/steps.d.ts +4 -2
- package/dist/db/schema/steps.d.ts.map +1 -1
- package/dist/db/schema/steps.js +1 -1
- package/dist/db/schema/steps.js.map +1 -1
- package/dist/db/schema/workflow-run-attempts.d.ts +21 -2
- package/dist/db/schema/workflow-run-attempts.d.ts.map +1 -1
- package/dist/db/schema/workflow-run-attempts.js +2 -0
- package/dist/db/schema/workflow-run-attempts.js.map +1 -1
- package/dist/db/schema/workflow-run-counters.d.ts +43 -0
- package/dist/db/schema/workflow-run-counters.d.ts.map +1 -0
- package/dist/db/schema/workflow-run-counters.js +10 -0
- package/dist/db/schema/workflow-run-counters.js.map +1 -0
- package/dist/db/schema/workflow-runs.d.ts +54 -1
- package/dist/db/schema/workflow-runs.d.ts.map +1 -1
- package/dist/db/schema/workflow-runs.js +10 -2
- package/dist/db/schema/workflow-runs.js.map +1 -1
- package/dist/db/workflow-runs/job-executions.d.ts.map +1 -1
- package/dist/db/workflow-runs/job-executions.js +35 -14
- package/dist/db/workflow-runs/job-executions.js.map +1 -1
- package/dist/db/workflow-runs/jobs.d.ts +2 -0
- package/dist/db/workflow-runs/jobs.d.ts.map +1 -1
- package/dist/db/workflow-runs/jobs.js +9 -5
- package/dist/db/workflow-runs/jobs.js.map +1 -1
- package/dist/db/workflow-runs/queries.d.ts +51 -0
- package/dist/db/workflow-runs/queries.d.ts.map +1 -1
- package/dist/db/workflow-runs/queries.js +82 -2
- package/dist/db/workflow-runs/queries.js.map +1 -1
- package/dist/db/workflow-runs/run-create.d.ts +1 -0
- package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
- package/dist/db/workflow-runs/run-create.js +159 -32
- package/dist/db/workflow-runs/run-create.js.map +1 -1
- package/dist/db/workflow-runs/run-rerun.d.ts.map +1 -1
- package/dist/db/workflow-runs/run-rerun.js +13 -5
- package/dist/db/workflow-runs/run-rerun.js.map +1 -1
- package/dist/db/workflow-runs/shared.d.ts +1 -0
- package/dist/db/workflow-runs/shared.d.ts.map +1 -1
- package/dist/db/workflow-runs/shared.js +2 -1
- package/dist/db/workflow-runs/shared.js.map +1 -1
- package/dist/db/workflow-runs/steps.js +3 -3
- package/dist/db/workflow-runs/steps.js.map +1 -1
- package/dist/db/workflow-runs.d.ts +4 -3
- package/dist/db/workflow-runs.d.ts.map +1 -1
- package/dist/db/workflow-runs.js +3 -2
- package/dist/db/workflow-runs.js.map +1 -1
- package/dist/metrics/instance.d.ts +1 -0
- package/dist/metrics/instance.d.ts.map +1 -1
- package/dist/metrics/instance.js +9 -0
- package/dist/metrics/instance.js.map +1 -1
- package/dist/presentation/dto/checkout-token.d.ts +1 -0
- package/dist/presentation/dto/checkout-token.d.ts.map +1 -1
- package/dist/presentation/dto/checkout-token.js +1 -0
- package/dist/presentation/dto/checkout-token.js.map +1 -1
- package/dist/presentation/dto/index.d.ts +1 -1
- package/dist/presentation/dto/index.d.ts.map +1 -1
- package/dist/presentation/dto/index.js +1 -1
- package/dist/presentation/dto/index.js.map +1 -1
- package/dist/presentation/dto/step.d.ts.map +1 -1
- package/dist/presentation/dto/step.js +2 -2
- package/dist/presentation/dto/step.js.map +1 -1
- package/dist/presentation/dto/workflow-run.d.ts +3 -1
- package/dist/presentation/dto/workflow-run.d.ts.map +1 -1
- package/dist/presentation/dto/workflow-run.js +34 -0
- package/dist/presentation/dto/workflow-run.js.map +1 -1
- package/dist/presentation/inter-module.d.ts.map +1 -1
- package/dist/presentation/inter-module.js +31 -3
- package/dist/presentation/inter-module.js.map +1 -1
- package/dist/presentation/routes/checkout-token.d.ts +1 -1
- package/dist/presentation/routes/checkout-token.d.ts.map +1 -1
- package/dist/presentation/routes/checkout-token.js +32 -20
- package/dist/presentation/routes/checkout-token.js.map +1 -1
- package/dist/presentation/routes/leased-step.d.ts +2 -0
- package/dist/presentation/routes/leased-step.d.ts.map +1 -1
- package/dist/presentation/routes/leased-step.js +2 -1
- package/dist/presentation/routes/leased-step.js.map +1 -1
- package/dist/presentation/routes/list-runs.d.ts.map +1 -1
- package/dist/presentation/routes/list-runs.js +9 -3
- package/dist/presentation/routes/list-runs.js.map +1 -1
- package/dist/presentation/routes/project-access.d.ts +1 -0
- package/dist/presentation/routes/project-access.d.ts.map +1 -1
- package/dist/presentation/routes/report-step.d.ts.map +1 -1
- package/dist/presentation/routes/report-step.js +9 -2
- package/dist/presentation/routes/report-step.js.map +1 -1
- package/dist/presentation/subscribers/on-job-steps-settled.js +1 -1
- package/dist/presentation/subscribers/on-job-steps-settled.js.map +1 -1
- package/dist/presentation/subscribers/on-runner-job-claimed.d.ts.map +1 -1
- package/dist/presentation/subscribers/on-runner-job-claimed.js +21 -0
- package/dist/presentation/subscribers/on-runner-job-claimed.js.map +1 -1
- package/dist/temporal/activities/index.d.ts.map +1 -1
- package/dist/temporal/activities/index.js +2 -1
- package/dist/temporal/activities/index.js.map +1 -1
- package/dist/temporal/activities/orchestration-activities.d.ts +1 -0
- package/dist/temporal/activities/orchestration-activities.d.ts.map +1 -1
- package/dist/temporal/activities/orchestration-activities.js.map +1 -1
- package/dist/temporal/constants.d.ts +1 -0
- package/dist/temporal/constants.d.ts.map +1 -1
- package/dist/temporal/constants.js +1 -0
- package/dist/temporal/constants.js.map +1 -1
- package/dist/temporal/index.d.ts +1 -1
- package/dist/temporal/index.d.ts.map +1 -1
- package/dist/temporal/index.js +1 -1
- package/dist/temporal/index.js.map +1 -1
- package/dist/temporal/workflows/index.bundle.js +82 -43
- package/dist/temporal/workflows/index.d.ts +1 -1
- package/dist/temporal/workflows/index.d.ts.map +1 -1
- package/dist/temporal/workflows/index.js +1 -1
- package/dist/temporal/workflows/index.js.map +1 -1
- package/dist/temporal/workflows/job-execution-orchestration.d.ts +5 -0
- package/dist/temporal/workflows/job-execution-orchestration.d.ts.map +1 -1
- package/dist/temporal/workflows/job-execution-orchestration.js +77 -43
- package/dist/temporal/workflows/job-execution-orchestration.js.map +1 -1
- package/dist/temporal/workflows/test-env.d.ts +5 -1
- package/dist/temporal/workflows/test-env.d.ts.map +1 -1
- package/dist/temporal/workflows/test-env.js +32 -11
- package/dist/temporal/workflows/test-env.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/drizzle/0000_initial.sql +14 -2
- package/drizzle/0001_windy_sunfire.sql +1 -0
- package/drizzle/meta/0000_snapshot.json +93 -1
- package/drizzle/meta/0001_snapshot.json +1711 -0
- package/drizzle/meta/_journal.json +2 -2
- package/package.json +21 -21
- package/src/core/agent-defaults.ts +2 -1
- package/src/core/checkout.test.ts +378 -67
- package/src/core/checkout.ts +142 -59
- package/src/core/entities/job-execution.test.ts +21 -0
- package/src/core/entities/job-execution.ts +24 -0
- package/src/core/entities/job-listener-event.ts +3 -0
- package/src/core/entities/step.ts +15 -3
- package/src/core/entities/workflow-run-attempt.ts +1 -0
- package/src/core/entities/workflow-run.ts +16 -0
- package/src/core/errors.ts +21 -7
- package/src/core/job-execution.ts +27 -4
- package/src/core/job-transition/decide-job-activation.test.ts +4 -0
- package/src/core/job-transition/decide-job-activation.ts +2 -0
- package/src/core/job-transition/derive-job-success.test.ts +12 -0
- package/src/core/job-transition/derive-job-success.ts +6 -9
- package/src/core/listener-execution-materialization.test.ts +2 -0
- package/src/core/listener-execution-materialization.ts +57 -11
- package/src/core/resolve-trigger-reference.test.ts +160 -0
- package/src/core/resolve-trigger-reference.ts +53 -0
- package/src/core/run-workflow.ts +2 -0
- package/src/core/step-config/agent.ts +29 -12
- package/src/core/step-config/assemble-run-context.test.ts +149 -6
- package/src/core/step-config/assemble-run-context.ts +87 -25
- package/src/core/step-config/complete-step-dispatch-config.test.ts +125 -2
- package/src/core/step-config/complete-step-dispatch-config.ts +83 -1
- package/src/core/step-config/index.ts +7 -0
- package/src/core/step-config/materialize-job-execution-steps.test.ts +250 -1
- package/src/core/step-config/materialize-job-execution-steps.ts +57 -10
- package/src/core/step-config/materialize-workflow-model.test.ts +212 -4
- package/src/core/step-config/materialize-workflow-model.ts +33 -28
- package/src/core/step-config/resolve-job-execution-name.test.ts +37 -15
- package/src/core/step-config/resolve-job-execution-name.ts +30 -15
- package/src/core/step-config/resolve-step-config.ts +175 -10
- package/src/core/step-config/resolve-workflow-run-name.test.ts +115 -0
- package/src/core/step-config/resolve-workflow-run-name.ts +108 -0
- package/src/core/step-transition/decide-step-transition.ts +2 -2
- package/src/core/step-transition/evaluate-gate.test.ts +8 -0
- package/src/core/step-transition/evaluate-gate.ts +8 -1
- package/src/core/workflow-run-creation.test.ts +7 -4
- package/src/core/workflow-run-creation.ts +13 -7
- package/src/db/db.ts +2 -0
- package/src/db/index.ts +6 -0
- package/src/db/job-listener-events.test.ts +19 -0
- package/src/db/job-listener-events.ts +3 -0
- package/src/db/job-listeners.test.ts +187 -5
- package/src/db/job-listeners.ts +122 -30
- package/src/db/schema/job-executions.ts +12 -5
- package/src/db/schema/job-listener-events.ts +3 -0
- package/src/db/schema/step-attempts.ts +2 -2
- package/src/db/schema/steps.ts +2 -1
- package/src/db/schema/workflow-run-attempts.ts +2 -0
- package/src/db/schema/workflow-run-counters.ts +13 -0
- package/src/db/schema/workflow-runs.ts +11 -2
- package/src/db/workflow-runs/job-executions.ts +37 -15
- package/src/db/workflow-runs/jobs.ts +17 -4
- package/src/db/workflow-runs/queries.test.ts +206 -0
- package/src/db/workflow-runs/queries.ts +146 -2
- package/src/db/workflow-runs/run-create.test.ts +606 -8
- package/src/db/workflow-runs/run-create.ts +185 -40
- package/src/db/workflow-runs/run-rerun.test.ts +61 -2
- package/src/db/workflow-runs/run-rerun.ts +15 -5
- package/src/db/workflow-runs/shared.ts +2 -0
- package/src/db/workflow-runs/steps.ts +3 -3
- package/src/db/workflow-runs.ts +7 -0
- package/src/metrics/instance.ts +14 -0
- package/src/presentation/dto/checkout-token.test.ts +19 -9
- package/src/presentation/dto/checkout-token.ts +2 -1
- package/src/presentation/dto/index.ts +1 -1
- package/src/presentation/dto/job.test.ts +9 -0
- package/src/presentation/dto/step.test.ts +12 -0
- package/src/presentation/dto/step.ts +5 -2
- package/src/presentation/dto/workflow-run.ts +44 -2
- package/src/presentation/inter-module.test.ts +165 -0
- package/src/presentation/inter-module.ts +38 -4
- package/src/presentation/routes/checkout-token.test.ts +357 -142
- package/src/presentation/routes/checkout-token.ts +56 -26
- package/src/presentation/routes/get-run.test.ts +2 -0
- package/src/presentation/routes/get-step-secrets.test.ts +7 -2
- package/src/presentation/routes/leased-step.ts +9 -1
- package/src/presentation/routes/list-runs.test.ts +57 -0
- package/src/presentation/routes/list-runs.ts +8 -3
- package/src/presentation/routes/report-step.test.ts +25 -0
- package/src/presentation/routes/report-step.ts +10 -2
- package/src/presentation/subscribers/on-job-steps-settled.ts +1 -1
- package/src/presentation/subscribers/on-runner-job-claimed.test.ts +49 -0
- package/src/presentation/subscribers/on-runner-job-claimed.ts +22 -0
- package/src/temporal/activities/index.ts +1 -0
- package/src/temporal/activities/orchestration-activities.ts +1 -0
- package/src/temporal/constants.ts +1 -0
- package/src/temporal/index.ts +1 -0
- package/src/temporal/workflows/index.ts +1 -0
- package/src/temporal/workflows/job-execution-orchestration.test.ts +142 -6
- package/src/temporal/workflows/job-execution-orchestration.ts +99 -50
- package/src/temporal/workflows/run-orchestration.test.ts +1 -1
- package/src/temporal/workflows/test-env.ts +50 -13
- package/test/factories/project.ts +2 -0
- package/test/factories/workflow-model.ts +80 -26
- package/test/factories/workflow-run.ts +4 -1
- package/test/fixtures/agent-inter-module.ts +2 -1
- package/test/fixtures/job-with-steps.ts +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/drizzle/0001_agent_tool_materialization.sql +0 -1
|
@@ -1,30 +1,34 @@
|
|
|
1
|
-
import { requireLeasedJobContext } from '@shipfox/api-auth-context';
|
|
2
1
|
import { integrationsInterModuleContract } from '@shipfox/api-integration-core-dto/inter-module';
|
|
3
|
-
import {
|
|
2
|
+
import { projectsInterModuleContract } from '@shipfox/api-projects-dto/inter-module';
|
|
3
|
+
import { checkoutTokenParamsSchema, checkoutTokenQuerySchema, checkoutTokenResponseSchema } from '@shipfox/api-workflows-dto';
|
|
4
4
|
import { isInterModuleKnownError } from '@shipfox/inter-module';
|
|
5
5
|
import { ClientError, defineRoute } from '@shipfox/node-fastify';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { createStepCheckoutSpec } from '#core/checkout.js';
|
|
7
|
+
import { CheckoutConfigInvalidError, CheckoutIntentUnresolvedError } from '#core/errors.js';
|
|
8
8
|
import { toCheckoutTokenDto } from '#presentation/dto/checkout-token.js';
|
|
9
|
+
import { loadRunningLeasedStep } from './leased-step.js';
|
|
9
10
|
export function createCheckoutTokenRoute(clients) {
|
|
10
11
|
return defineRoute({
|
|
11
12
|
method: 'POST',
|
|
12
|
-
path: '/checkout-token',
|
|
13
|
-
description: "Exchanges the runner's
|
|
13
|
+
path: '/steps/:stepId/checkout-token',
|
|
14
|
+
description: "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.",
|
|
14
15
|
schema: {
|
|
16
|
+
params: checkoutTokenParamsSchema,
|
|
17
|
+
querystring: checkoutTokenQuerySchema,
|
|
15
18
|
response: {
|
|
16
19
|
200: checkoutTokenResponseSchema
|
|
17
20
|
}
|
|
18
21
|
},
|
|
19
22
|
errorHandler: (error)=>{
|
|
20
23
|
const known = isInterModuleKnownError(integrationsInterModuleContract.methods.createCheckoutSpec, error) ? error : undefined;
|
|
21
|
-
|
|
24
|
+
const targetError = isInterModuleKnownError(projectsInterModuleContract.methods.resolveCheckoutTarget, error) ? error : undefined;
|
|
25
|
+
if (error instanceof CheckoutIntentUnresolvedError) throw new ClientError(error.message, 'checkout-unavailable', {
|
|
22
26
|
status: 404
|
|
23
27
|
});
|
|
24
|
-
if (error instanceof
|
|
25
|
-
status:
|
|
28
|
+
if (error instanceof CheckoutConfigInvalidError) throw new ClientError('Checkout configuration is invalid', 'checkout-config-invalid', {
|
|
29
|
+
status: 409
|
|
26
30
|
});
|
|
27
|
-
if (
|
|
31
|
+
if (targetError?.code === 'checkout-repository-not-authorized') throw new ClientError('Checkout repository is not authorized for this workspace', 'checkout-repository-not-authorized', {
|
|
28
32
|
status: 404
|
|
29
33
|
});
|
|
30
34
|
if (known?.code === 'connection-not-found') throw new ClientError('Integration connection not found', 'integration-connection-not-found', {
|
|
@@ -57,22 +61,30 @@ export function createCheckoutTokenRoute(clients) {
|
|
|
57
61
|
throw error;
|
|
58
62
|
},
|
|
59
63
|
handler: async (request, reply)=>{
|
|
60
|
-
const
|
|
61
|
-
const {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
const { stepId } = request.params;
|
|
65
|
+
const { attempt } = request.query;
|
|
66
|
+
const { step, workspaceId, projectId, triggerReference } = await loadRunningLeasedStep({
|
|
67
|
+
runners: clients.runners,
|
|
68
|
+
request,
|
|
69
|
+
stepId,
|
|
70
|
+
attempt
|
|
65
71
|
});
|
|
66
|
-
if (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
72
|
+
if (step.type !== 'setup' && step.type !== 'checkout') {
|
|
73
|
+
throw new ClientError('Step is not a checkout step', 'step-not-checkout', {
|
|
74
|
+
status: 409
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
const checkout = await createStepCheckoutSpec({
|
|
78
|
+
step,
|
|
79
|
+
workspaceId,
|
|
80
|
+
projectId,
|
|
81
|
+
triggerReference,
|
|
71
82
|
integrations: clients.integrations,
|
|
72
83
|
projects: clients.projects
|
|
73
84
|
});
|
|
74
85
|
reply.header('cache-control', 'no-store');
|
|
75
86
|
return toCheckoutTokenDto(checkout.spec, {
|
|
87
|
+
fetchDepth: checkout.fetchDepth,
|
|
76
88
|
persist: checkout.persistCredentials
|
|
77
89
|
});
|
|
78
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/routes/checkout-token.ts"],"sourcesContent":["import {
|
|
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,11 +1,13 @@
|
|
|
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
5
|
export interface LoadedRunningLeasedStep {
|
|
5
6
|
leasedJob: LeasedJobContext;
|
|
6
7
|
step: Step;
|
|
7
8
|
workspaceId: string;
|
|
8
9
|
projectId: string;
|
|
10
|
+
triggerReference: WorkflowRunTriggerReference | null;
|
|
9
11
|
}
|
|
10
12
|
export declare function loadRunningLeasedStep(params: {
|
|
11
13
|
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;
|
|
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 +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 {getJobScope, getStepByIdForJobExecution} from '#db/index.js';\n\nexport interface LoadedRunningLeasedStep {\n leasedJob: LeasedJobContext;\n step: Step;\n workspaceId: string;\n projectId: string;\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 {leasedJob
|
|
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 +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,
|
|
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"}
|
|
@@ -2,8 +2,8 @@ import { workflowRunListQuerySchema, workflowRunListResponseSchema } from '@ship
|
|
|
2
2
|
import { decodeTimestampIdCursor, encodeTimestampIdCursor } from '@shipfox/node-drizzle';
|
|
3
3
|
import { ClientError, defineRoute } from '@shipfox/node-fastify';
|
|
4
4
|
import { logger } from '@shipfox/node-opentelemetry';
|
|
5
|
-
import { listWorkflowRuns } from '#db/index.js';
|
|
6
|
-
import {
|
|
5
|
+
import { listWorkflowRunJobSummaries, listWorkflowRuns } from '#db/index.js';
|
|
6
|
+
import { toRunListItemDto } from '#presentation/dto/index.js';
|
|
7
7
|
import { requireProjectAccess } from './project-access.js';
|
|
8
8
|
export function listRunsRoute(projects) {
|
|
9
9
|
return defineRoute({
|
|
@@ -40,6 +40,12 @@ export function listRunsRoute(projects) {
|
|
|
40
40
|
filters,
|
|
41
41
|
includeTotal: !decodedCursor
|
|
42
42
|
});
|
|
43
|
+
// Paired with the attempt this read returned, so a re-run landing mid-request cannot
|
|
44
|
+
// pair one attempt's metadata with another's jobs.
|
|
45
|
+
const jobsByRun = await listWorkflowRunJobSummaries(result.runs.map((run)=>({
|
|
46
|
+
id: run.id,
|
|
47
|
+
currentAttempt: run.currentAttempt
|
|
48
|
+
})));
|
|
43
49
|
logger().info({
|
|
44
50
|
projectId: project.id,
|
|
45
51
|
filterKeys: Object.entries(filters).filter(([, value])=>value !== undefined).map(([key])=>key),
|
|
@@ -50,7 +56,7 @@ export function listRunsRoute(projects) {
|
|
|
50
56
|
durationMs: Math.round(performance.now() - startedAt)
|
|
51
57
|
}, 'Listed workflow runs');
|
|
52
58
|
return {
|
|
53
|
-
runs: result.runs.map((run)=>
|
|
59
|
+
runs: result.runs.map((run)=>toRunListItemDto(run, jobsByRun.get(run.id))),
|
|
54
60
|
next_cursor: result.nextCursor ? encodeTimestampIdCursor(result.nextCursor) : null,
|
|
55
61
|
filtered_total_count: result.filteredTotalCount
|
|
56
62
|
};
|
|
@@ -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 {listWorkflowRuns} from '#db/index.js';\nimport {
|
|
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"}
|
|
@@ -6,5 +6,6 @@ export declare function requireProjectAccess(request: FastifyRequest, projectId:
|
|
|
6
6
|
sourceConnectionId: string;
|
|
7
7
|
sourceExternalRepositoryId: string;
|
|
8
8
|
name: string;
|
|
9
|
+
sourceRepositoryOwner?: string | null | undefined;
|
|
9
10
|
}>;
|
|
10
11
|
//# 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
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-step.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/report-step.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAQpF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"report-step.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/report-step.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAQpF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,wBAAwB,mDA6DtE"}
|
|
@@ -9,7 +9,7 @@ export function createReportStepRoute(runners) {
|
|
|
9
9
|
return defineRoute({
|
|
10
10
|
method: 'POST',
|
|
11
11
|
path: '/steps/:stepId/report',
|
|
12
|
-
description: 'Reports whether a step succeeded or failed. The job is identified by the access token. Reporting the same step more than once is safe: once a step has finished, later reports for it are ignored. The runner does not call a separate job-completion endpoint
|
|
12
|
+
description: 'Reports whether a step succeeded or failed. The job is identified by the access token. Reporting the same step more than once is safe: once a step has finished, later reports for it are ignored. The runner does not call a separate job-completion endpoint: finalization is driven server-side from the recorded step results, and the `cancel` flag tells the runner to stop once the job has finished without full success.',
|
|
13
13
|
schema: {
|
|
14
14
|
params: z.object({
|
|
15
15
|
stepId: z.string().uuid()
|
|
@@ -50,12 +50,19 @@ export function createReportStepRoute(runners) {
|
|
|
50
50
|
status: 404
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
|
+
// Checkout is a reserved system field on the report wire contract. Keep
|
|
54
|
+
// it out of the runner's user output merge until this persistence
|
|
55
|
+
// boundary, where the system value has explicit precedence.
|
|
56
|
+
const output = request.body.checkout === undefined ? request.body.output ?? null : {
|
|
57
|
+
...request.body.output ?? {},
|
|
58
|
+
checkout: request.body.checkout
|
|
59
|
+
};
|
|
53
60
|
const outcome = await recordStepResult({
|
|
54
61
|
jobExecutionId: leasedJob.jobExecutionId,
|
|
55
62
|
stepId,
|
|
56
63
|
status: request.body.status,
|
|
57
64
|
error: fromStepErrorDto(request.body.error),
|
|
58
|
-
output
|
|
65
|
+
output,
|
|
59
66
|
response: request.body.response ?? null,
|
|
60
67
|
exitCode: request.body.exit_code ?? request.body.error?.exit_code ?? null,
|
|
61
68
|
logOutcome: request.body.log_outcome,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/routes/report-step.ts"],"sourcesContent":["import {requireLeasedJobContext} from '@shipfox/api-auth-context';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport {reportStepBodySchema, reportStepResponseSchema} from '@shipfox/api-workflows-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {StepAttemptAheadError, StepNotFoundError, StepNotRunningError} from '#core/errors.js';\nimport {recordStepResult} from '#core/job-execution.js';\nimport {fromStepErrorDto} from '#presentation/dto/step.js';\n\nexport function createReportStepRoute(runners: RunnersInterModuleClient) {\n return defineRoute({\n method: 'POST',\n path: '/steps/:stepId/report',\n description:\n 'Reports whether a step succeeded or failed. The job is identified by the access token. Reporting the same step more than once is safe: once a step has finished, later reports for it are ignored. The runner does not call a separate job-completion endpoint
|
|
1
|
+
{"version":3,"sources":["../../../src/presentation/routes/report-step.ts"],"sourcesContent":["import {requireLeasedJobContext} from '@shipfox/api-auth-context';\nimport type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';\nimport {reportStepBodySchema, reportStepResponseSchema} from '@shipfox/api-workflows-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {StepAttemptAheadError, StepNotFoundError, StepNotRunningError} from '#core/errors.js';\nimport {recordStepResult} from '#core/job-execution.js';\nimport {fromStepErrorDto} from '#presentation/dto/step.js';\n\nexport function createReportStepRoute(runners: RunnersInterModuleClient) {\n return defineRoute({\n method: 'POST',\n path: '/steps/:stepId/report',\n description:\n 'Reports whether a step succeeded or failed. The job is identified by the access token. Reporting the same step more than once is safe: once a step has finished, later reports for it are ignored. The runner does not call a separate job-completion endpoint: finalization is driven server-side from the recorded step results, and the `cancel` flag tells the runner to stop once the job has finished without full success.',\n schema: {\n params: z.object({stepId: z.string().uuid()}),\n body: reportStepBodySchema,\n response: {\n 200: reportStepResponseSchema,\n },\n },\n errorHandler: (error) => {\n if (error instanceof StepNotFoundError) {\n throw new ClientError(error.message, 'step-not-found', {status: 404});\n }\n if (error instanceof StepNotRunningError) {\n throw new ClientError(error.message, 'step-not-running', {status: 409});\n }\n if (error instanceof StepAttemptAheadError) {\n throw new ClientError(error.message, 'step-attempt-ahead', {status: 409});\n }\n throw error;\n },\n handler: async (request) => {\n const {stepId} = request.params;\n const leasedJob = requireLeasedJobContext(request);\n\n const {active: leaseIsActive} = await 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 // Checkout is a reserved system field on the report wire contract. Keep\n // it out of the runner's user output merge until this persistence\n // boundary, where the system value has explicit precedence.\n const output =\n request.body.checkout === undefined\n ? (request.body.output ?? null)\n : {...(request.body.output ?? {}), checkout: request.body.checkout};\n\n const outcome = await recordStepResult({\n jobExecutionId: leasedJob.jobExecutionId,\n stepId,\n status: request.body.status,\n error: fromStepErrorDto(request.body.error),\n output,\n response: request.body.response ?? null,\n exitCode: request.body.exit_code ?? request.body.error?.exit_code ?? null,\n logOutcome: request.body.log_outcome,\n ...(request.body.attempt !== undefined ? {attempt: request.body.attempt} : {}),\n });\n\n return {ok: true, cancel: outcome.jobFinished && outcome.status === 'failed'};\n },\n });\n}\n"],"names":["requireLeasedJobContext","reportStepBodySchema","reportStepResponseSchema","ClientError","defineRoute","z","StepAttemptAheadError","StepNotFoundError","StepNotRunningError","recordStepResult","fromStepErrorDto","createReportStepRoute","runners","method","path","description","schema","params","object","stepId","string","uuid","body","response","errorHandler","error","message","status","handler","request","leasedJob","active","leaseIsActive","getLeaseState","jobId","jobExecutionId","runnerSessionId","output","checkout","undefined","outcome","exitCode","exit_code","logOutcome","log_outcome","attempt","ok","cancel","jobFinished"],"mappings":"AAAA,SAAQA,uBAAuB,QAAO,4BAA4B;AAElE,SAAQC,oBAAoB,EAAEC,wBAAwB,QAAO,6BAA6B;AAC1F,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,qBAAqB,EAAEC,iBAAiB,EAAEC,mBAAmB,QAAO,kBAAkB;AAC9F,SAAQC,gBAAgB,QAAO,yBAAyB;AACxD,SAAQC,gBAAgB,QAAO,4BAA4B;AAE3D,OAAO,SAASC,sBAAsBC,OAAiC;IACrE,OAAOR,YAAY;QACjBS,QAAQ;QACRC,MAAM;QACNC,aACE;QACFC,QAAQ;YACNC,QAAQZ,EAAEa,MAAM,CAAC;gBAACC,QAAQd,EAAEe,MAAM,GAAGC,IAAI;YAAE;YAC3CC,MAAMrB;YACNsB,UAAU;gBACR,KAAKrB;YACP;QACF;QACAsB,cAAc,CAACC;YACb,IAAIA,iBAAiBlB,mBAAmB;gBACtC,MAAM,IAAIJ,YAAYsB,MAAMC,OAAO,EAAE,kBAAkB;oBAACC,QAAQ;gBAAG;YACrE;YACA,IAAIF,iBAAiBjB,qBAAqB;gBACxC,MAAM,IAAIL,YAAYsB,MAAMC,OAAO,EAAE,oBAAoB;oBAACC,QAAQ;gBAAG;YACvE;YACA,IAAIF,iBAAiBnB,uBAAuB;gBAC1C,MAAM,IAAIH,YAAYsB,MAAMC,OAAO,EAAE,sBAAsB;oBAACC,QAAQ;gBAAG;YACzE;YACA,MAAMF;QACR;QACAG,SAAS,OAAOC;YACd,MAAM,EAACV,MAAM,EAAC,GAAGU,QAAQZ,MAAM;YAC/B,MAAMa,YAAY9B,wBAAwB6B;YAE1C,MAAM,EAACE,QAAQC,aAAa,EAAC,GAAG,MAAMpB,QAAQqB,aAAa,CAAC;gBAC1DC,OAAOJ,UAAUI,KAAK;gBACtBC,gBAAgBL,UAAUK,cAAc;gBACxCC,iBAAiBN,UAAUM,eAAe;YAC5C;YACA,IAAI,CAACJ,eAAe;gBAClB,MAAM,IAAI7B,YAAY,iCAAiC,oBAAoB;oBAACwB,QAAQ;gBAAG;YACzF;YAEA,wEAAwE;YACxE,kEAAkE;YAClE,4DAA4D;YAC5D,MAAMU,SACJR,QAAQP,IAAI,CAACgB,QAAQ,KAAKC,YACrBV,QAAQP,IAAI,CAACe,MAAM,IAAI,OACxB;gBAAC,GAAIR,QAAQP,IAAI,CAACe,MAAM,IAAI,CAAC,CAAC;gBAAGC,UAAUT,QAAQP,IAAI,CAACgB,QAAQ;YAAA;YAEtE,MAAME,UAAU,MAAM/B,iBAAiB;gBACrC0B,gBAAgBL,UAAUK,cAAc;gBACxChB;gBACAQ,QAAQE,QAAQP,IAAI,CAACK,MAAM;gBAC3BF,OAAOf,iBAAiBmB,QAAQP,IAAI,CAACG,KAAK;gBAC1CY;gBACAd,UAAUM,QAAQP,IAAI,CAACC,QAAQ,IAAI;gBACnCkB,UAAUZ,QAAQP,IAAI,CAACoB,SAAS,IAAIb,QAAQP,IAAI,CAACG,KAAK,EAAEiB,aAAa;gBACrEC,YAAYd,QAAQP,IAAI,CAACsB,WAAW;gBACpC,GAAIf,QAAQP,IAAI,CAACuB,OAAO,KAAKN,YAAY;oBAACM,SAAShB,QAAQP,IAAI,CAACuB,OAAO;gBAAA,IAAI,CAAC,CAAC;YAC/E;YAEA,OAAO;gBAACC,IAAI;gBAAMC,QAAQP,QAAQQ,WAAW,IAAIR,QAAQb,MAAM,KAAK;YAAQ;QAC9E;IACF;AACF"}
|
|
@@ -5,7 +5,7 @@ import { isWorkflowNotFound } from '#temporal/workflow-not-found.js';
|
|
|
5
5
|
// Per-step execution finishes a job inside recordStepResult (no runner /complete
|
|
6
6
|
// call), which enqueues WORKFLOWS_JOB_STEPS_SETTLED in the same transaction. The
|
|
7
7
|
// persisted per-step projection is already terminal, so the workflow only flips
|
|
8
|
-
// the job status
|
|
8
|
+
// the job status: no steps are carried.
|
|
9
9
|
export async function onJobStepsSettled(payload) {
|
|
10
10
|
logger().info({
|
|
11
11
|
jobId: payload.jobId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/subscribers/on-job-steps-settled.ts"],"sourcesContent":["import type {WorkflowsJobStepsSettledEventDto} from '@shipfox/api-workflows-dto';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {temporalClient} from '@shipfox/node-temporal';\nimport {JOB_FINISHED_SIGNAL} from '#temporal/constants.js';\nimport {isWorkflowNotFound} from '#temporal/workflow-not-found.js';\n\n// Per-step execution finishes a job inside recordStepResult (no runner /complete\n// call), which enqueues WORKFLOWS_JOB_STEPS_SETTLED in the same transaction. The\n// persisted per-step projection is already terminal, so the workflow only flips\n// the job status
|
|
1
|
+
{"version":3,"sources":["../../../src/presentation/subscribers/on-job-steps-settled.ts"],"sourcesContent":["import type {WorkflowsJobStepsSettledEventDto} from '@shipfox/api-workflows-dto';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {temporalClient} from '@shipfox/node-temporal';\nimport {JOB_FINISHED_SIGNAL} from '#temporal/constants.js';\nimport {isWorkflowNotFound} from '#temporal/workflow-not-found.js';\n\n// Per-step execution finishes a job inside recordStepResult (no runner /complete\n// call), which enqueues WORKFLOWS_JOB_STEPS_SETTLED in the same transaction. The\n// persisted per-step projection is already terminal, so the workflow only flips\n// the job status: no steps are carried.\nexport async function onJobStepsSettled(payload: WorkflowsJobStepsSettledEventDto): Promise<void> {\n logger().info(\n {\n jobId: payload.jobId,\n jobExecutionId: payload.jobExecutionId,\n status: payload.status,\n },\n 'Signaling job finished',\n );\n const handle = temporalClient().workflow.getHandle(`job:${payload.jobId}`);\n try {\n await handle.signal(JOB_FINISHED_SIGNAL, {\n status: payload.status,\n jobExecutionId: payload.jobExecutionId,\n });\n } catch (err) {\n // Workflow already terminated (e.g. timeout path); its status is\n // authoritative, drop this late event.\n if (isWorkflowNotFound(err)) {\n logger().debug(\n {\n jobId: payload.jobId,\n jobExecutionId: payload.jobExecutionId,\n status: payload.status,\n },\n 'Job workflow already terminated; job-finished event discarded',\n );\n return;\n }\n throw err;\n }\n}\n"],"names":["logger","temporalClient","JOB_FINISHED_SIGNAL","isWorkflowNotFound","onJobStepsSettled","payload","info","jobId","jobExecutionId","status","handle","workflow","getHandle","signal","err","debug"],"mappings":"AACA,SAAQA,MAAM,QAAO,8BAA8B;AACnD,SAAQC,cAAc,QAAO,yBAAyB;AACtD,SAAQC,mBAAmB,QAAO,yBAAyB;AAC3D,SAAQC,kBAAkB,QAAO,kCAAkC;AAEnE,iFAAiF;AACjF,iFAAiF;AACjF,gFAAgF;AAChF,wCAAwC;AACxC,OAAO,eAAeC,kBAAkBC,OAAyC;IAC/EL,SAASM,IAAI,CACX;QACEC,OAAOF,QAAQE,KAAK;QACpBC,gBAAgBH,QAAQG,cAAc;QACtCC,QAAQJ,QAAQI,MAAM;IACxB,GACA;IAEF,MAAMC,SAAST,iBAAiBU,QAAQ,CAACC,SAAS,CAAC,CAAC,IAAI,EAAEP,QAAQE,KAAK,EAAE;IACzE,IAAI;QACF,MAAMG,OAAOG,MAAM,CAACX,qBAAqB;YACvCO,QAAQJ,QAAQI,MAAM;YACtBD,gBAAgBH,QAAQG,cAAc;QACxC;IACF,EAAE,OAAOM,KAAK;QACZ,iEAAiE;QACjE,uCAAuC;QACvC,IAAIX,mBAAmBW,MAAM;YAC3Bd,SAASe,KAAK,CACZ;gBACER,OAAOF,QAAQE,KAAK;gBACpBC,gBAAgBH,QAAQG,cAAc;gBACtCC,QAAQJ,QAAQI,MAAM;YACxB,GACA;YAEF;QACF;QACA,MAAMK;IACR;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"on-runner-job-claimed.d.ts","sourceRoot":"","sources":["../../../src/presentation/subscribers/on-runner-job-claimed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"on-runner-job-claimed.d.ts","sourceRoot":"","sources":["../../../src/presentation/subscribers/on-runner-job-claimed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,0BAA0B,CAAC;AAWpE,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCtF"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { logger } from '@shipfox/node-opentelemetry';
|
|
2
|
+
import { temporalClient } from '@shipfox/node-temporal';
|
|
2
3
|
import { recordJobExecutionStartedAt } from '#db/index.js';
|
|
4
|
+
import { JOB_CLAIMED_SIGNAL } from '#temporal/constants.js';
|
|
5
|
+
import { isWorkflowNotFound } from '#temporal/workflow-not-found.js';
|
|
3
6
|
// Anticorruption layer: the runner reports a `claimed` fact in its own lease-broker
|
|
4
7
|
// language; the run lifecycle treats the claim as the job's start, so we project it onto
|
|
5
8
|
// `started_at`. Use the runner-owned claim timestamp, not subscriber time; the DB
|
|
@@ -15,6 +18,24 @@ export async function onRunnerJobClaimed(payload) {
|
|
|
15
18
|
jobExecutionId: payload.jobExecutionId,
|
|
16
19
|
startedAt: new Date(payload.claimedAt)
|
|
17
20
|
});
|
|
21
|
+
const handle = temporalClient().workflow.getHandle(`job:${payload.jobId}`);
|
|
22
|
+
try {
|
|
23
|
+
await handle.signal(JOB_CLAIMED_SIGNAL, {
|
|
24
|
+
jobExecutionId: payload.jobExecutionId,
|
|
25
|
+
claimedAt: payload.claimedAt
|
|
26
|
+
});
|
|
27
|
+
} catch (err) {
|
|
28
|
+
// A terminal execution can race the claim outbox delivery. Its persisted status is
|
|
29
|
+
// authoritative, so discard the signal if Temporal has already closed the workflow.
|
|
30
|
+
if (isWorkflowNotFound(err)) {
|
|
31
|
+
logger().debug({
|
|
32
|
+
jobId: payload.jobId,
|
|
33
|
+
jobExecutionId: payload.jobExecutionId
|
|
34
|
+
}, 'Job workflow already terminated; claim event discarded');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
18
39
|
}
|
|
19
40
|
|
|
20
41
|
//# sourceMappingURL=on-runner-job-claimed.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/subscribers/on-runner-job-claimed.ts"],"sourcesContent":["import type {RunnerJobClaimedEvent} from '@shipfox/api-runners-dto';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {recordJobExecutionStartedAt} from '#db/index.js';\n\n// Anticorruption layer: the runner reports a `claimed` fact in its own lease-broker\n// language; the run lifecycle treats the claim as the job's start, so we project it onto\n// `started_at`. Use the runner-owned claim timestamp, not subscriber time; the DB\n// projection is first-write-wins so outbox replay cannot move the run boundary.\nexport async function onRunnerJobClaimed(payload: RunnerJobClaimedEvent): Promise<void> {\n logger().debug(\n {\n workflowRunId: payload.workflowRunId,\n workflowRunAttemptId: payload.workflowRunAttemptId,\n jobId: payload.jobId,\n jobExecutionId: payload.jobExecutionId,\n },\n 'Recording job execution started_at from claim',\n );\n await recordJobExecutionStartedAt({\n jobExecutionId: payload.jobExecutionId,\n startedAt: new Date(payload.claimedAt),\n });\n}\n"],"names":["logger","recordJobExecutionStartedAt","onRunnerJobClaimed","payload","debug","workflowRunId","workflowRunAttemptId","jobId","jobExecutionId","startedAt","Date","claimedAt"],"mappings":"AACA,SAAQA,MAAM,QAAO,8BAA8B;AACnD,SAAQC,2BAA2B,QAAO,eAAe;
|
|
1
|
+
{"version":3,"sources":["../../../src/presentation/subscribers/on-runner-job-claimed.ts"],"sourcesContent":["import type {RunnerJobClaimedEvent} from '@shipfox/api-runners-dto';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {temporalClient} from '@shipfox/node-temporal';\nimport {recordJobExecutionStartedAt} from '#db/index.js';\nimport {JOB_CLAIMED_SIGNAL} from '#temporal/constants.js';\nimport {isWorkflowNotFound} from '#temporal/workflow-not-found.js';\n\n// Anticorruption layer: the runner reports a `claimed` fact in its own lease-broker\n// language; the run lifecycle treats the claim as the job's start, so we project it onto\n// `started_at`. Use the runner-owned claim timestamp, not subscriber time; the DB\n// projection is first-write-wins so outbox replay cannot move the run boundary.\nexport async function onRunnerJobClaimed(payload: RunnerJobClaimedEvent): Promise<void> {\n logger().debug(\n {\n workflowRunId: payload.workflowRunId,\n workflowRunAttemptId: payload.workflowRunAttemptId,\n jobId: payload.jobId,\n jobExecutionId: payload.jobExecutionId,\n },\n 'Recording job execution started_at from claim',\n );\n await recordJobExecutionStartedAt({\n jobExecutionId: payload.jobExecutionId,\n startedAt: new Date(payload.claimedAt),\n });\n\n const handle = temporalClient().workflow.getHandle(`job:${payload.jobId}`);\n try {\n await handle.signal(JOB_CLAIMED_SIGNAL, {\n jobExecutionId: payload.jobExecutionId,\n claimedAt: payload.claimedAt,\n });\n } catch (err) {\n // A terminal execution can race the claim outbox delivery. Its persisted status is\n // authoritative, so discard the signal if Temporal has already closed the workflow.\n if (isWorkflowNotFound(err)) {\n logger().debug(\n {jobId: payload.jobId, jobExecutionId: payload.jobExecutionId},\n 'Job workflow already terminated; claim event discarded',\n );\n return;\n }\n throw err;\n }\n}\n"],"names":["logger","temporalClient","recordJobExecutionStartedAt","JOB_CLAIMED_SIGNAL","isWorkflowNotFound","onRunnerJobClaimed","payload","debug","workflowRunId","workflowRunAttemptId","jobId","jobExecutionId","startedAt","Date","claimedAt","handle","workflow","getHandle","signal","err"],"mappings":"AACA,SAAQA,MAAM,QAAO,8BAA8B;AACnD,SAAQC,cAAc,QAAO,yBAAyB;AACtD,SAAQC,2BAA2B,QAAO,eAAe;AACzD,SAAQC,kBAAkB,QAAO,yBAAyB;AAC1D,SAAQC,kBAAkB,QAAO,kCAAkC;AAEnE,oFAAoF;AACpF,yFAAyF;AACzF,kFAAkF;AAClF,gFAAgF;AAChF,OAAO,eAAeC,mBAAmBC,OAA8B;IACrEN,SAASO,KAAK,CACZ;QACEC,eAAeF,QAAQE,aAAa;QACpCC,sBAAsBH,QAAQG,oBAAoB;QAClDC,OAAOJ,QAAQI,KAAK;QACpBC,gBAAgBL,QAAQK,cAAc;IACxC,GACA;IAEF,MAAMT,4BAA4B;QAChCS,gBAAgBL,QAAQK,cAAc;QACtCC,WAAW,IAAIC,KAAKP,QAAQQ,SAAS;IACvC;IAEA,MAAMC,SAASd,iBAAiBe,QAAQ,CAACC,SAAS,CAAC,CAAC,IAAI,EAAEX,QAAQI,KAAK,EAAE;IACzE,IAAI;QACF,MAAMK,OAAOG,MAAM,CAACf,oBAAoB;YACtCQ,gBAAgBL,QAAQK,cAAc;YACtCG,WAAWR,QAAQQ,SAAS;QAC9B;IACF,EAAE,OAAOK,KAAK;QACZ,mFAAmF;QACnF,oFAAoF;QACpF,IAAIf,mBAAmBe,MAAM;YAC3BnB,SAASO,KAAK,CACZ;gBAACG,OAAOJ,QAAQI,KAAK;gBAAEC,gBAAgBL,QAAQK,cAAc;YAAA,GAC7D;YAEF;QACF;QACA,MAAMQ;IACR;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/temporal/activities/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAChF,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,EACL,2BAA2B,EAC3B,mBAAmB,EAKnB,8BAA8B,EAC9B,kCAAkC,EAClC,yBAAyB,EACzB,iBAAiB,EACjB,0BAA0B,EAC1B,mCAAmC,EACnC,0BAA0B,EAC1B,yCAAyC,EACzC,uCAAuC,EACvC,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EACnB,kCAAkC,EACnC,MAAM,+BAA+B,CAAC;AAEvC,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,KAAK,EAAE,sBAAsB,CAAC;IAC9B,YAAY,EAAE,wBAAwB,CAAC;IACvC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,OAAO,EAAE,wBAAwB,CAAC;IAClC,OAAO,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAAC;CACpE;;;;4CAKiD,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;yDAOvE,UAAU,CAAC,OAAO,kCAAkC,CAAC,CAAC,CAAC,CAAC;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/temporal/activities/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAChF,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,EACL,2BAA2B,EAC3B,mBAAmB,EAKnB,8BAA8B,EAC9B,kCAAkC,EAClC,yBAAyB,EACzB,iBAAiB,EACjB,0BAA0B,EAC1B,mCAAmC,EACnC,0BAA0B,EAC1B,yCAAyC,EACzC,uCAAuC,EACvC,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EACnB,kCAAkC,EACnC,MAAM,+BAA+B,CAAC;AAEvC,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,KAAK,EAAE,sBAAsB,CAAC;IAC9B,YAAY,EAAE,wBAAwB,CAAC;IACvC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,OAAO,EAAE,wBAAwB,CAAC;IAClC,OAAO,EAAE,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAAC;CACpE;;;;4CAKiD,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;yDAOvE,UAAU,CAAC,OAAO,kCAAkC,CAAC,CAAC,CAAC,CAAC;;;;;;;;eAqBumP,CAAC;;;;;;8DANhqP,UAAU,CAAC,OAAO,uCAAuC,CAAC,CAAC,CAAC,CAAC;;;;;;;;EAKlF"}
|
|
@@ -15,7 +15,8 @@ export function createOrchestrationActivities(params) {
|
|
|
15
15
|
drainListenerEventsActivity: createDrainListenerEventsActivity({
|
|
16
16
|
agent: params.agent,
|
|
17
17
|
integrations: params.integrations,
|
|
18
|
-
projects: params.projects
|
|
18
|
+
projects: params.projects,
|
|
19
|
+
secrets: params.secrets
|
|
19
20
|
}),
|
|
20
21
|
peekListenerBufferActivity,
|
|
21
22
|
resolveJobListenerActivity,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/temporal/activities/index.ts"],"sourcesContent":["import type {AgentInterModuleClient} from '@shipfox/api-agent-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 {\n activateJobListenerActivity,\n bulkSetStepStatuses,\n createCancelRunnerJobsActivity,\n createDrainListenerEventsActivity,\n createEnqueueJobExecutionForRunner,\n createReleaseLeaseActivity,\n evaluateJobActivationsActivity,\n failJobExecutionAsTimedOutActivity,\n failRunAsTimedOutActivity,\n loadRunAttemptDag,\n peekListenerBufferActivity,\n recordListenerFiringOutcomeActivity,\n resolveJobListenerActivity,\n resolveJobStatusFromJobExecutionsActivity,\n resolveLeaseExpiredJobExecutionActivity,\n setJobExecutionStatus,\n setJobStatus,\n setRunAttemptStatus,\n settleListenerJobExecutionActivity,\n} from './orchestration-activities.js';\n\nexport function createOrchestrationActivities(params: {\n agent: AgentInterModuleClient;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n runners: RunnersInterModuleClient;\n secrets: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'>;\n}) {\n return {\n loadRunAttemptDag,\n setRunAttemptStatus,\n setJobStatus,\n setJobExecutionStatus: async (activityParams: Parameters<typeof setJobExecutionStatus>[0]) =>\n await setJobExecutionStatus(activityParams, params.secrets),\n bulkSetStepStatuses,\n cancelRunnerJobsActivity: createCancelRunnerJobsActivity(params.runners),\n enqueueJobExecutionForRunner: createEnqueueJobExecutionForRunner(params.runners),\n evaluateJobActivationsActivity,\n failJobExecutionAsTimedOutActivity: async (\n activityParams: Parameters<typeof failJobExecutionAsTimedOutActivity>[0],\n ) => await failJobExecutionAsTimedOutActivity(activityParams, params.secrets),\n failRunAsTimedOutActivity,\n activateJobListenerActivity,\n drainListenerEventsActivity: createDrainListenerEventsActivity({\n agent: params.agent,\n integrations: params.integrations,\n projects: params.projects,\n }),\n peekListenerBufferActivity,\n resolveJobListenerActivity,\n settleListenerJobExecutionActivity,\n recordListenerFiringOutcomeActivity,\n resolveLeaseExpiredJobExecutionActivity: async (\n activityParams: Parameters<typeof resolveLeaseExpiredJobExecutionActivity>[0],\n ) => await resolveLeaseExpiredJobExecutionActivity(activityParams, params.secrets),\n resolveJobStatusFromJobExecutionsActivity,\n releaseLeaseActivity: createReleaseLeaseActivity(params.runners),\n };\n}\n"],"names":["activateJobListenerActivity","bulkSetStepStatuses","createCancelRunnerJobsActivity","createDrainListenerEventsActivity","createEnqueueJobExecutionForRunner","createReleaseLeaseActivity","evaluateJobActivationsActivity","failJobExecutionAsTimedOutActivity","failRunAsTimedOutActivity","loadRunAttemptDag","peekListenerBufferActivity","recordListenerFiringOutcomeActivity","resolveJobListenerActivity","resolveJobStatusFromJobExecutionsActivity","resolveLeaseExpiredJobExecutionActivity","setJobExecutionStatus","setJobStatus","setRunAttemptStatus","settleListenerJobExecutionActivity","createOrchestrationActivities","params","activityParams","secrets","cancelRunnerJobsActivity","runners","enqueueJobExecutionForRunner","drainListenerEventsActivity","agent","integrations","projects","releaseLeaseActivity"],"mappings":"AAKA,SACEA,2BAA2B,EAC3BC,mBAAmB,EACnBC,8BAA8B,EAC9BC,iCAAiC,EACjCC,kCAAkC,EAClCC,0BAA0B,EAC1BC,8BAA8B,EAC9BC,kCAAkC,EAClCC,yBAAyB,EACzBC,iBAAiB,EACjBC,0BAA0B,EAC1BC,mCAAmC,EACnCC,0BAA0B,EAC1BC,yCAAyC,EACzCC,uCAAuC,EACvCC,qBAAqB,EACrBC,YAAY,EACZC,mBAAmB,EACnBC,kCAAkC,QAC7B,gCAAgC;AAEvC,OAAO,SAASC,8BAA8BC,MAM7C;IACC,OAAO;QACLX;QACAQ;QACAD;QACAD,uBAAuB,OAAOM,iBAC5B,MAAMN,sBAAsBM,gBAAgBD,OAAOE,OAAO;QAC5DrB;QACAsB,0BAA0BrB,+BAA+BkB,OAAOI,OAAO;QACvEC,8BAA8BrB,mCAAmCgB,OAAOI,OAAO;QAC/ElB;QACAC,oCAAoC,OAClCc,iBACG,MAAMd,mCAAmCc,gBAAgBD,OAAOE,OAAO;QAC5Ed;QACAR;QACA0B,6BAA6BvB,kCAAkC;YAC7DwB,OAAOP,OAAOO,KAAK;YACnBC,cAAcR,OAAOQ,YAAY;YACjCC,UAAUT,OAAOS,QAAQ;
|
|
1
|
+
{"version":3,"sources":["../../../src/temporal/activities/index.ts"],"sourcesContent":["import type {AgentInterModuleClient} from '@shipfox/api-agent-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 {\n activateJobListenerActivity,\n bulkSetStepStatuses,\n createCancelRunnerJobsActivity,\n createDrainListenerEventsActivity,\n createEnqueueJobExecutionForRunner,\n createReleaseLeaseActivity,\n evaluateJobActivationsActivity,\n failJobExecutionAsTimedOutActivity,\n failRunAsTimedOutActivity,\n loadRunAttemptDag,\n peekListenerBufferActivity,\n recordListenerFiringOutcomeActivity,\n resolveJobListenerActivity,\n resolveJobStatusFromJobExecutionsActivity,\n resolveLeaseExpiredJobExecutionActivity,\n setJobExecutionStatus,\n setJobStatus,\n setRunAttemptStatus,\n settleListenerJobExecutionActivity,\n} from './orchestration-activities.js';\n\nexport function createOrchestrationActivities(params: {\n agent: AgentInterModuleClient;\n integrations: IntegrationsModuleClient;\n projects: ProjectsModuleClient;\n runners: RunnersInterModuleClient;\n secrets: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'>;\n}) {\n return {\n loadRunAttemptDag,\n setRunAttemptStatus,\n setJobStatus,\n setJobExecutionStatus: async (activityParams: Parameters<typeof setJobExecutionStatus>[0]) =>\n await setJobExecutionStatus(activityParams, params.secrets),\n bulkSetStepStatuses,\n cancelRunnerJobsActivity: createCancelRunnerJobsActivity(params.runners),\n enqueueJobExecutionForRunner: createEnqueueJobExecutionForRunner(params.runners),\n evaluateJobActivationsActivity,\n failJobExecutionAsTimedOutActivity: async (\n activityParams: Parameters<typeof failJobExecutionAsTimedOutActivity>[0],\n ) => await failJobExecutionAsTimedOutActivity(activityParams, params.secrets),\n failRunAsTimedOutActivity,\n activateJobListenerActivity,\n drainListenerEventsActivity: createDrainListenerEventsActivity({\n agent: params.agent,\n integrations: params.integrations,\n projects: params.projects,\n secrets: params.secrets,\n }),\n peekListenerBufferActivity,\n resolveJobListenerActivity,\n settleListenerJobExecutionActivity,\n recordListenerFiringOutcomeActivity,\n resolveLeaseExpiredJobExecutionActivity: async (\n activityParams: Parameters<typeof resolveLeaseExpiredJobExecutionActivity>[0],\n ) => await resolveLeaseExpiredJobExecutionActivity(activityParams, params.secrets),\n resolveJobStatusFromJobExecutionsActivity,\n releaseLeaseActivity: createReleaseLeaseActivity(params.runners),\n };\n}\n"],"names":["activateJobListenerActivity","bulkSetStepStatuses","createCancelRunnerJobsActivity","createDrainListenerEventsActivity","createEnqueueJobExecutionForRunner","createReleaseLeaseActivity","evaluateJobActivationsActivity","failJobExecutionAsTimedOutActivity","failRunAsTimedOutActivity","loadRunAttemptDag","peekListenerBufferActivity","recordListenerFiringOutcomeActivity","resolveJobListenerActivity","resolveJobStatusFromJobExecutionsActivity","resolveLeaseExpiredJobExecutionActivity","setJobExecutionStatus","setJobStatus","setRunAttemptStatus","settleListenerJobExecutionActivity","createOrchestrationActivities","params","activityParams","secrets","cancelRunnerJobsActivity","runners","enqueueJobExecutionForRunner","drainListenerEventsActivity","agent","integrations","projects","releaseLeaseActivity"],"mappings":"AAKA,SACEA,2BAA2B,EAC3BC,mBAAmB,EACnBC,8BAA8B,EAC9BC,iCAAiC,EACjCC,kCAAkC,EAClCC,0BAA0B,EAC1BC,8BAA8B,EAC9BC,kCAAkC,EAClCC,yBAAyB,EACzBC,iBAAiB,EACjBC,0BAA0B,EAC1BC,mCAAmC,EACnCC,0BAA0B,EAC1BC,yCAAyC,EACzCC,uCAAuC,EACvCC,qBAAqB,EACrBC,YAAY,EACZC,mBAAmB,EACnBC,kCAAkC,QAC7B,gCAAgC;AAEvC,OAAO,SAASC,8BAA8BC,MAM7C;IACC,OAAO;QACLX;QACAQ;QACAD;QACAD,uBAAuB,OAAOM,iBAC5B,MAAMN,sBAAsBM,gBAAgBD,OAAOE,OAAO;QAC5DrB;QACAsB,0BAA0BrB,+BAA+BkB,OAAOI,OAAO;QACvEC,8BAA8BrB,mCAAmCgB,OAAOI,OAAO;QAC/ElB;QACAC,oCAAoC,OAClCc,iBACG,MAAMd,mCAAmCc,gBAAgBD,OAAOE,OAAO;QAC5Ed;QACAR;QACA0B,6BAA6BvB,kCAAkC;YAC7DwB,OAAOP,OAAOO,KAAK;YACnBC,cAAcR,OAAOQ,YAAY;YACjCC,UAAUT,OAAOS,QAAQ;YACzBP,SAASF,OAAOE,OAAO;QACzB;QACAZ;QACAE;QACAM;QACAP;QACAG,yCAAyC,OACvCO,iBACG,MAAMP,wCAAwCO,gBAAgBD,OAAOE,OAAO;QACjFT;QACAiB,sBAAsBzB,2BAA2Be,OAAOI,OAAO;IACjE;AACF"}
|
|
@@ -114,6 +114,7 @@ export declare function createDrainListenerEventsActivity(clients: {
|
|
|
114
114
|
agent: AgentInterModuleClient;
|
|
115
115
|
integrations?: IntegrationsModuleClient | undefined;
|
|
116
116
|
projects?: ProjectsModuleClient | undefined;
|
|
117
|
+
secrets: Pick<SecretsInterModuleClient, 'getVariablesByNamespace'>;
|
|
117
118
|
}): (params: {
|
|
118
119
|
jobId: string;
|
|
119
120
|
expectedSequence: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestration-activities.d.ts","sourceRoot":"","sources":["../../../src/temporal/activities/orchestration-activities.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"orchestration-activities.d.ts","sourceRoot":"","sources":["../../../src/temporal/activities/orchestration-activities.ts"],"names":[],"mappings":"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"}
|