@shipfox/api-runners 5.0.0 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +6 -6
- package/CHANGELOG.md +80 -0
- package/dist/config.d.ts +5 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +54 -7
- package/dist/config.js.map +1 -1
- package/dist/core/demand.d.ts +6 -6
- package/dist/core/demand.d.ts.map +1 -1
- package/dist/core/demand.js +10 -10
- package/dist/core/demand.js.map +1 -1
- package/dist/core/entities/ephemeral-registration-token.d.ts +1 -1
- package/dist/core/entities/ephemeral-registration-token.d.ts.map +1 -1
- package/dist/core/entities/ephemeral-registration-token.js.map +1 -1
- package/dist/core/entities/provisioner-capability-snapshot.d.ts +13 -0
- package/dist/core/entities/provisioner-capability-snapshot.d.ts.map +1 -0
- package/dist/core/entities/provisioner-capability-snapshot.js +3 -0
- package/dist/core/entities/provisioner-capability-snapshot.js.map +1 -0
- package/dist/core/entities/provisioner-token.d.ts +10 -2
- package/dist/core/entities/provisioner-token.d.ts.map +1 -1
- package/dist/core/entities/provisioner-token.js.map +1 -1
- package/dist/core/entities/{provisioned-runner.d.ts → runner-instance.d.ts} +7 -6
- package/dist/core/entities/runner-instance.d.ts.map +1 -0
- package/dist/core/entities/runner-instance.js +3 -0
- package/dist/core/entities/runner-instance.js.map +1 -0
- package/dist/core/entities/runner-session.d.ts +4 -2
- package/dist/core/entities/runner-session.d.ts.map +1 -1
- package/dist/core/entities/runner-session.js.map +1 -1
- package/dist/core/ephemeral-registration-tokens.d.ts +5 -5
- package/dist/core/ephemeral-registration-tokens.d.ts.map +1 -1
- package/dist/core/ephemeral-registration-tokens.js +12 -12
- package/dist/core/ephemeral-registration-tokens.js.map +1 -1
- package/dist/core/errors.d.ts +16 -4
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +22 -4
- package/dist/core/errors.js.map +1 -1
- package/dist/core/index.d.ts +9 -5
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +6 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/job-executions.d.ts +2 -0
- package/dist/core/job-executions.d.ts.map +1 -1
- package/dist/core/job-executions.js +1 -2
- package/dist/core/job-executions.js.map +1 -1
- package/dist/core/maintenance.d.ts +1 -1
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +5 -5
- package/dist/core/maintenance.js.map +1 -1
- package/dist/core/provisioner-capability-snapshots.d.ts +5 -0
- package/dist/core/provisioner-capability-snapshots.d.ts.map +1 -0
- package/dist/core/provisioner-capability-snapshots.js +10 -0
- package/dist/core/provisioner-capability-snapshots.js.map +1 -0
- package/dist/core/provisioner-tokens.d.ts +10 -0
- package/dist/core/provisioner-tokens.d.ts.map +1 -1
- package/dist/core/provisioner-tokens.js +23 -1
- package/dist/core/provisioner-tokens.js.map +1 -1
- package/dist/core/rate-limit.d.ts.map +1 -1
- package/dist/core/rate-limit.js +2 -7
- package/dist/core/rate-limit.js.map +1 -1
- package/dist/core/runner-activation.d.ts +13 -0
- package/dist/core/runner-activation.d.ts.map +1 -0
- package/dist/core/runner-activation.js +36 -0
- package/dist/core/runner-activation.js.map +1 -0
- package/dist/core/runner-assignments.d.ts +6 -0
- package/dist/core/runner-assignments.d.ts.map +1 -0
- package/dist/core/runner-assignments.js +6 -0
- package/dist/core/runner-assignments.js.map +1 -0
- package/dist/core/runner-control-sessions.d.ts +46 -0
- package/dist/core/runner-control-sessions.d.ts.map +1 -0
- package/dist/core/runner-control-sessions.js +121 -0
- package/dist/core/runner-control-sessions.js.map +1 -0
- package/dist/core/runner-instances.d.ts +72 -0
- package/dist/core/runner-instances.d.ts.map +1 -0
- package/dist/core/runner-instances.js +165 -0
- package/dist/core/runner-instances.js.map +1 -0
- package/dist/core/runner-sessions.d.ts +8 -2
- package/dist/core/runner-sessions.d.ts.map +1 -1
- package/dist/core/runner-sessions.js +8 -5
- package/dist/core/runner-sessions.js.map +1 -1
- package/dist/db/db.d.ts +2698 -1054
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +9 -2
- package/dist/db/db.js.map +1 -1
- package/dist/db/ephemeral-registration-tokens.d.ts +2 -2
- package/dist/db/ephemeral-registration-tokens.d.ts.map +1 -1
- package/dist/db/ephemeral-registration-tokens.js +21 -21
- package/dist/db/ephemeral-registration-tokens.js.map +1 -1
- package/dist/db/index.d.ts +7 -4
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +5 -2
- package/dist/db/index.js.map +1 -1
- package/dist/db/job-executions.d.ts +6 -6
- package/dist/db/job-executions.d.ts.map +1 -1
- package/dist/db/job-executions.js +20 -19
- package/dist/db/job-executions.js.map +1 -1
- package/dist/db/provisioner-capability-snapshots.d.ts +21 -0
- package/dist/db/provisioner-capability-snapshots.d.ts.map +1 -0
- package/dist/db/provisioner-capability-snapshots.js +57 -0
- package/dist/db/provisioner-capability-snapshots.js.map +1 -0
- package/dist/db/provisioner-tokens.d.ts +7 -2
- package/dist/db/provisioner-tokens.d.ts.map +1 -1
- package/dist/db/provisioner-tokens.js +59 -10
- package/dist/db/provisioner-tokens.js.map +1 -1
- package/dist/db/reservations.d.ts +18 -0
- package/dist/db/reservations.d.ts.map +1 -1
- package/dist/db/reservations.js +88 -1
- package/dist/db/reservations.js.map +1 -1
- package/dist/db/runner-assignments.d.ts +7 -0
- package/dist/db/runner-assignments.d.ts.map +1 -0
- package/dist/db/runner-assignments.js +55 -0
- package/dist/db/runner-assignments.js.map +1 -0
- package/dist/db/runner-instances.d.ts +84 -0
- package/dist/db/runner-instances.d.ts.map +1 -0
- package/dist/db/runner-instances.js +497 -0
- package/dist/db/runner-instances.js.map +1 -0
- package/dist/db/runner-sessions.d.ts +5 -0
- package/dist/db/runner-sessions.d.ts.map +1 -1
- package/dist/db/runner-sessions.js +48 -2
- package/dist/db/runner-sessions.js.map +1 -1
- package/dist/db/schema/ephemeral-registration-tokens.d.ts +2 -2
- package/dist/db/schema/ephemeral-registration-tokens.js +3 -3
- package/dist/db/schema/ephemeral-registration-tokens.js.map +1 -1
- package/dist/db/schema/provisioner-capability-snapshots.d.ts +207 -0
- package/dist/db/schema/provisioner-capability-snapshots.d.ts.map +1 -0
- package/dist/db/schema/provisioner-capability-snapshots.js +38 -0
- package/dist/db/schema/provisioner-capability-snapshots.js.map +1 -0
- package/dist/db/schema/provisioner-tokens.d.ts +19 -1
- package/dist/db/schema/provisioner-tokens.d.ts.map +1 -1
- package/dist/db/schema/provisioner-tokens.js +29 -3
- package/dist/db/schema/provisioner-tokens.js.map +1 -1
- package/dist/db/schema/runner-activation-tokens.d.ts +161 -0
- package/dist/db/schema/runner-activation-tokens.d.ts.map +1 -0
- package/dist/db/schema/runner-activation-tokens.js +27 -0
- package/dist/db/schema/runner-activation-tokens.js.map +1 -0
- package/dist/db/schema/runner-control-sessions.d.ts +338 -0
- package/dist/db/schema/runner-control-sessions.d.ts.map +1 -0
- package/dist/db/schema/runner-control-sessions.js +52 -0
- package/dist/db/schema/runner-control-sessions.js.map +1 -0
- package/dist/db/schema/{provisioned-runners.d.ts → runner-instances.d.ts} +105 -34
- package/dist/db/schema/runner-instances.d.ts.map +1 -0
- package/dist/db/schema/{provisioned-runners.js → runner-instances.js} +23 -14
- package/dist/db/schema/runner-instances.js.map +1 -0
- package/dist/db/schema/runner-sessions.d.ts +39 -5
- package/dist/db/schema/runner-sessions.d.ts.map +1 -1
- package/dist/db/schema/runner-sessions.js +13 -6
- package/dist/db/schema/runner-sessions.js.map +1 -1
- package/dist/db/schema/running-job-executions.d.ts +2 -2
- package/dist/db/schema/running-job-executions.js +4 -4
- package/dist/db/schema/running-job-executions.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -39
- package/dist/index.js.map +1 -1
- package/dist/installation-provisioning.d.ts +14 -0
- package/dist/installation-provisioning.d.ts.map +1 -0
- package/dist/installation-provisioning.js +7 -0
- package/dist/installation-provisioning.js.map +1 -0
- package/dist/metrics/index.d.ts +1 -1
- package/dist/metrics/index.d.ts.map +1 -1
- package/dist/metrics/index.js +1 -1
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/instance.d.ts +11 -7
- package/dist/metrics/instance.d.ts.map +1 -1
- package/dist/metrics/instance.js +13 -7
- package/dist/metrics/instance.js.map +1 -1
- package/dist/presentation/auth/index.d.ts +1 -0
- package/dist/presentation/auth/index.d.ts.map +1 -1
- package/dist/presentation/auth/index.js +1 -0
- package/dist/presentation/auth/index.js.map +1 -1
- package/dist/presentation/auth/provisioner-token-auth.d.ts.map +1 -1
- package/dist/presentation/auth/provisioner-token-auth.js +5 -1
- package/dist/presentation/auth/provisioner-token-auth.js.map +1 -1
- package/dist/presentation/auth/runner-control-session-auth.d.ts +4 -0
- package/dist/presentation/auth/runner-control-session-auth.d.ts.map +1 -0
- package/dist/presentation/auth/runner-control-session-auth.js +29 -0
- package/dist/presentation/auth/runner-control-session-auth.js.map +1 -0
- package/dist/presentation/auth/runner-registration-token-auth.d.ts +5 -1
- package/dist/presentation/auth/runner-registration-token-auth.d.ts.map +1 -1
- package/dist/presentation/auth/runner-registration-token-auth.js +21 -1
- package/dist/presentation/auth/runner-registration-token-auth.js.map +1 -1
- package/dist/presentation/dto/index.d.ts +1 -2
- package/dist/presentation/dto/index.d.ts.map +1 -1
- package/dist/presentation/dto/index.js +1 -2
- package/dist/presentation/dto/index.js.map +1 -1
- package/dist/presentation/dto/poll-demand.d.ts.map +1 -1
- package/dist/presentation/dto/poll-demand.js +7 -1
- package/dist/presentation/dto/poll-demand.js.map +1 -1
- package/dist/presentation/dto/provisioner-token.d.ts +1 -0
- package/dist/presentation/dto/provisioner-token.d.ts.map +1 -1
- package/dist/presentation/dto/provisioner-token.js +5 -1
- package/dist/presentation/dto/provisioner-token.js.map +1 -1
- package/dist/presentation/dto/{provisioned-runners.d.ts → runner-instances.d.ts} +9 -9
- package/dist/presentation/dto/runner-instances.d.ts.map +1 -0
- package/dist/presentation/dto/{provisioned-runners.js → runner-instances.js} +6 -6
- package/dist/presentation/dto/runner-instances.js.map +1 -0
- package/dist/presentation/index.d.ts +2 -2
- package/dist/presentation/index.d.ts.map +1 -1
- package/dist/presentation/index.js +2 -2
- package/dist/presentation/index.js.map +1 -1
- package/dist/presentation/inter-module.d.ts +5 -0
- package/dist/presentation/inter-module.d.ts.map +1 -0
- package/dist/presentation/inter-module.js +43 -0
- package/dist/presentation/inter-module.js.map +1 -0
- package/dist/presentation/routes/assign-runner-instances.d.ts +2 -0
- package/dist/presentation/routes/assign-runner-instances.d.ts.map +1 -0
- package/dist/presentation/routes/assign-runner-instances.js +40 -0
- package/dist/presentation/routes/assign-runner-instances.js.map +1 -0
- package/dist/presentation/routes/get-provisioner-me.d.ts.map +1 -1
- package/dist/presentation/routes/get-provisioner-me.js +5 -1
- package/dist/presentation/routes/get-provisioner-me.js.map +1 -1
- package/dist/presentation/routes/heartbeat.d.ts +2 -1
- package/dist/presentation/routes/heartbeat.d.ts.map +1 -1
- package/dist/presentation/routes/heartbeat.js +60 -50
- package/dist/presentation/routes/heartbeat.js.map +1 -1
- package/dist/presentation/routes/index.d.ts +3 -1
- package/dist/presentation/routes/index.d.ts.map +1 -1
- package/dist/presentation/routes/index.js +80 -51
- package/dist/presentation/routes/index.js.map +1 -1
- package/dist/presentation/routes/poll-demand.d.ts +2 -0
- package/dist/presentation/routes/poll-demand.d.ts.map +1 -1
- package/dist/presentation/routes/poll-demand.js +86 -45
- package/dist/presentation/routes/poll-demand.js.map +1 -1
- package/dist/presentation/routes/reconcile-runner-instances.d.ts +2 -0
- package/dist/presentation/routes/reconcile-runner-instances.d.ts.map +1 -0
- package/dist/presentation/routes/reconcile-runner-instances.js +27 -0
- package/dist/presentation/routes/reconcile-runner-instances.js.map +1 -0
- package/dist/presentation/routes/register.d.ts +2 -1
- package/dist/presentation/routes/register.d.ts.map +1 -1
- package/dist/presentation/routes/register.js +55 -52
- package/dist/presentation/routes/register.js.map +1 -1
- package/dist/presentation/routes/report-runner-instances.d.ts +2 -0
- package/dist/presentation/routes/report-runner-instances.d.ts.map +1 -0
- package/dist/presentation/routes/report-runner-instances.js +37 -0
- package/dist/presentation/routes/report-runner-instances.js.map +1 -0
- package/dist/presentation/routes/request-job.d.ts +2 -1
- package/dist/presentation/routes/request-job.d.ts.map +1 -1
- package/dist/presentation/routes/request-job.js +39 -36
- package/dist/presentation/routes/request-job.js.map +1 -1
- package/dist/presentation/routes/runner-enrollment.d.ts +8 -0
- package/dist/presentation/routes/runner-enrollment.d.ts.map +1 -0
- package/dist/presentation/routes/runner-enrollment.js +212 -0
- package/dist/presentation/routes/runner-enrollment.js.map +1 -0
- package/dist/temporal/activities/index.d.ts +2 -2
- package/dist/temporal/activities/index.d.ts.map +1 -1
- package/dist/temporal/activities/index.js +2 -2
- package/dist/temporal/activities/index.js.map +1 -1
- package/dist/temporal/activities/maintenance-activities.d.ts +1 -1
- package/dist/temporal/activities/maintenance-activities.d.ts.map +1 -1
- package/dist/temporal/activities/maintenance-activities.js +3 -3
- package/dist/temporal/activities/maintenance-activities.js.map +1 -1
- package/dist/temporal/workflows/index.bundle.js +3 -3
- package/dist/temporal/workflows/stuck-job-detector.js +2 -2
- package/dist/temporal/workflows/stuck-job-detector.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/drizzle/0000_initial.sql +91 -24
- package/drizzle/meta/0000_snapshot.json +392 -63
- package/package.json +21 -16
- package/src/config.test.ts +0 -26
- package/src/config.ts +48 -7
- package/src/core/demand.test.ts +29 -29
- package/src/core/demand.ts +22 -22
- package/src/core/entities/ephemeral-registration-token.ts +1 -1
- package/src/core/entities/provisioner-capability-snapshot.ts +12 -0
- package/src/core/entities/provisioner-token.ts +8 -2
- package/src/core/entities/{provisioned-runner.ts → runner-instance.ts} +6 -5
- package/src/core/entities/runner-session.ts +4 -2
- package/src/core/ephemeral-registration-tokens.test.ts +11 -11
- package/src/core/ephemeral-registration-tokens.ts +18 -20
- package/src/core/errors.ts +23 -4
- package/src/core/index.ts +37 -22
- package/src/core/job-executions.ts +3 -2
- package/src/core/maintenance.test.ts +13 -17
- package/src/core/maintenance.ts +5 -5
- package/src/core/provisioner-capability-snapshots.test.ts +35 -0
- package/src/core/provisioner-capability-snapshots.ts +12 -0
- package/src/core/provisioner-tokens.test.ts +20 -0
- package/src/core/provisioner-tokens.ts +33 -0
- package/src/core/rate-limit.test.ts +11 -27
- package/src/core/rate-limit.ts +3 -11
- package/src/core/runner-activation.ts +72 -0
- package/src/core/runner-assignments.ts +9 -0
- package/src/core/runner-control-sessions.ts +190 -0
- package/src/core/{provisioned-runners.test.ts → runner-instances.test.ts} +24 -24
- package/src/core/runner-instances.ts +301 -0
- package/src/core/runner-sessions.test.ts +112 -22
- package/src/core/runner-sessions.ts +25 -14
- package/src/db/db.ts +9 -2
- package/src/db/ephemeral-registration-tokens.test.ts +9 -9
- package/src/db/ephemeral-registration-tokens.ts +26 -26
- package/src/db/index.ts +30 -21
- package/src/db/job-executions.test.ts +13 -11
- package/src/db/job-executions.ts +33 -27
- package/src/db/provisioner-capability-snapshots.test.ts +175 -0
- package/src/db/provisioner-capability-snapshots.ts +130 -0
- package/src/db/provisioner-tokens.test.ts +139 -2
- package/src/db/provisioner-tokens.ts +123 -15
- package/src/db/reservations.test.ts +49 -0
- package/src/db/reservations.ts +146 -1
- package/src/db/runner-assignments.test.ts +163 -0
- package/src/db/runner-assignments.ts +115 -0
- package/src/db/{provisioned-runners.test.ts → runner-instances.test.ts} +442 -353
- package/src/db/runner-instances.ts +922 -0
- package/src/db/runner-sessions.test.ts +19 -6
- package/src/db/runner-sessions.ts +78 -2
- package/src/db/schema/ephemeral-registration-tokens.ts +4 -4
- package/src/db/schema/provisioner-capability-snapshots.ts +46 -0
- package/src/db/schema/provisioner-tokens.ts +33 -2
- package/src/db/schema/runner-activation-tokens.ts +22 -0
- package/src/db/schema/runner-control-sessions.ts +46 -0
- package/src/db/schema/{provisioned-runners.ts → runner-instances.ts} +28 -27
- package/src/db/schema/runner-sessions.ts +11 -7
- package/src/db/schema/running-job-executions.ts +5 -5
- package/src/index.test.ts +26 -0
- package/src/index.ts +38 -27
- package/src/installation-provisioning.ts +14 -0
- package/src/metrics/index.ts +5 -5
- package/src/metrics/instance.ts +25 -14
- package/src/presentation/auth/index.ts +4 -0
- package/src/presentation/auth/provisioner-token-auth.ts +8 -4
- package/src/presentation/auth/runner-control-session-auth.ts +31 -0
- package/src/presentation/auth/runner-registration-token-auth.ts +39 -3
- package/src/presentation/dto/index.ts +4 -8
- package/src/presentation/dto/poll-demand.ts +3 -1
- package/src/presentation/dto/provisioner-token.ts +5 -0
- package/src/presentation/dto/{provisioned-runners.ts → runner-instances.ts} +13 -15
- package/src/presentation/index.ts +2 -1
- package/src/presentation/inter-module.test.ts +15 -0
- package/src/presentation/inter-module.ts +53 -0
- package/src/presentation/routes/assign-runner-instances.ts +49 -0
- package/src/presentation/routes/get-provisioner-me.ts +3 -4
- package/src/presentation/routes/heartbeat.test.ts +4 -3
- package/src/presentation/routes/heartbeat.ts +67 -64
- package/src/presentation/routes/index.ts +91 -44
- package/src/presentation/routes/list-active-runners.test.ts +23 -23
- package/src/presentation/routes/manual-registration-tokens.test.ts +4 -3
- package/src/presentation/routes/poll-demand-release.test.ts +4 -4
- package/src/presentation/routes/poll-demand.test.ts +161 -22
- package/src/presentation/routes/poll-demand.ts +105 -45
- package/src/presentation/routes/provisioner-me.test.ts +37 -3
- package/src/presentation/routes/{reconcile-provisioned-runners.test.ts → reconcile-runner-instances.test.ts} +66 -61
- package/src/presentation/routes/reconcile-runner-instances.ts +30 -0
- package/src/presentation/routes/register.test.ts +9 -5
- package/src/presentation/routes/register.ts +61 -57
- package/src/presentation/routes/{report-provisioned-runners.test.ts → report-runner-instances.test.ts} +28 -28
- package/src/presentation/routes/{report-provisioned-runners.ts → report-runner-instances.ts} +14 -14
- package/src/presentation/routes/request-job.test.ts +5 -3
- package/src/presentation/routes/request-job.ts +41 -37
- package/src/presentation/routes/runner-enrollment.test.ts +319 -0
- package/src/presentation/routes/runner-enrollment.ts +196 -0
- package/src/temporal/activities/index.ts +2 -2
- package/src/temporal/activities/maintenance-activities.test.ts +7 -7
- package/src/temporal/activities/maintenance-activities.ts +3 -3
- package/src/temporal/workflows/stuck-job-detector.test.ts +3 -3
- package/src/temporal/workflows/stuck-job-detector.ts +2 -2
- package/test/env.ts +1 -3
- package/test/factories/ephemeral-registration-token.ts +2 -2
- package/test/factories/provisioner-token.ts +3 -1
- package/test/factories/runner-instance.ts +57 -0
- package/test/factories/runner-session.ts +3 -1
- package/test/fixtures/auth-inter-module.ts +30 -0
- package/test/globalSetup.ts +4 -1
- package/test/index.ts +2 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/dist/core/entities/provisioned-runner.d.ts.map +0 -1
- package/dist/core/entities/provisioned-runner.js +0 -3
- package/dist/core/entities/provisioned-runner.js.map +0 -1
- package/dist/core/provisioned-runners.d.ts +0 -67
- package/dist/core/provisioned-runners.d.ts.map +0 -1
- package/dist/core/provisioned-runners.js +0 -162
- package/dist/core/provisioned-runners.js.map +0 -1
- package/dist/db/provisioned-runners.d.ts +0 -79
- package/dist/db/provisioned-runners.d.ts.map +0 -1
- package/dist/db/provisioned-runners.js +0 -466
- package/dist/db/provisioned-runners.js.map +0 -1
- package/dist/db/schema/provisioned-runners.d.ts.map +0 -1
- package/dist/db/schema/provisioned-runners.js.map +0 -1
- package/dist/presentation/dto/mint-registration-tokens.d.ts +0 -5
- package/dist/presentation/dto/mint-registration-tokens.d.ts.map +0 -1
- package/dist/presentation/dto/mint-registration-tokens.js +0 -19
- package/dist/presentation/dto/mint-registration-tokens.js.map +0 -1
- package/dist/presentation/dto/provisioned-runners.d.ts.map +0 -1
- package/dist/presentation/dto/provisioned-runners.js.map +0 -1
- package/dist/presentation/routes/mint-registration-tokens.d.ts +0 -2
- package/dist/presentation/routes/mint-registration-tokens.d.ts.map +0 -1
- package/dist/presentation/routes/mint-registration-tokens.js +0 -74
- package/dist/presentation/routes/mint-registration-tokens.js.map +0 -1
- package/dist/presentation/routes/reconcile-provisioned-runners.d.ts +0 -2
- package/dist/presentation/routes/reconcile-provisioned-runners.d.ts.map +0 -1
- package/dist/presentation/routes/reconcile-provisioned-runners.js +0 -27
- package/dist/presentation/routes/reconcile-provisioned-runners.js.map +0 -1
- package/dist/presentation/routes/report-provisioned-runners.d.ts +0 -2
- package/dist/presentation/routes/report-provisioned-runners.d.ts.map +0 -1
- package/dist/presentation/routes/report-provisioned-runners.js +0 -37
- package/dist/presentation/routes/report-provisioned-runners.js.map +0 -1
- package/src/core/provisioned-runners.ts +0 -301
- package/src/db/provisioned-runners.ts +0 -886
- package/src/presentation/dto/mint-registration-tokens.ts +0 -35
- package/src/presentation/routes/mint-registration-tokens.test.ts +0 -453
- package/src/presentation/routes/mint-registration-tokens.ts +0 -82
- package/src/presentation/routes/reconcile-provisioned-runners.ts +0 -30
- package/test/factories/provisioned-runner.ts +0 -78
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/db/schema/running-job-executions.ts"],"sourcesContent":["import {uuidv7PrimaryKey} from '@shipfox/node-drizzle';\nimport {sql} from 'drizzle-orm';\nimport {check, index, text, timestamp, uuid} from 'drizzle-orm/pg-core';\nimport {pgTable} from './common.js';\nimport {runnerSessions} from './runner-sessions.js';\n\nexport const runningJobExecutions = pgTable(\n 'running_jobs',\n {\n id: uuidv7PrimaryKey(),\n workspaceId: uuid('workspace_id').notNull(),\n workflowRunId: uuid('workflow_run_id').notNull(),\n workflowRunAttemptId: uuid('workflow_run_attempt_id').notNull(),\n jobId: uuid('job_id').notNull(),\n jobExecutionId: uuid('job_execution_id').notNull().unique(),\n projectId: uuid('project_id').notNull(),\n runnerSessionId: uuid('runner_session_id')\n .notNull()\n .references(() => runnerSessions.id),\n provisionerId: uuid('provisioner_id'),\n
|
|
1
|
+
{"version":3,"sources":["../../../src/db/schema/running-job-executions.ts"],"sourcesContent":["import {uuidv7PrimaryKey} from '@shipfox/node-drizzle';\nimport {sql} from 'drizzle-orm';\nimport {check, index, text, timestamp, uuid} from 'drizzle-orm/pg-core';\nimport {pgTable} from './common.js';\nimport {runnerSessions} from './runner-sessions.js';\n\nexport const runningJobExecutions = pgTable(\n 'running_jobs',\n {\n id: uuidv7PrimaryKey(),\n workspaceId: uuid('workspace_id').notNull(),\n workflowRunId: uuid('workflow_run_id').notNull(),\n workflowRunAttemptId: uuid('workflow_run_attempt_id').notNull(),\n jobId: uuid('job_id').notNull(),\n jobExecutionId: uuid('job_execution_id').notNull().unique(),\n projectId: uuid('project_id').notNull(),\n runnerSessionId: uuid('runner_session_id')\n .notNull()\n .references(() => runnerSessions.id),\n provisionerId: uuid('provisioner_id'),\n providerRunnerId: text('provider_runner_id'),\n requiredLabels: text('required_labels').array().notNull(),\n runnerLabels: text('runner_labels').array().notNull(),\n startedAt: timestamp('started_at', {withTimezone: true}).notNull().defaultNow(),\n firstHeartbeatAt: timestamp('first_heartbeat_at', {withTimezone: true}),\n lastHeartbeatAt: timestamp('last_heartbeat_at', {withTimezone: true}).notNull().defaultNow(),\n cancellationRequestedAt: timestamp('cancellation_requested_at', {withTimezone: true}),\n },\n (table) => [\n index('runners_running_jobs_no_first_heartbeat_started_idx')\n .on(table.startedAt)\n .where(sql`\"first_heartbeat_at\" IS NULL`),\n index('runners_running_jobs_last_heartbeat_at_idx').on(table.lastHeartbeatAt),\n index('runners_running_jobs_provider_runner_started_idx')\n .on(table.workspaceId, table.provisionerId, table.providerRunnerId, table.startedAt.desc())\n .where(sql`\"provisioner_id\" IS NOT NULL`),\n index('runners_running_jobs_cancellation_requested_idx')\n .on(table.workspaceId, table.provisionerId, table.providerRunnerId)\n .where(sql`\"cancellation_requested_at\" IS NOT NULL`),\n index('runners_running_jobs_job_id_idx').on(table.jobId),\n index('runners_running_jobs_runner_session_id_idx').on(table.runnerSessionId),\n check(\n 'runners_running_jobs_link_ck',\n sql`(${table.provisionerId} IS NULL) = (${table.providerRunnerId} IS NULL)`,\n ),\n ],\n);\n\nexport type RunningJobExecutionDb = typeof runningJobExecutions.$inferSelect;\nexport type RunningJobExecutionInsertDb = typeof runningJobExecutions.$inferInsert;\n"],"names":["uuidv7PrimaryKey","sql","check","index","text","timestamp","uuid","pgTable","runnerSessions","runningJobExecutions","id","workspaceId","notNull","workflowRunId","workflowRunAttemptId","jobId","jobExecutionId","unique","projectId","runnerSessionId","references","provisionerId","providerRunnerId","requiredLabels","array","runnerLabels","startedAt","withTimezone","defaultNow","firstHeartbeatAt","lastHeartbeatAt","cancellationRequestedAt","table","on","where","desc"],"mappings":"AAAA,SAAQA,gBAAgB,QAAO,wBAAwB;AACvD,SAAQC,GAAG,QAAO,cAAc;AAChC,SAAQC,KAAK,EAAEC,KAAK,EAAEC,IAAI,EAAEC,SAAS,EAAEC,IAAI,QAAO,sBAAsB;AACxE,SAAQC,OAAO,QAAO,cAAc;AACpC,SAAQC,cAAc,QAAO,uBAAuB;AAEpD,OAAO,MAAMC,uBAAuBF,QAClC,gBACA;IACEG,IAAIV;IACJW,aAAaL,KAAK,gBAAgBM,OAAO;IACzCC,eAAeP,KAAK,mBAAmBM,OAAO;IAC9CE,sBAAsBR,KAAK,2BAA2BM,OAAO;IAC7DG,OAAOT,KAAK,UAAUM,OAAO;IAC7BI,gBAAgBV,KAAK,oBAAoBM,OAAO,GAAGK,MAAM;IACzDC,WAAWZ,KAAK,cAAcM,OAAO;IACrCO,iBAAiBb,KAAK,qBACnBM,OAAO,GACPQ,UAAU,CAAC,IAAMZ,eAAeE,EAAE;IACrCW,eAAef,KAAK;IACpBgB,kBAAkBlB,KAAK;IACvBmB,gBAAgBnB,KAAK,mBAAmBoB,KAAK,GAAGZ,OAAO;IACvDa,cAAcrB,KAAK,iBAAiBoB,KAAK,GAAGZ,OAAO;IACnDc,WAAWrB,UAAU,cAAc;QAACsB,cAAc;IAAI,GAAGf,OAAO,GAAGgB,UAAU;IAC7EC,kBAAkBxB,UAAU,sBAAsB;QAACsB,cAAc;IAAI;IACrEG,iBAAiBzB,UAAU,qBAAqB;QAACsB,cAAc;IAAI,GAAGf,OAAO,GAAGgB,UAAU;IAC1FG,yBAAyB1B,UAAU,6BAA6B;QAACsB,cAAc;IAAI;AACrF,GACA,CAACK,QAAU;QACT7B,MAAM,uDACH8B,EAAE,CAACD,MAAMN,SAAS,EAClBQ,KAAK,CAACjC,GAAG,CAAC,4BAA4B,CAAC;QAC1CE,MAAM,8CAA8C8B,EAAE,CAACD,MAAMF,eAAe;QAC5E3B,MAAM,oDACH8B,EAAE,CAACD,MAAMrB,WAAW,EAAEqB,MAAMX,aAAa,EAAEW,MAAMV,gBAAgB,EAAEU,MAAMN,SAAS,CAACS,IAAI,IACvFD,KAAK,CAACjC,GAAG,CAAC,4BAA4B,CAAC;QAC1CE,MAAM,mDACH8B,EAAE,CAACD,MAAMrB,WAAW,EAAEqB,MAAMX,aAAa,EAAEW,MAAMV,gBAAgB,EACjEY,KAAK,CAACjC,GAAG,CAAC,uCAAuC,CAAC;QACrDE,MAAM,mCAAmC8B,EAAE,CAACD,MAAMjB,KAAK;QACvDZ,MAAM,8CAA8C8B,EAAE,CAACD,MAAMb,eAAe;QAC5EjB,MACE,gCACAD,GAAG,CAAC,CAAC,EAAE+B,MAAMX,aAAa,CAAC,aAAa,EAAEW,MAAMV,gBAAgB,CAAC,SAAS,CAAC;KAE9E,EACD"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import type { AuthInterModuleClient } from '@shipfox/api-auth-dto/inter-module';
|
|
1
2
|
import { type ShipfoxModule } from '@shipfox/node-module';
|
|
2
|
-
|
|
3
|
+
import type { CreateRunnersModuleOptions } from '#installation-provisioning.js';
|
|
3
4
|
export { type EffectiveRunnerToolCapabilitiesResult, getEffectiveRunnerToolCapabilities, unadvertisedRunnerTools, } from '#core/runner-tool-capabilities.js';
|
|
4
5
|
export { cancelRunnerJobs, type EnqueueJobExecutionParams, enqueueJobExecution, isJobLeaseActive, releaseJobExecution, } from '#db/index.js';
|
|
5
|
-
export
|
|
6
|
+
export type { CreateRunnersModuleOptions, InstallationProvisioningPolicy, } from '#installation-provisioning.js';
|
|
7
|
+
export declare function createRunnersModule({ auth, ...options }: CreateRunnersModuleOptions & {
|
|
8
|
+
auth: AuthInterModuleClient;
|
|
9
|
+
}): ShipfoxModule;
|
|
6
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,oCAAoC,CAAC;AAM9E,OAAO,EAAC,KAAK,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAE3E,OAAO,KAAK,EAAC,0BAA0B,EAAC,MAAM,+BAA+B,CAAC;AAa9E,OAAO,EACL,KAAK,qCAAqC,EAC1C,kCAAkC,EAClC,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,KAAK,yBAAyB,EAC9B,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,+BAA+B,CAAC;AAOvC,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,GAAG,OAAO,EACX,EAAE,0BAA0B,GAAG;IAAC,IAAI,EAAE,qBAAqB,CAAA;CAAC,GAAG,aAAa,CAyB5E"}
|
package/dist/index.js
CHANGED
|
@@ -5,52 +5,58 @@ import { WORKFLOWS_JOB_EXECUTION_TIMED_OUT } from '@shipfox/api-workflows-dto';
|
|
|
5
5
|
import { subscriberFactory } from '@shipfox/node-module';
|
|
6
6
|
import { db, migrationsPath, runnersOutbox } from '#db/index.js';
|
|
7
7
|
import { registerRunnersServiceMetrics } from '#metrics/index.js';
|
|
8
|
-
import { createProvisionerTokenAuthMethod, createRunnerRegistrationTokenAuthMethod,
|
|
8
|
+
import { createProvisionerTokenAuthMethod, createRunnerControlSessionAuthMethod, createRunnerRegistrationTokenAuthMethod, createRunnerRoutes, onWorkflowsJobExecutionTimedOut } from '#presentation/index.js';
|
|
9
|
+
import { createRunnersInterModulePresentation } from '#presentation/inter-module.js';
|
|
9
10
|
import { createRunnersMaintenanceActivities } from '#temporal/activities/index.js';
|
|
10
11
|
import { RUNNERS_MAINTENANCE_TASK_QUEUE } from '#temporal/constants.js';
|
|
11
|
-
export { mintEphemeralRegistrationToken, mintEphemeralRegistrationTokensBatch } from '#core/ephemeral-registration-tokens.js';
|
|
12
12
|
export { getEffectiveRunnerToolCapabilities, unadvertisedRunnerTools } from '#core/runner-tool-capabilities.js';
|
|
13
13
|
export { cancelRunnerJobs, enqueueJobExecution, isJobLeaseActive, releaseJobExecution } from '#db/index.js';
|
|
14
14
|
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
15
15
|
const workflowsPath = resolve(packageRoot, 'dist/temporal/workflows/index.js');
|
|
16
16
|
const subscriber = subscriberFactory();
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
migrationsPath
|
|
22
|
-
},
|
|
23
|
-
auth: [
|
|
24
|
-
createRunnerRegistrationTokenAuthMethod(),
|
|
25
|
-
createProvisionerTokenAuthMethod()
|
|
26
|
-
],
|
|
27
|
-
routes,
|
|
28
|
-
metrics: registerRunnersServiceMetrics,
|
|
29
|
-
publishers: [
|
|
30
|
-
{
|
|
31
|
-
name: 'runners',
|
|
32
|
-
table: runnersOutbox,
|
|
17
|
+
export function createRunnersModule({ auth, ...options }) {
|
|
18
|
+
return {
|
|
19
|
+
name: 'runners',
|
|
20
|
+
database: {
|
|
33
21
|
db,
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
22
|
+
migrationsPath
|
|
23
|
+
},
|
|
24
|
+
auth: [
|
|
25
|
+
createRunnerRegistrationTokenAuthMethod(),
|
|
26
|
+
createRunnerControlSessionAuthMethod(),
|
|
27
|
+
createProvisionerTokenAuthMethod()
|
|
28
|
+
],
|
|
29
|
+
routes: createRunnerRoutes(auth, options),
|
|
30
|
+
metrics: registerRunnersServiceMetrics,
|
|
31
|
+
publishers: [
|
|
32
|
+
{
|
|
33
|
+
name: 'runners',
|
|
34
|
+
table: runnersOutbox,
|
|
35
|
+
db,
|
|
36
|
+
eventSchemas: runnersEventSchemas
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
subscribers: [
|
|
40
|
+
subscriber(WORKFLOWS_JOB_EXECUTION_TIMED_OUT, onWorkflowsJobExecutionTimedOut)
|
|
41
|
+
],
|
|
42
|
+
workers: [
|
|
43
|
+
{
|
|
44
|
+
taskQueue: RUNNERS_MAINTENANCE_TASK_QUEUE,
|
|
45
|
+
workflowsPath,
|
|
46
|
+
activities: createRunnersMaintenanceActivities,
|
|
47
|
+
workflows: [
|
|
48
|
+
{
|
|
49
|
+
name: 'stuckJobDetector',
|
|
50
|
+
id: 'stuck-job-detector',
|
|
51
|
+
cronSchedule: '* * * * *'
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
interModulePresentations: [
|
|
57
|
+
createRunnersInterModulePresentation()
|
|
58
|
+
]
|
|
59
|
+
};
|
|
60
|
+
}
|
|
55
61
|
|
|
56
62
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport {runnersEventSchemas} from '@shipfox/api-runners-dto';\nimport {\n WORKFLOWS_JOB_EXECUTION_TIMED_OUT,\n type WorkflowsEventMapDto,\n} from '@shipfox/api-workflows-dto';\nimport {type ShipfoxModule, subscriberFactory} from '@shipfox/node-module';\nimport {db, migrationsPath, runnersOutbox} from '#db/index.js';\nimport {registerRunnersServiceMetrics} from '#metrics/index.js';\nimport {\n createProvisionerTokenAuthMethod,\n createRunnerRegistrationTokenAuthMethod,\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport type {AuthInterModuleClient} from '@shipfox/api-auth-dto/inter-module';\nimport {runnersEventSchemas} from '@shipfox/api-runners-dto';\nimport {\n WORKFLOWS_JOB_EXECUTION_TIMED_OUT,\n type WorkflowsEventMapDto,\n} from '@shipfox/api-workflows-dto';\nimport {type ShipfoxModule, subscriberFactory} from '@shipfox/node-module';\nimport {db, migrationsPath, runnersOutbox} from '#db/index.js';\nimport type {CreateRunnersModuleOptions} from '#installation-provisioning.js';\nimport {registerRunnersServiceMetrics} from '#metrics/index.js';\nimport {\n createProvisionerTokenAuthMethod,\n createRunnerControlSessionAuthMethod,\n createRunnerRegistrationTokenAuthMethod,\n createRunnerRoutes,\n onWorkflowsJobExecutionTimedOut,\n} from '#presentation/index.js';\nimport {createRunnersInterModulePresentation} from '#presentation/inter-module.js';\nimport {createRunnersMaintenanceActivities} from '#temporal/activities/index.js';\nimport {RUNNERS_MAINTENANCE_TASK_QUEUE} from '#temporal/constants.js';\n\nexport {\n type EffectiveRunnerToolCapabilitiesResult,\n getEffectiveRunnerToolCapabilities,\n unadvertisedRunnerTools,\n} from '#core/runner-tool-capabilities.js';\nexport {\n cancelRunnerJobs,\n type EnqueueJobExecutionParams,\n enqueueJobExecution,\n isJobLeaseActive,\n releaseJobExecution,\n} from '#db/index.js';\nexport type {\n CreateRunnersModuleOptions,\n InstallationProvisioningPolicy,\n} from '#installation-provisioning.js';\n\nconst packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');\nconst workflowsPath = resolve(packageRoot, 'dist/temporal/workflows/index.js');\n\nconst subscriber = subscriberFactory<WorkflowsEventMapDto>();\n\nexport function createRunnersModule({\n auth,\n ...options\n}: CreateRunnersModuleOptions & {auth: AuthInterModuleClient}): ShipfoxModule {\n return {\n name: 'runners',\n database: {db, migrationsPath},\n auth: [\n createRunnerRegistrationTokenAuthMethod(),\n createRunnerControlSessionAuthMethod(),\n createProvisionerTokenAuthMethod(),\n ],\n routes: createRunnerRoutes(auth, options),\n metrics: registerRunnersServiceMetrics,\n publishers: [{name: 'runners', table: runnersOutbox, db, eventSchemas: runnersEventSchemas}],\n subscribers: [subscriber(WORKFLOWS_JOB_EXECUTION_TIMED_OUT, onWorkflowsJobExecutionTimedOut)],\n workers: [\n {\n taskQueue: RUNNERS_MAINTENANCE_TASK_QUEUE,\n workflowsPath,\n activities: createRunnersMaintenanceActivities,\n workflows: [\n {name: 'stuckJobDetector', id: 'stuck-job-detector', cronSchedule: '* * * * *'},\n ],\n },\n ],\n interModulePresentations: [createRunnersInterModulePresentation()],\n };\n}\n"],"names":["dirname","resolve","fileURLToPath","runnersEventSchemas","WORKFLOWS_JOB_EXECUTION_TIMED_OUT","subscriberFactory","db","migrationsPath","runnersOutbox","registerRunnersServiceMetrics","createProvisionerTokenAuthMethod","createRunnerControlSessionAuthMethod","createRunnerRegistrationTokenAuthMethod","createRunnerRoutes","onWorkflowsJobExecutionTimedOut","createRunnersInterModulePresentation","createRunnersMaintenanceActivities","RUNNERS_MAINTENANCE_TASK_QUEUE","getEffectiveRunnerToolCapabilities","unadvertisedRunnerTools","cancelRunnerJobs","enqueueJobExecution","isJobLeaseActive","releaseJobExecution","packageRoot","url","workflowsPath","subscriber","createRunnersModule","auth","options","name","database","routes","metrics","publishers","table","eventSchemas","subscribers","workers","taskQueue","activities","workflows","id","cronSchedule","interModulePresentations"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AAEvC,SAAQC,mBAAmB,QAAO,2BAA2B;AAC7D,SACEC,iCAAiC,QAE5B,6BAA6B;AACpC,SAA4BC,iBAAiB,QAAO,uBAAuB;AAC3E,SAAQC,EAAE,EAAEC,cAAc,EAAEC,aAAa,QAAO,eAAe;AAE/D,SAAQC,6BAA6B,QAAO,oBAAoB;AAChE,SACEC,gCAAgC,EAChCC,oCAAoC,EACpCC,uCAAuC,EACvCC,kBAAkB,EAClBC,+BAA+B,QAC1B,yBAAyB;AAChC,SAAQC,oCAAoC,QAAO,gCAAgC;AACnF,SAAQC,kCAAkC,QAAO,gCAAgC;AACjF,SAAQC,8BAA8B,QAAO,yBAAyB;AAEtE,SAEEC,kCAAkC,EAClCC,uBAAuB,QAClB,oCAAoC;AAC3C,SACEC,gBAAgB,EAEhBC,mBAAmB,EACnBC,gBAAgB,EAChBC,mBAAmB,QACd,eAAe;AAMtB,MAAMC,cAAcvB,QAAQD,QAAQE,cAAc,YAAYuB,GAAG,IAAI;AACrE,MAAMC,gBAAgBzB,QAAQuB,aAAa;AAE3C,MAAMG,aAAatB;AAEnB,OAAO,SAASuB,oBAAoB,EAClCC,IAAI,EACJ,GAAGC,SACwD;IAC3D,OAAO;QACLC,MAAM;QACNC,UAAU;YAAC1B;YAAIC;QAAc;QAC7BsB,MAAM;YACJjB;YACAD;YACAD;SACD;QACDuB,QAAQpB,mBAAmBgB,MAAMC;QACjCI,SAASzB;QACT0B,YAAY;YAAC;gBAACJ,MAAM;gBAAWK,OAAO5B;gBAAeF;gBAAI+B,cAAclC;YAAmB;SAAE;QAC5FmC,aAAa;YAACX,WAAWvB,mCAAmCU;SAAiC;QAC7FyB,SAAS;YACP;gBACEC,WAAWvB;gBACXS;gBACAe,YAAYzB;gBACZ0B,WAAW;oBACT;wBAACX,MAAM;wBAAoBY,IAAI;wBAAsBC,cAAc;oBAAW;iBAC/E;YACH;SACD;QACDC,0BAA0B;YAAC9B;SAAuC;IACpE;AACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lets an application host choose which workspaces may receive installation-provisioned capacity.
|
|
3
|
+
* The runners module passes candidate IDs in batches so host policy can apply its own entitlement
|
|
4
|
+
* or tenancy rules without exposing those rules from this package.
|
|
5
|
+
*/
|
|
6
|
+
export interface InstallationProvisioningPolicy {
|
|
7
|
+
filterEligibleWorkspaceIds(workspaceIds: readonly string[]): Promise<ReadonlySet<string>>;
|
|
8
|
+
}
|
|
9
|
+
export interface CreateRunnersModuleOptions {
|
|
10
|
+
installationProvisioning?: {
|
|
11
|
+
policy: InstallationProvisioningPolicy;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=installation-provisioning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-provisioning.d.ts","sourceRoot":"","sources":["../src/installation-provisioning.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C,0BAA0B,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;CAC3F;AAED,MAAM,WAAW,0BAA0B;IACzC,wBAAwB,CAAC,EAAE;QACzB,MAAM,EAAE,8BAA8B,CAAC;KACxC,CAAC;CACH"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lets an application host choose which workspaces may receive installation-provisioned capacity.
|
|
3
|
+
* The runners module passes candidate IDs in batches so host policy can apply its own entitlement
|
|
4
|
+
* or tenancy rules without exposing those rules from this package.
|
|
5
|
+
*/ export { };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=installation-provisioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/installation-provisioning.ts"],"sourcesContent":["/**\n * Lets an application host choose which workspaces may receive installation-provisioned capacity.\n * The runners module passes candidate IDs in batches so host policy can apply its own entitlement\n * or tenancy rules without exposing those rules from this package.\n */\nexport interface InstallationProvisioningPolicy {\n filterEligibleWorkspaceIds(workspaceIds: readonly string[]): Promise<ReadonlySet<string>>;\n}\n\nexport interface CreateRunnersModuleOptions {\n installationProvisioning?: {\n policy: InstallationProvisioningPolicy;\n };\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC,GAKD,WAIC"}
|
package/dist/metrics/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { jobExecutionClaimedCount, jobExecutionEnqueuedCount, jobExecutionLeaseExpiredCount,
|
|
1
|
+
export { jobExecutionClaimedCount, jobExecutionEnqueuedCount, jobExecutionLeaseExpiredCount, providerRunnerAbsentTerminatedCount, providerRunnerCountDivergenceCount, providerRunnerReconcileCallCount, providerRunnerTerminateIntentHonoredCount, providerRunnerTerminateIntentIssuedCount, recordRunnersRateLimitCheck, recordRunnersRateLimitPruneFailure, } from './instance.js';
|
|
2
2
|
export { registerRunnersServiceMetrics } from './service.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,mCAAmC,EACnC,kCAAkC,EAClC,gCAAgC,EAChC,yCAAyC,EACzC,wCAAwC,EACxC,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,6BAA6B,EAAC,MAAM,cAAc,CAAC"}
|
package/dist/metrics/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { jobExecutionClaimedCount, jobExecutionEnqueuedCount, jobExecutionLeaseExpiredCount,
|
|
1
|
+
export { jobExecutionClaimedCount, jobExecutionEnqueuedCount, jobExecutionLeaseExpiredCount, providerRunnerAbsentTerminatedCount, providerRunnerCountDivergenceCount, providerRunnerReconcileCallCount, providerRunnerTerminateIntentHonoredCount, providerRunnerTerminateIntentIssuedCount, recordRunnersRateLimitCheck, recordRunnersRateLimitPruneFailure } from './instance.js';
|
|
2
2
|
export { registerRunnersServiceMetrics } from './service.js';
|
|
3
3
|
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/metrics/index.ts"],"sourcesContent":["export {\n jobExecutionClaimedCount,\n jobExecutionEnqueuedCount,\n jobExecutionLeaseExpiredCount,\n
|
|
1
|
+
{"version":3,"sources":["../../src/metrics/index.ts"],"sourcesContent":["export {\n jobExecutionClaimedCount,\n jobExecutionEnqueuedCount,\n jobExecutionLeaseExpiredCount,\n providerRunnerAbsentTerminatedCount,\n providerRunnerCountDivergenceCount,\n providerRunnerReconcileCallCount,\n providerRunnerTerminateIntentHonoredCount,\n providerRunnerTerminateIntentIssuedCount,\n recordRunnersRateLimitCheck,\n recordRunnersRateLimitPruneFailure,\n} from './instance.js';\nexport {registerRunnersServiceMetrics} from './service.js';\n"],"names":["jobExecutionClaimedCount","jobExecutionEnqueuedCount","jobExecutionLeaseExpiredCount","providerRunnerAbsentTerminatedCount","providerRunnerCountDivergenceCount","providerRunnerReconcileCallCount","providerRunnerTerminateIntentHonoredCount","providerRunnerTerminateIntentIssuedCount","recordRunnersRateLimitCheck","recordRunnersRateLimitPruneFailure","registerRunnersServiceMetrics"],"mappings":"AAAA,SACEA,wBAAwB,EACxBC,yBAAyB,EACzBC,6BAA6B,EAC7BC,mCAAmC,EACnCC,kCAAkC,EAClCC,gCAAgC,EAChCC,yCAAyC,EACzCC,wCAAwC,EACxCC,2BAA2B,EAC3BC,kCAAkC,QAC7B,gBAAgB;AACvB,SAAQC,6BAA6B,QAAO,eAAe"}
|
|
@@ -3,22 +3,26 @@ export declare const jobExecutionClaimedCount: import("@shipfox/node-opentelemet
|
|
|
3
3
|
outcome: "claimed" | "empty";
|
|
4
4
|
}>;
|
|
5
5
|
export declare const jobExecutionLeaseExpiredCount: import("@shipfox/node-opentelemetry").Counter<Record<string, never>>;
|
|
6
|
-
export declare const
|
|
6
|
+
export declare const providerRunnerReportCount: import("@shipfox/node-opentelemetry").Counter<{
|
|
7
7
|
state: "starting" | "running" | "stopping" | "stopped" | "failed" | "terminated";
|
|
8
8
|
}>;
|
|
9
|
-
export declare const
|
|
10
|
-
|
|
9
|
+
export declare const runnerBootstrapExchangeCount: import("@shipfox/node-opentelemetry").Counter<{
|
|
10
|
+
outcome: "accepted" | "rejected";
|
|
11
|
+
}>;
|
|
12
|
+
export declare const runnerControlHeartbeatCount: import("@shipfox/node-opentelemetry").Counter<Record<string, never>>;
|
|
13
|
+
export declare const providerRunnerReapedCount: import("@shipfox/node-opentelemetry").Counter<Record<string, never>>;
|
|
14
|
+
export declare const providerRunnerCountDivergenceCount: import("@shipfox/node-opentelemetry").Counter<{
|
|
11
15
|
template_key?: string;
|
|
12
16
|
state: "starting" | "running";
|
|
13
17
|
direction: "backend-higher" | "advertised-higher";
|
|
14
18
|
}>;
|
|
15
|
-
export declare const
|
|
16
|
-
export declare const
|
|
17
|
-
export declare const
|
|
19
|
+
export declare const providerRunnerReconcileCallCount: import("@shipfox/node-opentelemetry").Counter<Record<string, never>>;
|
|
20
|
+
export declare const providerRunnerAbsentTerminatedCount: import("@shipfox/node-opentelemetry").Counter<Record<string, never>>;
|
|
21
|
+
export declare const providerRunnerTerminateIntentIssuedCount: import("@shipfox/node-opentelemetry").Counter<{
|
|
18
22
|
surface: "poll-demand" | "reconcile";
|
|
19
23
|
reason: "job-cancelled" | "terminal-state";
|
|
20
24
|
}>;
|
|
21
|
-
export declare const
|
|
25
|
+
export declare const providerRunnerTerminateIntentHonoredCount: import("@shipfox/node-opentelemetry").Counter<{
|
|
22
26
|
reason: "job-cancelled";
|
|
23
27
|
}>;
|
|
24
28
|
export declare const reservationReleasedCount: import("@shipfox/node-opentelemetry").Counter<Record<string, never>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/metrics/instance.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,yBAAyB,sEAKrC,CAAC;AAEF,eAAO,MAAM,wBAAwB;aAAiC,SAAS,GAAG,OAAO;EAGxF,CAAC;AAEF,eAAO,MAAM,6BAA6B,sEAGzC,CAAC;AAEF,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/metrics/instance.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,yBAAyB,sEAKrC,CAAC;AAEF,eAAO,MAAM,wBAAwB;aAAiC,SAAS,GAAG,OAAO;EAGxF,CAAC;AAEF,eAAO,MAAM,6BAA6B,sEAGzC,CAAC;AAEF,eAAO,MAAM,yBAAyB;WAC7B,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY;EAGhF,CAAC;AAEH,eAAO,MAAM,4BAA4B;aAC9B,UAAU,GAAG,UAAU;EAGhC,CAAC;AAEH,eAAO,MAAM,2BAA2B,sEAGvC,CAAC;AAEF,eAAO,MAAM,yBAAyB,sEAKrC,CAAC;AAEF,eAAO,MAAM,kCAAkC;mBAC9B,MAAM;WACd,UAAU,GAAG,SAAS;eAClB,gBAAgB,GAAG,mBAAmB;EAIjD,CAAC;AAEH,eAAO,MAAM,gCAAgC,sEAG5C,CAAC;AAEF,eAAO,MAAM,mCAAmC,sEAM/C,CAAC;AAEF,eAAO,MAAM,wCAAwC;aAC1C,aAAa,GAAG,WAAW;YAC5B,eAAe,GAAG,gBAAgB;EAG1C,CAAC;AAEH,eAAO,MAAM,yCAAyC;YAC5C,eAAe;EAGvB,CAAC;AAEH,eAAO,MAAM,wBAAwB,sEAGpC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAC/E,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG,iBAAiB,CAAC;AACtE,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAsB5E,wBAAgB,2BAA2B,CAAC,MAAM,EAAE;IAClD,MAAM,EAAE,sBAAsB,CAAC;IAC/B,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE,uBAAuB,CAAC;CAClC,GAAG,IAAI,CAQP;AAED,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD"}
|
package/dist/metrics/instance.js
CHANGED
|
@@ -9,25 +9,31 @@ export const jobExecutionClaimedCount = meter.createCounter('runners_job_executi
|
|
|
9
9
|
export const jobExecutionLeaseExpiredCount = meter.createCounter('runners_job_execution_lease_expired', {
|
|
10
10
|
description: 'Job execution leases reaped after passing the heartbeat threshold'
|
|
11
11
|
});
|
|
12
|
-
export const
|
|
12
|
+
export const providerRunnerReportCount = meter.createCounter('runners_provider_runner_reported', {
|
|
13
13
|
description: 'Provisioned runner lifecycle reports accepted by state'
|
|
14
14
|
});
|
|
15
|
-
export const
|
|
15
|
+
export const runnerBootstrapExchangeCount = meter.createCounter('runners_runner_bootstrap_exchange', {
|
|
16
|
+
description: 'Runner bootstrap-token exchanges by outcome'
|
|
17
|
+
});
|
|
18
|
+
export const runnerControlHeartbeatCount = meter.createCounter('runners_runner_control_heartbeat', {
|
|
19
|
+
description: 'Pre-workspace runner-control heartbeats accepted'
|
|
20
|
+
});
|
|
21
|
+
export const providerRunnerReapedCount = meter.createCounter('runners_provider_runner_reaped', {
|
|
16
22
|
description: 'Stale provisioned runners marked failed by backend maintenance'
|
|
17
23
|
});
|
|
18
|
-
export const
|
|
24
|
+
export const providerRunnerCountDivergenceCount = meter.createCounter('runners_provider_runner_count_divergence', {
|
|
19
25
|
description: 'Absolute difference between provisioner-advertised and backend-observed provisioned runner counts'
|
|
20
26
|
});
|
|
21
|
-
export const
|
|
27
|
+
export const providerRunnerReconcileCallCount = meter.createCounter('runners_provider_runner_reconcile_called', {
|
|
22
28
|
description: 'Provisioned runner reconcile calls completed successfully'
|
|
23
29
|
});
|
|
24
|
-
export const
|
|
30
|
+
export const providerRunnerAbsentTerminatedCount = meter.createCounter('runners_provider_runner_absent_terminated', {
|
|
25
31
|
description: 'Owned provisioned runners marked terminated because they were absent from reconcile'
|
|
26
32
|
});
|
|
27
|
-
export const
|
|
33
|
+
export const providerRunnerTerminateIntentIssuedCount = meter.createCounter('runners_provider_runner_terminate_intent_issued', {
|
|
28
34
|
description: 'Provisioned runner terminate intents returned to provisioners'
|
|
29
35
|
});
|
|
30
|
-
export const
|
|
36
|
+
export const providerRunnerTerminateIntentHonoredCount = meter.createCounter('runners_provider_runner_terminate_intent_honored', {
|
|
31
37
|
description: 'Provisioned runner terminate intents honored by first transition to terminated'
|
|
32
38
|
});
|
|
33
39
|
export const reservationReleasedCount = meter.createCounter('runners_reservation_released', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/metrics/instance.ts"],"sourcesContent":["import {instanceMetrics} from '@shipfox/node-opentelemetry';\n\nconst meter = instanceMetrics.getMeter('runners');\n\nexport const jobExecutionEnqueuedCount = meter.createCounter<Record<string, never>>(\n 'runners_job_execution_enqueued',\n {\n description: 'Job executions added to the pending queue',\n },\n);\n\nexport const jobExecutionClaimedCount = meter.createCounter<{outcome: 'claimed' | 'empty'}>(\n 'runners_job_execution_claimed',\n {description: 'Job execution claim attempts by outcome'},\n);\n\nexport const jobExecutionLeaseExpiredCount = meter.createCounter<Record<string, never>>(\n 'runners_job_execution_lease_expired',\n {description: 'Job execution leases reaped after passing the heartbeat threshold'},\n);\n\nexport const
|
|
1
|
+
{"version":3,"sources":["../../src/metrics/instance.ts"],"sourcesContent":["import {instanceMetrics} from '@shipfox/node-opentelemetry';\n\nconst meter = instanceMetrics.getMeter('runners');\n\nexport const jobExecutionEnqueuedCount = meter.createCounter<Record<string, never>>(\n 'runners_job_execution_enqueued',\n {\n description: 'Job executions added to the pending queue',\n },\n);\n\nexport const jobExecutionClaimedCount = meter.createCounter<{outcome: 'claimed' | 'empty'}>(\n 'runners_job_execution_claimed',\n {description: 'Job execution claim attempts by outcome'},\n);\n\nexport const jobExecutionLeaseExpiredCount = meter.createCounter<Record<string, never>>(\n 'runners_job_execution_lease_expired',\n {description: 'Job execution leases reaped after passing the heartbeat threshold'},\n);\n\nexport const providerRunnerReportCount = meter.createCounter<{\n state: 'starting' | 'running' | 'stopping' | 'stopped' | 'failed' | 'terminated';\n}>('runners_provider_runner_reported', {\n description: 'Provisioned runner lifecycle reports accepted by state',\n});\n\nexport const runnerBootstrapExchangeCount = meter.createCounter<{\n outcome: 'accepted' | 'rejected';\n}>('runners_runner_bootstrap_exchange', {\n description: 'Runner bootstrap-token exchanges by outcome',\n});\n\nexport const runnerControlHeartbeatCount = meter.createCounter<Record<string, never>>(\n 'runners_runner_control_heartbeat',\n {description: 'Pre-workspace runner-control heartbeats accepted'},\n);\n\nexport const providerRunnerReapedCount = meter.createCounter<Record<string, never>>(\n 'runners_provider_runner_reaped',\n {\n description: 'Stale provisioned runners marked failed by backend maintenance',\n },\n);\n\nexport const providerRunnerCountDivergenceCount = meter.createCounter<{\n template_key?: string;\n state: 'starting' | 'running';\n direction: 'backend-higher' | 'advertised-higher';\n}>('runners_provider_runner_count_divergence', {\n description:\n 'Absolute difference between provisioner-advertised and backend-observed provisioned runner counts',\n});\n\nexport const providerRunnerReconcileCallCount = meter.createCounter<Record<string, never>>(\n 'runners_provider_runner_reconcile_called',\n {description: 'Provisioned runner reconcile calls completed successfully'},\n);\n\nexport const providerRunnerAbsentTerminatedCount = meter.createCounter<Record<string, never>>(\n 'runners_provider_runner_absent_terminated',\n {\n description:\n 'Owned provisioned runners marked terminated because they were absent from reconcile',\n },\n);\n\nexport const providerRunnerTerminateIntentIssuedCount = meter.createCounter<{\n surface: 'poll-demand' | 'reconcile';\n reason: 'job-cancelled' | 'terminal-state';\n}>('runners_provider_runner_terminate_intent_issued', {\n description: 'Provisioned runner terminate intents returned to provisioners',\n});\n\nexport const providerRunnerTerminateIntentHonoredCount = meter.createCounter<{\n reason: 'job-cancelled';\n}>('runners_provider_runner_terminate_intent_honored', {\n description: 'Provisioned runner terminate intents honored by first transition to terminated',\n});\n\nexport const reservationReleasedCount = meter.createCounter<Record<string, never>>(\n 'runners_reservation_released',\n {description: 'Reservation units released from terminal provisioned runner reports'},\n);\n\nexport type RunnersRateLimitAction = 'provisioner-mint' | 'ephemeral-register';\nexport type RunnersRateLimitScope = 'provisioner' | 'ephemeral-token';\nexport type RunnersRateLimitOutcome = 'allowed' | 'blocked' | 'unavailable';\n\nconst rateLimitCheckCount = meter.createCounter<{\n action: RunnersRateLimitAction;\n scope: RunnersRateLimitScope;\n outcome: RunnersRateLimitOutcome;\n}>('runners_rate_limit_checks', {\n description: 'Runners rate limit checks by action, scope, and outcome',\n});\n\nconst rateLimitPruneFailureCount = meter.createCounter('runners_rate_limit_prune_failures', {\n description: 'Runners rate limit prune failures',\n});\n\nfunction recordMetric(record: () => void): void {\n try {\n record();\n } catch {\n // Metrics must not affect runner or provisioner request outcomes.\n }\n}\n\nexport function recordRunnersRateLimitCheck(params: {\n action: RunnersRateLimitAction;\n scope: RunnersRateLimitScope;\n outcome: RunnersRateLimitOutcome;\n}): void {\n recordMetric(() =>\n rateLimitCheckCount.add(1, {\n action: params.action,\n scope: params.scope,\n outcome: params.outcome,\n }),\n );\n}\n\nexport function recordRunnersRateLimitPruneFailure(): void {\n recordMetric(() => rateLimitPruneFailureCount.add(1));\n}\n"],"names":["instanceMetrics","meter","getMeter","jobExecutionEnqueuedCount","createCounter","description","jobExecutionClaimedCount","jobExecutionLeaseExpiredCount","providerRunnerReportCount","runnerBootstrapExchangeCount","runnerControlHeartbeatCount","providerRunnerReapedCount","providerRunnerCountDivergenceCount","providerRunnerReconcileCallCount","providerRunnerAbsentTerminatedCount","providerRunnerTerminateIntentIssuedCount","providerRunnerTerminateIntentHonoredCount","reservationReleasedCount","rateLimitCheckCount","rateLimitPruneFailureCount","recordMetric","record","recordRunnersRateLimitCheck","params","add","action","scope","outcome","recordRunnersRateLimitPruneFailure"],"mappings":"AAAA,SAAQA,eAAe,QAAO,8BAA8B;AAE5D,MAAMC,QAAQD,gBAAgBE,QAAQ,CAAC;AAEvC,OAAO,MAAMC,4BAA4BF,MAAMG,aAAa,CAC1D,kCACA;IACEC,aAAa;AACf,GACA;AAEF,OAAO,MAAMC,2BAA2BL,MAAMG,aAAa,CACzD,iCACA;IAACC,aAAa;AAAyC,GACvD;AAEF,OAAO,MAAME,gCAAgCN,MAAMG,aAAa,CAC9D,uCACA;IAACC,aAAa;AAAmE,GACjF;AAEF,OAAO,MAAMG,4BAA4BP,MAAMG,aAAa,CAEzD,oCAAoC;IACrCC,aAAa;AACf,GAAG;AAEH,OAAO,MAAMI,+BAA+BR,MAAMG,aAAa,CAE5D,qCAAqC;IACtCC,aAAa;AACf,GAAG;AAEH,OAAO,MAAMK,8BAA8BT,MAAMG,aAAa,CAC5D,oCACA;IAACC,aAAa;AAAkD,GAChE;AAEF,OAAO,MAAMM,4BAA4BV,MAAMG,aAAa,CAC1D,kCACA;IACEC,aAAa;AACf,GACA;AAEF,OAAO,MAAMO,qCAAqCX,MAAMG,aAAa,CAIlE,4CAA4C;IAC7CC,aACE;AACJ,GAAG;AAEH,OAAO,MAAMQ,mCAAmCZ,MAAMG,aAAa,CACjE,4CACA;IAACC,aAAa;AAA2D,GACzE;AAEF,OAAO,MAAMS,sCAAsCb,MAAMG,aAAa,CACpE,6CACA;IACEC,aACE;AACJ,GACA;AAEF,OAAO,MAAMU,2CAA2Cd,MAAMG,aAAa,CAGxE,mDAAmD;IACpDC,aAAa;AACf,GAAG;AAEH,OAAO,MAAMW,4CAA4Cf,MAAMG,aAAa,CAEzE,oDAAoD;IACrDC,aAAa;AACf,GAAG;AAEH,OAAO,MAAMY,2BAA2BhB,MAAMG,aAAa,CACzD,gCACA;IAACC,aAAa;AAAqE,GACnF;AAMF,MAAMa,sBAAsBjB,MAAMG,aAAa,CAI5C,6BAA6B;IAC9BC,aAAa;AACf;AAEA,MAAMc,6BAA6BlB,MAAMG,aAAa,CAAC,qCAAqC;IAC1FC,aAAa;AACf;AAEA,SAASe,aAAaC,MAAkB;IACtC,IAAI;QACFA;IACF,EAAE,OAAM;IACN,kEAAkE;IACpE;AACF;AAEA,OAAO,SAASC,4BAA4BC,MAI3C;IACCH,aAAa,IACXF,oBAAoBM,GAAG,CAAC,GAAG;YACzBC,QAAQF,OAAOE,MAAM;YACrBC,OAAOH,OAAOG,KAAK;YACnBC,SAASJ,OAAOI,OAAO;QACzB;AAEJ;AAEA,OAAO,SAASC;IACdR,aAAa,IAAMD,2BAA2BK,GAAG,CAAC;AACpD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { createProvisionerTokenAuthMethod } from './provisioner-token-auth.js';
|
|
2
|
+
export { authenticateRunnerControlSession, createRunnerControlSessionAuthMethod, } from './runner-control-session-auth.js';
|
|
2
3
|
export { createRunnerRegistrationTokenAuthMethod, getRunnerContext, type RunnerRegistrationContext, } from './runner-registration-token-auth.js';
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/presentation/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gCAAgC,EAAC,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EACL,uCAAuC,EACvC,gBAAgB,EAChB,KAAK,yBAAyB,GAC/B,MAAM,qCAAqC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/presentation/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gCAAgC,EAAC,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EACL,gCAAgC,EAChC,oCAAoC,GACrC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,uCAAuC,EACvC,gBAAgB,EAChB,KAAK,yBAAyB,GAC/B,MAAM,qCAAqC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { createProvisionerTokenAuthMethod } from './provisioner-token-auth.js';
|
|
2
|
+
export { authenticateRunnerControlSession, createRunnerControlSessionAuthMethod } from './runner-control-session-auth.js';
|
|
2
3
|
export { createRunnerRegistrationTokenAuthMethod, getRunnerContext } from './runner-registration-token-auth.js';
|
|
3
4
|
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/auth/index.ts"],"sourcesContent":["export {createProvisionerTokenAuthMethod} from './provisioner-token-auth.js';\nexport {\n createRunnerRegistrationTokenAuthMethod,\n getRunnerContext,\n type RunnerRegistrationContext,\n} from './runner-registration-token-auth.js';\n"],"names":["createProvisionerTokenAuthMethod","createRunnerRegistrationTokenAuthMethod","getRunnerContext"],"mappings":"AAAA,SAAQA,gCAAgC,QAAO,8BAA8B;AAC7E,SACEC,uCAAuC,EACvCC,gBAAgB,QAEX,sCAAsC"}
|
|
1
|
+
{"version":3,"sources":["../../../src/presentation/auth/index.ts"],"sourcesContent":["export {createProvisionerTokenAuthMethod} from './provisioner-token-auth.js';\nexport {\n authenticateRunnerControlSession,\n createRunnerControlSessionAuthMethod,\n} from './runner-control-session-auth.js';\nexport {\n createRunnerRegistrationTokenAuthMethod,\n getRunnerContext,\n type RunnerRegistrationContext,\n} from './runner-registration-token-auth.js';\n"],"names":["createProvisionerTokenAuthMethod","authenticateRunnerControlSession","createRunnerControlSessionAuthMethod","createRunnerRegistrationTokenAuthMethod","getRunnerContext"],"mappings":"AAAA,SAAQA,gCAAgC,QAAO,8BAA8B;AAC7E,SACEC,gCAAgC,EAChCC,oCAAoC,QAC/B,mCAAmC;AAC1C,SACEC,uCAAuC,EACvCC,gBAAgB,QAEX,sCAAsC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provisioner-token-auth.d.ts","sourceRoot":"","sources":["../../../src/presentation/auth/provisioner-token-auth.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,KAAK,UAAU,EAAkC,MAAM,uBAAuB,CAAC;AAQvF,wBAAgB,gCAAgC,IAAI,UAAU,
|
|
1
|
+
{"version":3,"file":"provisioner-token-auth.d.ts","sourceRoot":"","sources":["../../../src/presentation/auth/provisioner-token-auth.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,KAAK,UAAU,EAAkC,MAAM,uBAAuB,CAAC;AAQvF,wBAAgB,gCAAgC,IAAI,UAAU,CAwD7D"}
|
|
@@ -54,8 +54,12 @@ export function createProvisionerTokenAuthMethod() {
|
|
|
54
54
|
status: 401
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
|
-
const context = {
|
|
57
|
+
const context = provisionerToken.scope === 'installation' ? {
|
|
58
58
|
provisionerTokenId: provisionerToken.id,
|
|
59
|
+
scope: 'installation'
|
|
60
|
+
} : {
|
|
61
|
+
provisionerTokenId: provisionerToken.id,
|
|
62
|
+
scope: 'workspace',
|
|
59
63
|
workspaceId: provisionerToken.workspaceId
|
|
60
64
|
};
|
|
61
65
|
await touchProvisionerLastSeen({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/auth/provisioner-token-auth.ts"],"sourcesContent":["import {\n AUTH_PROVISIONER_TOKEN,\n type ProvisionerContext,\n setProvisionerContext,\n} from '@shipfox/api-auth-context';\nimport {type AuthMethod, ClientError, extractBearerToken} from '@shipfox/node-fastify';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {extractDisplayPrefix, getTokenType, hashOpaqueToken} from '@shipfox/node-tokens';\nimport {config} from '#config.js';\nimport {resolveProvisionerTokenByHash, touchProvisionerLastSeen} from '#db/provisioner-tokens.js';\n\ntype AuthFailureReason = 'missing' | 'type' | 'not-found' | 'revoked' | 'expired';\n\nexport function createProvisionerTokenAuthMethod(): AuthMethod {\n return {\n name: AUTH_PROVISIONER_TOKEN,\n authenticate: async (request) => {\n const rawToken = extractBearerToken(request.headers.authorization);\n if (!rawToken) {\n logAuthFailure({reason: 'missing'});\n throw new ClientError('Missing or invalid Authorization header', 'unauthorized', {\n status: 401,\n });\n }\n\n if (getTokenType(rawToken) !== 'provisionerToken') {\n logAuthFailure({rawToken, reason: 'type'});\n throw new ClientError('Invalid provisioner token', 'unauthorized', {status: 401});\n }\n\n const provisionerToken = await resolveProvisionerTokenByHash(hashOpaqueToken(rawToken));\n if (!provisionerToken) {\n logAuthFailure({rawToken, reason: 'not-found'});\n throw new ClientError('Invalid provisioner token', 'unauthorized', {status: 401});\n }\n\n if (provisionerToken.revokedAt) {\n logAuthFailure({rawToken, reason: 'revoked'});\n throw new ClientError('Provisioner token has been revoked', 'provisioner-token-revoked', {\n status: 401,\n });\n }\n\n if (provisionerToken.expiresAt && provisionerToken.expiresAt <= new Date()) {\n logAuthFailure({rawToken, reason: 'expired'});\n throw new ClientError('Provisioner token has expired', 'provisioner-token-expired', {\n status: 401,\n });\n }\n\n const context: ProvisionerContext
|
|
1
|
+
{"version":3,"sources":["../../../src/presentation/auth/provisioner-token-auth.ts"],"sourcesContent":["import {\n AUTH_PROVISIONER_TOKEN,\n type ProvisionerContext,\n setProvisionerContext,\n} from '@shipfox/api-auth-context';\nimport {type AuthMethod, ClientError, extractBearerToken} from '@shipfox/node-fastify';\nimport {logger} from '@shipfox/node-opentelemetry';\nimport {extractDisplayPrefix, getTokenType, hashOpaqueToken} from '@shipfox/node-tokens';\nimport {config} from '#config.js';\nimport {resolveProvisionerTokenByHash, touchProvisionerLastSeen} from '#db/provisioner-tokens.js';\n\ntype AuthFailureReason = 'missing' | 'type' | 'not-found' | 'revoked' | 'expired';\n\nexport function createProvisionerTokenAuthMethod(): AuthMethod {\n return {\n name: AUTH_PROVISIONER_TOKEN,\n authenticate: async (request) => {\n const rawToken = extractBearerToken(request.headers.authorization);\n if (!rawToken) {\n logAuthFailure({reason: 'missing'});\n throw new ClientError('Missing or invalid Authorization header', 'unauthorized', {\n status: 401,\n });\n }\n\n if (getTokenType(rawToken) !== 'provisionerToken') {\n logAuthFailure({rawToken, reason: 'type'});\n throw new ClientError('Invalid provisioner token', 'unauthorized', {status: 401});\n }\n\n const provisionerToken = await resolveProvisionerTokenByHash(hashOpaqueToken(rawToken));\n if (!provisionerToken) {\n logAuthFailure({rawToken, reason: 'not-found'});\n throw new ClientError('Invalid provisioner token', 'unauthorized', {status: 401});\n }\n\n if (provisionerToken.revokedAt) {\n logAuthFailure({rawToken, reason: 'revoked'});\n throw new ClientError('Provisioner token has been revoked', 'provisioner-token-revoked', {\n status: 401,\n });\n }\n\n if (provisionerToken.expiresAt && provisionerToken.expiresAt <= new Date()) {\n logAuthFailure({rawToken, reason: 'expired'});\n throw new ClientError('Provisioner token has expired', 'provisioner-token-expired', {\n status: 401,\n });\n }\n\n const context: ProvisionerContext =\n provisionerToken.scope === 'installation'\n ? {provisionerTokenId: provisionerToken.id, scope: 'installation'}\n : {\n provisionerTokenId: provisionerToken.id,\n scope: 'workspace',\n workspaceId: provisionerToken.workspaceId,\n };\n\n await touchProvisionerLastSeen({\n tokenId: provisionerToken.id,\n throttleSeconds: config.PROVISIONER_LAST_SEEN_THROTTLE_SECONDS,\n }).catch((error: unknown) => {\n logger().warn({error, provisionerTokenId: provisionerToken.id}, 'last-seen touch failed');\n });\n\n setProvisionerContext(request, context);\n },\n };\n}\n\nfunction logAuthFailure(params: {rawToken?: string | undefined; reason: AuthFailureReason}): void {\n logger().warn(\n {\n prefix: params.rawToken ? extractDisplayPrefix(params.rawToken) : undefined,\n reason: params.reason,\n },\n 'provisioner token auth failed',\n );\n}\n"],"names":["AUTH_PROVISIONER_TOKEN","setProvisionerContext","ClientError","extractBearerToken","logger","extractDisplayPrefix","getTokenType","hashOpaqueToken","config","resolveProvisionerTokenByHash","touchProvisionerLastSeen","createProvisionerTokenAuthMethod","name","authenticate","request","rawToken","headers","authorization","logAuthFailure","reason","status","provisionerToken","revokedAt","expiresAt","Date","context","scope","provisionerTokenId","id","workspaceId","tokenId","throttleSeconds","PROVISIONER_LAST_SEEN_THROTTLE_SECONDS","catch","error","warn","params","prefix","undefined"],"mappings":"AAAA,SACEA,sBAAsB,EAEtBC,qBAAqB,QAChB,4BAA4B;AACnC,SAAyBC,WAAW,EAAEC,kBAAkB,QAAO,wBAAwB;AACvF,SAAQC,MAAM,QAAO,8BAA8B;AACnD,SAAQC,oBAAoB,EAAEC,YAAY,EAAEC,eAAe,QAAO,uBAAuB;AACzF,SAAQC,MAAM,QAAO,aAAa;AAClC,SAAQC,6BAA6B,EAAEC,wBAAwB,QAAO,4BAA4B;AAIlG,OAAO,SAASC;IACd,OAAO;QACLC,MAAMZ;QACNa,cAAc,OAAOC;YACnB,MAAMC,WAAWZ,mBAAmBW,QAAQE,OAAO,CAACC,aAAa;YACjE,IAAI,CAACF,UAAU;gBACbG,eAAe;oBAACC,QAAQ;gBAAS;gBACjC,MAAM,IAAIjB,YAAY,2CAA2C,gBAAgB;oBAC/EkB,QAAQ;gBACV;YACF;YAEA,IAAId,aAAaS,cAAc,oBAAoB;gBACjDG,eAAe;oBAACH;oBAAUI,QAAQ;gBAAM;gBACxC,MAAM,IAAIjB,YAAY,6BAA6B,gBAAgB;oBAACkB,QAAQ;gBAAG;YACjF;YAEA,MAAMC,mBAAmB,MAAMZ,8BAA8BF,gBAAgBQ;YAC7E,IAAI,CAACM,kBAAkB;gBACrBH,eAAe;oBAACH;oBAAUI,QAAQ;gBAAW;gBAC7C,MAAM,IAAIjB,YAAY,6BAA6B,gBAAgB;oBAACkB,QAAQ;gBAAG;YACjF;YAEA,IAAIC,iBAAiBC,SAAS,EAAE;gBAC9BJ,eAAe;oBAACH;oBAAUI,QAAQ;gBAAS;gBAC3C,MAAM,IAAIjB,YAAY,sCAAsC,6BAA6B;oBACvFkB,QAAQ;gBACV;YACF;YAEA,IAAIC,iBAAiBE,SAAS,IAAIF,iBAAiBE,SAAS,IAAI,IAAIC,QAAQ;gBAC1EN,eAAe;oBAACH;oBAAUI,QAAQ;gBAAS;gBAC3C,MAAM,IAAIjB,YAAY,iCAAiC,6BAA6B;oBAClFkB,QAAQ;gBACV;YACF;YAEA,MAAMK,UACJJ,iBAAiBK,KAAK,KAAK,iBACvB;gBAACC,oBAAoBN,iBAAiBO,EAAE;gBAAEF,OAAO;YAAc,IAC/D;gBACEC,oBAAoBN,iBAAiBO,EAAE;gBACvCF,OAAO;gBACPG,aAAaR,iBAAiBQ,WAAW;YAC3C;YAEN,MAAMnB,yBAAyB;gBAC7BoB,SAAST,iBAAiBO,EAAE;gBAC5BG,iBAAiBvB,OAAOwB,sCAAsC;YAChE,GAAGC,KAAK,CAAC,CAACC;gBACR9B,SAAS+B,IAAI,CAAC;oBAACD;oBAAOP,oBAAoBN,iBAAiBO,EAAE;gBAAA,GAAG;YAClE;YAEA3B,sBAAsBa,SAASW;QACjC;IACF;AACF;AAEA,SAASP,eAAekB,MAAkE;IACxFhC,SAAS+B,IAAI,CACX;QACEE,QAAQD,OAAOrB,QAAQ,GAAGV,qBAAqB+B,OAAOrB,QAAQ,IAAIuB;QAClEnB,QAAQiB,OAAOjB,MAAM;IACvB,GACA;AAEJ"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type AuthMethod } from '@shipfox/node-fastify';
|
|
2
|
+
export declare function createRunnerControlSessionAuthMethod(): AuthMethod;
|
|
3
|
+
export declare function authenticateRunnerControlSession(request: Parameters<AuthMethod['authenticate']>[0]): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=runner-control-session-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-control-session-auth.d.ts","sourceRoot":"","sources":["../../../src/presentation/auth/runner-control-session-auth.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,KAAK,UAAU,EAAkC,MAAM,uBAAuB,CAAC;AAIvF,wBAAgB,oCAAoC,IAAI,UAAU,CAKjE;AAED,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,iBAcnD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AUTH_RUNNER_CONTROL_SESSION, setRunnerControlSessionContext } from '@shipfox/api-auth-context';
|
|
2
|
+
import { ClientError, extractBearerToken } from '@shipfox/node-fastify';
|
|
3
|
+
import { getTokenType } from '@shipfox/node-tokens';
|
|
4
|
+
import { resolveRunnerControlSession } from '#core/runner-control-sessions.js';
|
|
5
|
+
export function createRunnerControlSessionAuthMethod() {
|
|
6
|
+
return {
|
|
7
|
+
name: AUTH_RUNNER_CONTROL_SESSION,
|
|
8
|
+
authenticate: authenticateRunnerControlSession
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export async function authenticateRunnerControlSession(request) {
|
|
12
|
+
const rawToken = extractBearerToken(request.headers.authorization);
|
|
13
|
+
if (!rawToken || getTokenType(rawToken) !== 'runnerControlSession') {
|
|
14
|
+
throw new ClientError('Invalid runner control session', 'unauthorized', {
|
|
15
|
+
status: 401
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
const session = await resolveRunnerControlSession(rawToken);
|
|
19
|
+
if (!session) throw new ClientError('Invalid runner control session', 'unauthorized', {
|
|
20
|
+
status: 401
|
|
21
|
+
});
|
|
22
|
+
setRunnerControlSessionContext(request, {
|
|
23
|
+
runnerControlSessionId: session.id,
|
|
24
|
+
runnerInstanceId: session.runnerInstanceId,
|
|
25
|
+
provisionerId: session.provisionerId
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=runner-control-session-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/presentation/auth/runner-control-session-auth.ts"],"sourcesContent":["import {\n AUTH_RUNNER_CONTROL_SESSION,\n setRunnerControlSessionContext,\n} from '@shipfox/api-auth-context';\nimport {type AuthMethod, ClientError, extractBearerToken} from '@shipfox/node-fastify';\nimport {getTokenType} from '@shipfox/node-tokens';\nimport {resolveRunnerControlSession} from '#core/runner-control-sessions.js';\n\nexport function createRunnerControlSessionAuthMethod(): AuthMethod {\n return {\n name: AUTH_RUNNER_CONTROL_SESSION,\n authenticate: authenticateRunnerControlSession,\n };\n}\n\nexport async function authenticateRunnerControlSession(\n request: Parameters<AuthMethod['authenticate']>[0],\n) {\n const rawToken = extractBearerToken(request.headers.authorization);\n if (!rawToken || getTokenType(rawToken) !== 'runnerControlSession') {\n throw new ClientError('Invalid runner control session', 'unauthorized', {status: 401});\n }\n const session = await resolveRunnerControlSession(rawToken);\n if (!session)\n throw new ClientError('Invalid runner control session', 'unauthorized', {status: 401});\n setRunnerControlSessionContext(request, {\n runnerControlSessionId: session.id,\n runnerInstanceId: session.runnerInstanceId,\n provisionerId: session.provisionerId,\n });\n}\n"],"names":["AUTH_RUNNER_CONTROL_SESSION","setRunnerControlSessionContext","ClientError","extractBearerToken","getTokenType","resolveRunnerControlSession","createRunnerControlSessionAuthMethod","name","authenticate","authenticateRunnerControlSession","request","rawToken","headers","authorization","status","session","runnerControlSessionId","id","runnerInstanceId","provisionerId"],"mappings":"AAAA,SACEA,2BAA2B,EAC3BC,8BAA8B,QACzB,4BAA4B;AACnC,SAAyBC,WAAW,EAAEC,kBAAkB,QAAO,wBAAwB;AACvF,SAAQC,YAAY,QAAO,uBAAuB;AAClD,SAAQC,2BAA2B,QAAO,mCAAmC;AAE7E,OAAO,SAASC;IACd,OAAO;QACLC,MAAMP;QACNQ,cAAcC;IAChB;AACF;AAEA,OAAO,eAAeA,iCACpBC,OAAkD;IAElD,MAAMC,WAAWR,mBAAmBO,QAAQE,OAAO,CAACC,aAAa;IACjE,IAAI,CAACF,YAAYP,aAAaO,cAAc,wBAAwB;QAClE,MAAM,IAAIT,YAAY,kCAAkC,gBAAgB;YAACY,QAAQ;QAAG;IACtF;IACA,MAAMC,UAAU,MAAMV,4BAA4BM;IAClD,IAAI,CAACI,SACH,MAAM,IAAIb,YAAY,kCAAkC,gBAAgB;QAACY,QAAQ;IAAG;IACtFb,+BAA+BS,SAAS;QACtCM,wBAAwBD,QAAQE,EAAE;QAClCC,kBAAkBH,QAAQG,gBAAgB;QAC1CC,eAAeJ,QAAQI,aAAa;IACtC;AACF"}
|
|
@@ -10,7 +10,11 @@ export type RunnerRegistrationContext = {
|
|
|
10
10
|
workspaceId: string;
|
|
11
11
|
provisionerId: string;
|
|
12
12
|
reservationId: string | null;
|
|
13
|
-
|
|
13
|
+
providerRunnerId: string;
|
|
14
|
+
} | {
|
|
15
|
+
kind: 'activation';
|
|
16
|
+
activationTokenId: string;
|
|
17
|
+
workspaceId: string;
|
|
14
18
|
};
|
|
15
19
|
export declare function getRunnerContext(request: FastifyRequest): RunnerRegistrationContext;
|
|
16
20
|
export declare function createRunnerRegistrationTokenAuthMethod(): AuthMethod;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-registration-token-auth.d.ts","sourceRoot":"","sources":["../../../src/presentation/auth/runner-registration-token-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,UAAU,EAAkC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner-registration-token-auth.d.ts","sourceRoot":"","sources":["../../../src/presentation/auth/runner-registration-token-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,UAAU,EAAkC,MAAM,uBAAuB,CAAC;AAGvF,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAU5C,MAAM,MAAM,yBAAyB,GACjC;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GACD;IAAC,IAAI,EAAE,YAAY,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,CAAC;AAEzE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,yBAAyB,CAQnF;AAED,wBAAgB,uCAAuC,IAAI,UAAU,CAoGpE"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { AUTH_RUNNER_REGISTRATION_TOKEN } from '@shipfox/api-auth-context';
|
|
2
2
|
import { ClientError, extractBearerToken } from '@shipfox/node-fastify';
|
|
3
3
|
import { getTokenType, hashOpaqueToken } from '@shipfox/node-tokens';
|
|
4
|
+
import { and, eq, gt, isNull, or, sql } from 'drizzle-orm';
|
|
5
|
+
import { db } from '#db/db.js';
|
|
4
6
|
import { resolveEphemeralRegistrationTokenByHash } from '#db/ephemeral-registration-tokens.js';
|
|
5
7
|
import { resolveManualRegistrationTokenByHash } from '#db/manual-registration-tokens.js';
|
|
8
|
+
import { provisionerTokens } from '#db/schema/provisioner-tokens.js';
|
|
9
|
+
import { runnerActivationTokens } from '#db/schema/runner-activation-tokens.js';
|
|
10
|
+
import { providerRunners } from '#db/schema/runner-instances.js';
|
|
6
11
|
const RUNNER_CONTEXT_KEY = 'runner';
|
|
7
12
|
export function getRunnerContext(request) {
|
|
8
13
|
const context = request[RUNNER_CONTEXT_KEY];
|
|
@@ -22,6 +27,21 @@ export function createRunnerRegistrationTokenAuthMethod() {
|
|
|
22
27
|
});
|
|
23
28
|
}
|
|
24
29
|
const tokenType = getTokenType(rawToken);
|
|
30
|
+
if (tokenType === 'runnerActivationToken') {
|
|
31
|
+
const [activation] = await db().select({
|
|
32
|
+
id: runnerActivationTokens.id,
|
|
33
|
+
workspaceId: providerRunners.workspaceId
|
|
34
|
+
}).from(runnerActivationTokens).innerJoin(providerRunners, eq(providerRunners.id, runnerActivationTokens.runnerInstanceId)).leftJoin(provisionerTokens, eq(provisionerTokens.id, providerRunners.provisionerId)).where(and(eq(runnerActivationTokens.hashedToken, hashOpaqueToken(rawToken)), isNull(runnerActivationTokens.consumedAt), isNull(runnerActivationTokens.revokedAt), gt(runnerActivationTokens.expiresAt, sql`now()`), or(isNull(provisionerTokens.id), isNull(provisionerTokens.revokedAt)), isNull(providerRunners.runnerSessionId))).limit(1);
|
|
35
|
+
if (!activation?.workspaceId) throw new ClientError('Invalid runner registration token', 'unauthorized', {
|
|
36
|
+
status: 401
|
|
37
|
+
});
|
|
38
|
+
request[RUNNER_CONTEXT_KEY] = {
|
|
39
|
+
kind: 'activation',
|
|
40
|
+
activationTokenId: activation.id,
|
|
41
|
+
workspaceId: activation.workspaceId
|
|
42
|
+
};
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
25
45
|
if (tokenType === 'ephemeralRegistrationToken') {
|
|
26
46
|
const ephemeralToken = await resolveEphemeralRegistrationTokenByHash(hashOpaqueToken(rawToken));
|
|
27
47
|
if (!ephemeralToken) {
|
|
@@ -40,7 +60,7 @@ export function createRunnerRegistrationTokenAuthMethod() {
|
|
|
40
60
|
workspaceId: ephemeralToken.workspaceId,
|
|
41
61
|
provisionerId: ephemeralToken.provisionerId,
|
|
42
62
|
reservationId: ephemeralToken.reservationId,
|
|
43
|
-
|
|
63
|
+
providerRunnerId: ephemeralToken.providerRunnerId
|
|
44
64
|
};
|
|
45
65
|
return;
|
|
46
66
|
}
|