@shipfox/api-runners 10.1.0 → 10.2.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 +4 -4
- package/CHANGELOG.md +20 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -13
- package/dist/config.js.map +1 -1
- package/dist/core/admin-runner-instances.d.ts +34 -0
- package/dist/core/admin-runner-instances.d.ts.map +1 -0
- package/dist/core/admin-runner-instances.js +58 -0
- package/dist/core/admin-runner-instances.js.map +1 -0
- package/dist/core/errors.d.ts +6 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +12 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/index.d.ts +3 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/provisioner-tokens.d.ts +33 -0
- package/dist/core/provisioner-tokens.d.ts.map +1 -1
- package/dist/core/provisioner-tokens.js +107 -2
- package/dist/core/provisioner-tokens.js.map +1 -1
- package/dist/db/admin-runner-instances.d.ts +34 -0
- package/dist/db/admin-runner-instances.d.ts.map +1 -0
- package/dist/db/admin-runner-instances.js +62 -0
- package/dist/db/admin-runner-instances.js.map +1 -0
- package/dist/db/db.d.ts +290 -0
- 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 -1
- 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-executions.d.ts.map +1 -1
- package/dist/db/job-executions.js +11 -0
- package/dist/db/job-executions.js.map +1 -1
- package/dist/db/provisioner-tokens.d.ts +38 -0
- package/dist/db/provisioner-tokens.d.ts.map +1 -1
- package/dist/db/provisioner-tokens.js +157 -3
- package/dist/db/provisioner-tokens.js.map +1 -1
- package/dist/db/reservations.d.ts.map +1 -1
- package/dist/db/reservations.js +60 -8
- package/dist/db/reservations.js.map +1 -1
- package/dist/db/schema/admin-command-results.d.ts +134 -0
- package/dist/db/schema/admin-command-results.d.ts.map +1 -0
- package/dist/db/schema/admin-command-results.js +18 -0
- package/dist/db/schema/admin-command-results.js.map +1 -0
- package/dist/db/schema/runner-instances.d.ts +17 -0
- package/dist/db/schema/runner-instances.d.ts.map +1 -1
- package/dist/db/schema/runner-instances.js +3 -0
- package/dist/db/schema/runner-instances.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/presentation/dto/admin-provisioner-token.d.ts +16 -0
- package/dist/presentation/dto/admin-provisioner-token.d.ts.map +1 -0
- package/dist/presentation/dto/admin-provisioner-token.js +22 -0
- package/dist/presentation/dto/admin-provisioner-token.js.map +1 -0
- package/dist/presentation/dto/admin-runner-instances.d.ts +23 -0
- package/dist/presentation/dto/admin-runner-instances.d.ts.map +1 -0
- package/dist/presentation/dto/admin-runner-instances.js +19 -0
- package/dist/presentation/dto/admin-runner-instances.js.map +1 -0
- package/dist/presentation/dto/index.d.ts +2 -0
- package/dist/presentation/dto/index.d.ts.map +1 -1
- package/dist/presentation/dto/index.js +2 -0
- package/dist/presentation/dto/index.js.map +1 -1
- package/dist/presentation/routes/admin-provisioner-tokens.d.ts +4 -0
- package/dist/presentation/routes/admin-provisioner-tokens.d.ts.map +1 -0
- package/dist/presentation/routes/admin-provisioner-tokens.js +167 -0
- package/dist/presentation/routes/admin-provisioner-tokens.js.map +1 -0
- package/dist/presentation/routes/admin-runner-instances.d.ts +3 -0
- package/dist/presentation/routes/admin-runner-instances.d.ts.map +1 -0
- package/dist/presentation/routes/admin-runner-instances.js +63 -0
- package/dist/presentation/routes/admin-runner-instances.js.map +1 -0
- package/dist/presentation/routes/index.d.ts.map +1 -1
- package/dist/presentation/routes/index.js +11 -1
- package/dist/presentation/routes/index.js.map +1 -1
- package/dist/presentation/routes/runner-enrollment.d.ts +1 -0
- package/dist/presentation/routes/runner-enrollment.d.ts.map +1 -1
- package/dist/presentation/routes/runner-enrollment.js +11 -4
- package/dist/presentation/routes/runner-enrollment.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/drizzle/0002_special_shadowcat.sql +1 -0
- package/drizzle/0003_flaky_sally_floyd.sql +11 -0
- package/drizzle/meta/0002_snapshot.json +2099 -0
- package/drizzle/meta/0003_snapshot.json +2178 -0
- package/drizzle/meta/_journal.json +14 -0
- package/package.json +8 -7
- package/src/config.test.ts +11 -0
- package/src/config.ts +19 -8
- package/src/core/admin-runner-instances.ts +125 -0
- package/src/core/errors.ts +14 -0
- package/src/core/index.ts +12 -0
- package/src/core/provisioner-tokens.ts +157 -1
- package/src/db/admin-runner-instances.ts +121 -0
- package/src/db/db.ts +2 -0
- package/src/db/index.ts +10 -0
- package/src/db/job-executions.test.ts +17 -0
- package/src/db/job-executions.ts +22 -0
- package/src/db/provisioner-tokens.ts +263 -9
- package/src/db/reservations.test.ts +253 -0
- package/src/db/reservations.ts +170 -15
- package/src/db/schema/admin-command-results.ts +29 -0
- package/src/db/schema/runner-instances.ts +1 -0
- package/src/index.test.ts +1 -1
- package/src/index.ts +6 -1
- package/src/presentation/dto/admin-provisioner-token.ts +23 -0
- package/src/presentation/dto/admin-runner-instances.ts +19 -0
- package/src/presentation/dto/index.ts +2 -0
- package/src/presentation/routes/admin-provisioner-tokens.test.ts +227 -0
- package/src/presentation/routes/admin-provisioner-tokens.ts +177 -0
- package/src/presentation/routes/admin-runner-instances.test.ts +671 -0
- package/src/presentation/routes/admin-runner-instances.ts +67 -0
- package/src/presentation/routes/index.ts +8 -0
- package/src/presentation/routes/runner-enrollment.test.ts +60 -2
- package/src/presentation/routes/runner-enrollment.ts +24 -4
- package/test/globalSetup.ts +1 -0
- package/tsconfig.build.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
$ shipfox-swc && shipfox-temporal-bundle dist/temporal/workflows/index.js
|
|
2
|
-
Successfully compiled:
|
|
3
|
-
2026-07-
|
|
2
|
+
Successfully compiled: 101 files with swc (446.04ms)
|
|
3
|
+
2026-07-28T16:59:20.736Z [INFO] asset workflow-bundle-0c3da2487e29e352d64e.js 3.17 MiB [emitted] [immutable] (name: main)
|
|
4
4
|
orphan modules 33.5 KiB [orphan] 21 modules
|
|
5
5
|
runtime modules 1.13 KiB 5 modules
|
|
6
6
|
modules by path ../../../node_modules/.pnpm/ 970 KiB 196 modules
|
|
@@ -14,6 +14,6 @@ optional modules 30 bytes [optional]
|
|
|
14
14
|
__temporal_custom_payload_converter (ignored) 15 bytes [optional] [built] [code generated]
|
|
15
15
|
__temporal_custom_failure_converter (ignored) 15 bytes [optional] [built] [code generated]
|
|
16
16
|
../../shared/node/temporal/dist/workflow-error-interceptor.js 1.21 KiB [built] [code generated]
|
|
17
|
-
webpack 5.107.2 compiled successfully in
|
|
18
|
-
2026-07-
|
|
17
|
+
webpack 5.107.2 compiled successfully in 5341 ms
|
|
18
|
+
2026-07-28T16:59:20.743Z [INFO] Workflow bundle created { size: '3.17MB' }
|
|
19
19
|
/home/runner/work/shipfox/shipfox/libs/api/runners/dist/temporal/workflows/index.js: 3326598 bytes
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @shipfox/api-runners
|
|
2
2
|
|
|
3
|
+
## 10.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- c9a188d: Add administrator creation, bounded inspection, and revocation for installation provisioner tokens.
|
|
8
|
+
- 8678943: Add a bounded administrator inventory for installation-managed runner instances.
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- 3e257f5: Binds idle enrolled runners to newly granted reservations so prewarmed capacity can activate queued jobs.
|
|
13
|
+
- 6be5a54: Make managed runner assignment polling use an explicit bounded wait and retry transport timeouts while the control session remains healthy.
|
|
14
|
+
- Updated dependencies [c9a188d]
|
|
15
|
+
- Updated dependencies [8678943]
|
|
16
|
+
- Updated dependencies [95d1456]
|
|
17
|
+
- Updated dependencies [0773b85]
|
|
18
|
+
- Updated dependencies [6be5a54]
|
|
19
|
+
- @shipfox/api-runners-dto@10.2.0
|
|
20
|
+
- @shipfox/api-auth-dto@10.2.0
|
|
21
|
+
- @shipfox/api-auth-context@10.2.0
|
|
22
|
+
|
|
3
23
|
## 10.1.0
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDA6HjB,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RUNNER_ASSIGNMENT_POLL_DEFAULT_WAIT_SECONDS } from '@shipfox/api-runners-dto';
|
|
1
2
|
import { bool, createConfig, num } from '@shipfox/config';
|
|
2
3
|
import { STUCK_JOB_THRESHOLD_SECONDS } from '#core/maintenance-policy.js';
|
|
3
4
|
const EPHEMERAL_REGISTRATION_TOKEN_TTL_HARD_MAX_SECONDS = 3600;
|
|
@@ -17,8 +18,8 @@ export const config = createConfig({
|
|
|
17
18
|
default: 300
|
|
18
19
|
}),
|
|
19
20
|
RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS: num({
|
|
20
|
-
desc: 'Maximum
|
|
21
|
-
default:
|
|
21
|
+
desc: 'Maximum server-side cap for the per-request runner assignment wait, in seconds. Managed runners request their own bounded wait with wait_seconds.',
|
|
22
|
+
default: RUNNER_ASSIGNMENT_POLL_DEFAULT_WAIT_SECONDS
|
|
22
23
|
}),
|
|
23
24
|
RUNNER_ASSIGNMENT_POLL_INTERVAL_MS: num({
|
|
24
25
|
desc: 'Delay between durable assignment reads while a runner-control session waits for an assignment, in milliseconds.',
|
|
@@ -150,17 +151,11 @@ for (const [name, value] of [
|
|
|
150
151
|
throw new Error(`${name} (${value}) must be a whole number of seconds between 1 and ${RUNNER_CONTROL_PLANE_TOKEN_TTL_HARD_MAX_SECONDS}.`);
|
|
151
152
|
}
|
|
152
153
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
[
|
|
159
|
-
'RUNNER_ASSIGNMENT_POLL_INTERVAL_MS',
|
|
160
|
-
config.RUNNER_ASSIGNMENT_POLL_INTERVAL_MS
|
|
161
|
-
]
|
|
162
|
-
]){
|
|
163
|
-
if (!Number.isInteger(value) || value < 0) throw new Error(`${name} (${value}) must be a whole number >= 0.`);
|
|
154
|
+
if (!Number.isInteger(config.RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS) || config.RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS < 1) {
|
|
155
|
+
throw new Error(`RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS (${config.RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS}) must be a whole number >= 1.`);
|
|
156
|
+
}
|
|
157
|
+
if (!Number.isInteger(config.RUNNER_ASSIGNMENT_POLL_INTERVAL_MS) || config.RUNNER_ASSIGNMENT_POLL_INTERVAL_MS < 0) {
|
|
158
|
+
throw new Error(`RUNNER_ASSIGNMENT_POLL_INTERVAL_MS (${config.RUNNER_ASSIGNMENT_POLL_INTERVAL_MS}) must be a whole number >= 0.`);
|
|
164
159
|
}
|
|
165
160
|
if (!Number.isInteger(config.REGISTRATION_TOKEN_BATCH_MAX) || config.REGISTRATION_TOKEN_BATCH_MAX < 1 || config.REGISTRATION_TOKEN_BATCH_MAX > REGISTRATION_TOKEN_BATCH_HARD_MAX) {
|
|
166
161
|
throw new Error(`REGISTRATION_TOKEN_BATCH_MAX (${config.REGISTRATION_TOKEN_BATCH_MAX}) must be a whole number between 1 and ${REGISTRATION_TOKEN_BATCH_HARD_MAX}.`);
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import {bool, createConfig, num} from '@shipfox/config';\nimport {STUCK_JOB_THRESHOLD_SECONDS} from '#core/maintenance-policy.js';\n\nconst EPHEMERAL_REGISTRATION_TOKEN_TTL_HARD_MAX_SECONDS = 3600;\nconst REGISTRATION_TOKEN_BATCH_HARD_MAX = 1000;\nconst RUNNER_CONTROL_PLANE_TOKEN_TTL_HARD_MAX_SECONDS = 3600;\n\nexport const config = createConfig({\n RUNNER_BOOTSTRAP_TOKEN_TTL_SECONDS: num({\n desc: 'Lifetime of a one-use runner bootstrap token in seconds. The token can only create one runner-control session before it expires.',\n default: 300,\n }),\n RUNNER_CONTROL_SESSION_TTL_SECONDS: num({\n desc: 'Lifetime of a pre-workspace runner-control session in seconds. This session can only enroll, attach its provider identity, and report its own liveness.',\n default: 3600,\n }),\n RUNNER_ACTIVATION_TOKEN_TTL_SECONDS: num({\n desc: 'Lifetime of a one-use activation token in seconds. The token is issued only to an assigned runner-control session and creates one workspace runner session.',\n default: 300,\n }),\n RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS: num({\n desc: 'Maximum time the runner assignment poll waits before returning no assignment, in seconds.',\n default: 30,\n }),\n RUNNER_ASSIGNMENT_POLL_INTERVAL_MS: num({\n desc: 'Delay between durable assignment reads while a runner-control session waits for an assignment, in milliseconds.',\n default: 250,\n }),\n EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS: num({\n desc: `Lifetime of a provisioner-minted runner registration token, in seconds. The token can be exchanged once by a runner before this time passes. Set this between 1 and ${EPHEMERAL_REGISTRATION_TOKEN_TTL_HARD_MAX_SECONDS}.`,\n default: 300,\n }),\n REGISTRATION_TOKEN_BATCH_MAX: num({\n desc: `Maximum number of runner registration tokens a provisioner can mint in one batch request. Set this between 1 and ${REGISTRATION_TOKEN_BATCH_HARD_MAX}.`,\n default: 500,\n }),\n PROVISIONER_MINT_RATE_LIMIT_MAX_REQUESTS: num({\n desc: 'Maximum number of batch runner registration token mint requests one provisioner can make per rate-limit window.',\n default: 120,\n }),\n PROVISIONER_MINT_RATE_LIMIT_WINDOW_SECONDS: num({\n desc: 'Rate-limit window for provisioner batch runner registration token mint requests, in seconds.',\n default: 60,\n }),\n EPHEMERAL_REGISTER_RATE_LIMIT_MAX_REQUESTS: num({\n desc: 'Maximum number of runner registration attempts one ephemeral registration token can make per rate-limit window.',\n default: 5,\n }),\n EPHEMERAL_REGISTER_RATE_LIMIT_WINDOW_SECONDS: num({\n desc: 'Rate-limit window for runner registration attempts with one ephemeral registration token, in seconds.',\n default: 60,\n }),\n RUNNERS_RATE_LIMIT_TIMEOUT_MS: num({\n desc: 'Maximum time, in milliseconds, a runners rate-limit storage check may wait before the request fails closed.',\n default: 250,\n }),\n RESERVATION_TTL_SECONDS: num({\n desc: 'Lifetime of a count-based runner reservation, in seconds. Expired reservations stop counting against queued demand.',\n default: 60,\n }),\n RESERVATION_LONG_POLL_MAX_WAIT_SECONDS: num({\n desc: 'Maximum time the provisioner demand poll endpoint waits for reservable demand before returning, in seconds.',\n default: 30,\n }),\n RESERVATION_POLL_INTERVAL_MS: num({\n desc: 'Initial interval between demand re-checks while a provisioner request is waiting, in milliseconds.',\n default: 1000,\n }),\n RESERVATION_POLL_MAX_INTERVAL_MS: num({\n desc: 'Maximum backoff interval between demand re-checks while a provisioner request is waiting, in milliseconds.',\n default: 5000,\n }),\n RUNNER_ACTIVE_WINDOW_SECONDS: num({\n desc: 'Time window, in seconds, used to list active runners from recent heartbeats and provisioned runner reports.',\n default: 60,\n }),\n RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS: num({\n desc: 'Time window, in seconds, after which a runner tool capability report is treated as stale. Set this higher than the runner heartbeat interval so active runners keep their advertised tools fresh.',\n default: 60,\n }),\n RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS: num({\n desc: 'Grace window, in seconds, before maintenance expires a claimed job that has not sent its first heartbeat. Set this lower than the normal stuck-job threshold so startup crashes release work quickly.',\n default: 60,\n }),\n RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS: num({\n desc: 'Grace window, in seconds, before reconcile marks an absent provisioned runner as terminated. Set this higher than the provisioner report interval so a transient empty or partial observed set does not kill a live runner.',\n default: 120,\n }),\n RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS: num({\n desc: 'Time, in seconds, after which a provisioned runner with no recent report, no live provisioner, no live runner session, and no running job is marked failed by backend maintenance.',\n default: 300,\n }),\n RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT: num({\n desc: 'Maximum number of stale provisioned runners the maintenance worker marks failed in one run. Higher values clear backlogs faster but hold database locks longer.',\n default: 100,\n }),\n RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS: num({\n desc: 'Minimum time, in seconds, between runner session liveness writes from job request polls. Set this lower than RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS so active idle runners stay fresh.',\n default: 10,\n }),\n RUNNER_SESSION_MANUAL_RETENTION_DAYS: num({\n desc: 'How long manual runner sessions are retained before maintenance deletes them, in days. Set this longer than AUTH_RUNNER_SESSION_TOKEN_EXPIRES_IN so a valid session token never outlives its row.',\n default: 30,\n }),\n RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS: num({\n desc: 'How long ephemeral runner sessions are retained before maintenance deletes them, in days. Set this longer than AUTH_RUNNER_SESSION_TOKEN_EXPIRES_IN so a valid session token never outlives its row.',\n default: 7,\n }),\n RUNNER_SESSION_GC_BATCH_SIZE: num({\n desc: 'Maximum number of expired runner sessions maintenance deletes in one pass.',\n default: 1000,\n }),\n RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS: num({\n desc: 'How long consumed or expired ephemeral registration tokens are retained for audit and debugging before maintenance deletes them, in days. Active tokens that are neither consumed nor expired are never deleted. This window is independent of the runner-session retention windows.',\n default: 7,\n }),\n RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE: num({\n desc: 'Maximum number of consumed or expired ephemeral registration tokens maintenance deletes in one pass.',\n default: 1000,\n }),\n PROVISIONER_ACTIVE_WINDOW_SECONDS: num({\n desc: 'Time window, in seconds, used to list active provisioners from recent authenticated requests.',\n default: 120,\n }),\n PROVISIONER_LAST_SEEN_THROTTLE_SECONDS: num({\n desc: 'Minimum time, in seconds, between last-seen writes for one provisioner token.',\n default: 10,\n }),\n PROVISIONED_RUNNER_COUNT_DIVERGENCE_TEMPLATE_KEY_LABEL_ENABLED: bool({\n desc: 'Whether runners_provider_runner_count_divergence includes template_key as a metric label. Use true or false. Defaults to false because template keys can create high-cardinality metric series. Set true only when template keys are bounded and stable.',\n default: false,\n }),\n});\n\nif (\n !Number.isInteger(config.EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS) ||\n config.EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS < 1 ||\n config.EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS >\n EPHEMERAL_REGISTRATION_TOKEN_TTL_HARD_MAX_SECONDS\n) {\n throw new Error(\n `EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS (${config.EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS}) must be a whole number of seconds between 1 and ${EPHEMERAL_REGISTRATION_TOKEN_TTL_HARD_MAX_SECONDS}.`,\n );\n}\n\nfor (const [name, value] of [\n ['RUNNER_BOOTSTRAP_TOKEN_TTL_SECONDS', config.RUNNER_BOOTSTRAP_TOKEN_TTL_SECONDS],\n ['RUNNER_CONTROL_SESSION_TTL_SECONDS', config.RUNNER_CONTROL_SESSION_TTL_SECONDS],\n ['RUNNER_ACTIVATION_TOKEN_TTL_SECONDS', config.RUNNER_ACTIVATION_TOKEN_TTL_SECONDS],\n] as const) {\n if (\n !Number.isInteger(value) ||\n value < 1 ||\n value > RUNNER_CONTROL_PLANE_TOKEN_TTL_HARD_MAX_SECONDS\n ) {\n throw new Error(\n `${name} (${value}) must be a whole number of seconds between 1 and ${RUNNER_CONTROL_PLANE_TOKEN_TTL_HARD_MAX_SECONDS}.`,\n );\n }\n}\n\nfor (const [name, value] of [\n ['RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS', config.RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS],\n ['RUNNER_ASSIGNMENT_POLL_INTERVAL_MS', config.RUNNER_ASSIGNMENT_POLL_INTERVAL_MS],\n] as const) {\n if (!Number.isInteger(value) || value < 0)\n throw new Error(`${name} (${value}) must be a whole number >= 0.`);\n}\n\nif (\n !Number.isInteger(config.REGISTRATION_TOKEN_BATCH_MAX) ||\n config.REGISTRATION_TOKEN_BATCH_MAX < 1 ||\n config.REGISTRATION_TOKEN_BATCH_MAX > REGISTRATION_TOKEN_BATCH_HARD_MAX\n) {\n throw new Error(\n `REGISTRATION_TOKEN_BATCH_MAX (${config.REGISTRATION_TOKEN_BATCH_MAX}) must be a whole number between 1 and ${REGISTRATION_TOKEN_BATCH_HARD_MAX}.`,\n );\n}\n\nfor (const [name, value] of [\n ['PROVISIONER_MINT_RATE_LIMIT_MAX_REQUESTS', config.PROVISIONER_MINT_RATE_LIMIT_MAX_REQUESTS],\n ['PROVISIONER_MINT_RATE_LIMIT_WINDOW_SECONDS', config.PROVISIONER_MINT_RATE_LIMIT_WINDOW_SECONDS],\n ['EPHEMERAL_REGISTER_RATE_LIMIT_MAX_REQUESTS', config.EPHEMERAL_REGISTER_RATE_LIMIT_MAX_REQUESTS],\n [\n 'EPHEMERAL_REGISTER_RATE_LIMIT_WINDOW_SECONDS',\n config.EPHEMERAL_REGISTER_RATE_LIMIT_WINDOW_SECONDS,\n ],\n ['RUNNERS_RATE_LIMIT_TIMEOUT_MS', config.RUNNERS_RATE_LIMIT_TIMEOUT_MS],\n] as const) {\n if (!Number.isInteger(value) || value < 1) {\n throw new Error(`${name} (${value}) must be a whole number >= 1.`);\n }\n}\n\nif (!Number.isInteger(config.RESERVATION_TTL_SECONDS) || config.RESERVATION_TTL_SECONDS < 1) {\n throw new Error(\n `RESERVATION_TTL_SECONDS (${config.RESERVATION_TTL_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RESERVATION_LONG_POLL_MAX_WAIT_SECONDS) ||\n config.RESERVATION_LONG_POLL_MAX_WAIT_SECONDS < 0\n) {\n throw new Error(\n `RESERVATION_LONG_POLL_MAX_WAIT_SECONDS (${config.RESERVATION_LONG_POLL_MAX_WAIT_SECONDS}) must be a whole number of seconds >= 0.`,\n );\n}\n\nif (\n !Number.isInteger(config.RESERVATION_POLL_INTERVAL_MS) ||\n config.RESERVATION_POLL_INTERVAL_MS < 1\n) {\n throw new Error(\n `RESERVATION_POLL_INTERVAL_MS (${config.RESERVATION_POLL_INTERVAL_MS}) must be a whole number of milliseconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RESERVATION_POLL_MAX_INTERVAL_MS) ||\n config.RESERVATION_POLL_MAX_INTERVAL_MS < config.RESERVATION_POLL_INTERVAL_MS\n) {\n throw new Error(\n `RESERVATION_POLL_MAX_INTERVAL_MS (${config.RESERVATION_POLL_MAX_INTERVAL_MS}) must be a whole number of milliseconds >= RESERVATION_POLL_INTERVAL_MS (${config.RESERVATION_POLL_INTERVAL_MS}).`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_ACTIVE_WINDOW_SECONDS) ||\n config.RUNNER_ACTIVE_WINDOW_SECONDS < 1\n) {\n throw new Error(\n `RUNNER_ACTIVE_WINDOW_SECONDS (${config.RUNNER_ACTIVE_WINDOW_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS) ||\n config.RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS < 1\n) {\n throw new Error(\n `RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS (${config.RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS) ||\n config.RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS < 1 ||\n config.RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS >= STUCK_JOB_THRESHOLD_SECONDS\n) {\n throw new Error(\n `RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS (${config.RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS}) must be a whole number of seconds >= 1 and < ${STUCK_JOB_THRESHOLD_SECONDS}.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS) ||\n config.RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS < 1\n) {\n throw new Error(\n `RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS (${config.RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS) ||\n config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS < 1\n) {\n throw new Error(\n `RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS (${config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT) ||\n config.RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT < 1\n) {\n throw new Error(\n `RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT (${config.RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT}) must be a whole number >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS) ||\n config.RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS < 1\n) {\n throw new Error(\n `RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS (${config.RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_SESSION_MANUAL_RETENTION_DAYS) ||\n config.RUNNER_SESSION_MANUAL_RETENTION_DAYS < 1\n) {\n throw new Error(\n `RUNNER_SESSION_MANUAL_RETENTION_DAYS (${config.RUNNER_SESSION_MANUAL_RETENTION_DAYS}) must be a whole number of days >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS) ||\n config.RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS < 1\n) {\n throw new Error(\n `RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS (${config.RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS}) must be a whole number of days >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_SESSION_GC_BATCH_SIZE) ||\n config.RUNNER_SESSION_GC_BATCH_SIZE < 1\n) {\n throw new Error(\n `RUNNER_SESSION_GC_BATCH_SIZE (${config.RUNNER_SESSION_GC_BATCH_SIZE}) must be a whole number >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS) ||\n config.RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS < 1\n) {\n throw new Error(\n `RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS (${config.RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS}) must be a whole number of days >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE) ||\n config.RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE < 1\n) {\n throw new Error(\n `RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE (${config.RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE}) must be a whole number >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.PROVISIONER_ACTIVE_WINDOW_SECONDS) ||\n config.PROVISIONER_ACTIVE_WINDOW_SECONDS < 1\n) {\n throw new Error(\n `PROVISIONER_ACTIVE_WINDOW_SECONDS (${config.PROVISIONER_ACTIVE_WINDOW_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.PROVISIONER_LAST_SEEN_THROTTLE_SECONDS) ||\n config.PROVISIONER_LAST_SEEN_THROTTLE_SECONDS < 1\n) {\n throw new Error(\n `PROVISIONER_LAST_SEEN_THROTTLE_SECONDS (${config.PROVISIONER_LAST_SEEN_THROTTLE_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS <=\n config.PROVISIONER_LAST_SEEN_THROTTLE_SECONDS\n) {\n throw new Error(\n `RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS (${config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS}) must be greater than PROVISIONER_LAST_SEEN_THROTTLE_SECONDS (${config.PROVISIONER_LAST_SEEN_THROTTLE_SECONDS}).`,\n );\n}\n\nif (\n config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS <=\n config.RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS\n) {\n throw new Error(\n `RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS (${config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS}) must be greater than RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS (${config.RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS}).`,\n );\n}\n"],"names":["bool","createConfig","num","STUCK_JOB_THRESHOLD_SECONDS","EPHEMERAL_REGISTRATION_TOKEN_TTL_HARD_MAX_SECONDS","REGISTRATION_TOKEN_BATCH_HARD_MAX","RUNNER_CONTROL_PLANE_TOKEN_TTL_HARD_MAX_SECONDS","config","RUNNER_BOOTSTRAP_TOKEN_TTL_SECONDS","desc","default","RUNNER_CONTROL_SESSION_TTL_SECONDS","RUNNER_ACTIVATION_TOKEN_TTL_SECONDS","RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS","RUNNER_ASSIGNMENT_POLL_INTERVAL_MS","EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS","REGISTRATION_TOKEN_BATCH_MAX","PROVISIONER_MINT_RATE_LIMIT_MAX_REQUESTS","PROVISIONER_MINT_RATE_LIMIT_WINDOW_SECONDS","EPHEMERAL_REGISTER_RATE_LIMIT_MAX_REQUESTS","EPHEMERAL_REGISTER_RATE_LIMIT_WINDOW_SECONDS","RUNNERS_RATE_LIMIT_TIMEOUT_MS","RESERVATION_TTL_SECONDS","RESERVATION_LONG_POLL_MAX_WAIT_SECONDS","RESERVATION_POLL_INTERVAL_MS","RESERVATION_POLL_MAX_INTERVAL_MS","RUNNER_ACTIVE_WINDOW_SECONDS","RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS","RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS","RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS","RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS","RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT","RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS","RUNNER_SESSION_MANUAL_RETENTION_DAYS","RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS","RUNNER_SESSION_GC_BATCH_SIZE","RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS","RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE","PROVISIONER_ACTIVE_WINDOW_SECONDS","PROVISIONER_LAST_SEEN_THROTTLE_SECONDS","PROVISIONED_RUNNER_COUNT_DIVERGENCE_TEMPLATE_KEY_LABEL_ENABLED","Number","isInteger","Error","name","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import {RUNNER_ASSIGNMENT_POLL_DEFAULT_WAIT_SECONDS} from '@shipfox/api-runners-dto';\nimport {bool, createConfig, num} from '@shipfox/config';\nimport {STUCK_JOB_THRESHOLD_SECONDS} from '#core/maintenance-policy.js';\n\nconst EPHEMERAL_REGISTRATION_TOKEN_TTL_HARD_MAX_SECONDS = 3600;\nconst REGISTRATION_TOKEN_BATCH_HARD_MAX = 1000;\nconst RUNNER_CONTROL_PLANE_TOKEN_TTL_HARD_MAX_SECONDS = 3600;\n\nexport const config = createConfig({\n RUNNER_BOOTSTRAP_TOKEN_TTL_SECONDS: num({\n desc: 'Lifetime of a one-use runner bootstrap token in seconds. The token can only create one runner-control session before it expires.',\n default: 300,\n }),\n RUNNER_CONTROL_SESSION_TTL_SECONDS: num({\n desc: 'Lifetime of a pre-workspace runner-control session in seconds. This session can only enroll, attach its provider identity, and report its own liveness.',\n default: 3600,\n }),\n RUNNER_ACTIVATION_TOKEN_TTL_SECONDS: num({\n desc: 'Lifetime of a one-use activation token in seconds. The token is issued only to an assigned runner-control session and creates one workspace runner session.',\n default: 300,\n }),\n RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS: num({\n desc: 'Maximum server-side cap for the per-request runner assignment wait, in seconds. Managed runners request their own bounded wait with wait_seconds.',\n default: RUNNER_ASSIGNMENT_POLL_DEFAULT_WAIT_SECONDS,\n }),\n RUNNER_ASSIGNMENT_POLL_INTERVAL_MS: num({\n desc: 'Delay between durable assignment reads while a runner-control session waits for an assignment, in milliseconds.',\n default: 250,\n }),\n EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS: num({\n desc: `Lifetime of a provisioner-minted runner registration token, in seconds. The token can be exchanged once by a runner before this time passes. Set this between 1 and ${EPHEMERAL_REGISTRATION_TOKEN_TTL_HARD_MAX_SECONDS}.`,\n default: 300,\n }),\n REGISTRATION_TOKEN_BATCH_MAX: num({\n desc: `Maximum number of runner registration tokens a provisioner can mint in one batch request. Set this between 1 and ${REGISTRATION_TOKEN_BATCH_HARD_MAX}.`,\n default: 500,\n }),\n PROVISIONER_MINT_RATE_LIMIT_MAX_REQUESTS: num({\n desc: 'Maximum number of batch runner registration token mint requests one provisioner can make per rate-limit window.',\n default: 120,\n }),\n PROVISIONER_MINT_RATE_LIMIT_WINDOW_SECONDS: num({\n desc: 'Rate-limit window for provisioner batch runner registration token mint requests, in seconds.',\n default: 60,\n }),\n EPHEMERAL_REGISTER_RATE_LIMIT_MAX_REQUESTS: num({\n desc: 'Maximum number of runner registration attempts one ephemeral registration token can make per rate-limit window.',\n default: 5,\n }),\n EPHEMERAL_REGISTER_RATE_LIMIT_WINDOW_SECONDS: num({\n desc: 'Rate-limit window for runner registration attempts with one ephemeral registration token, in seconds.',\n default: 60,\n }),\n RUNNERS_RATE_LIMIT_TIMEOUT_MS: num({\n desc: 'Maximum time, in milliseconds, a runners rate-limit storage check may wait before the request fails closed.',\n default: 250,\n }),\n RESERVATION_TTL_SECONDS: num({\n desc: 'Lifetime of a count-based runner reservation, in seconds. Expired reservations stop counting against queued demand.',\n default: 60,\n }),\n RESERVATION_LONG_POLL_MAX_WAIT_SECONDS: num({\n desc: 'Maximum time the provisioner demand poll endpoint waits for reservable demand before returning, in seconds.',\n default: 30,\n }),\n RESERVATION_POLL_INTERVAL_MS: num({\n desc: 'Initial interval between demand re-checks while a provisioner request is waiting, in milliseconds.',\n default: 1000,\n }),\n RESERVATION_POLL_MAX_INTERVAL_MS: num({\n desc: 'Maximum backoff interval between demand re-checks while a provisioner request is waiting, in milliseconds.',\n default: 5000,\n }),\n RUNNER_ACTIVE_WINDOW_SECONDS: num({\n desc: 'Time window, in seconds, used to list active runners from recent heartbeats and provisioned runner reports.',\n default: 60,\n }),\n RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS: num({\n desc: 'Time window, in seconds, after which a runner tool capability report is treated as stale. Set this higher than the runner heartbeat interval so active runners keep their advertised tools fresh.',\n default: 60,\n }),\n RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS: num({\n desc: 'Grace window, in seconds, before maintenance expires a claimed job that has not sent its first heartbeat. Set this lower than the normal stuck-job threshold so startup crashes release work quickly.',\n default: 60,\n }),\n RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS: num({\n desc: 'Grace window, in seconds, before reconcile marks an absent provisioned runner as terminated. Set this higher than the provisioner report interval so a transient empty or partial observed set does not kill a live runner.',\n default: 120,\n }),\n RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS: num({\n desc: 'Time, in seconds, after which a provisioned runner with no recent report, no live provisioner, no live runner session, and no running job is marked failed by backend maintenance.',\n default: 300,\n }),\n RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT: num({\n desc: 'Maximum number of stale provisioned runners the maintenance worker marks failed in one run. Higher values clear backlogs faster but hold database locks longer.',\n default: 100,\n }),\n RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS: num({\n desc: 'Minimum time, in seconds, between runner session liveness writes from job request polls. Set this lower than RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS so active idle runners stay fresh.',\n default: 10,\n }),\n RUNNER_SESSION_MANUAL_RETENTION_DAYS: num({\n desc: 'How long manual runner sessions are retained before maintenance deletes them, in days. Set this longer than AUTH_RUNNER_SESSION_TOKEN_EXPIRES_IN so a valid session token never outlives its row.',\n default: 30,\n }),\n RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS: num({\n desc: 'How long ephemeral runner sessions are retained before maintenance deletes them, in days. Set this longer than AUTH_RUNNER_SESSION_TOKEN_EXPIRES_IN so a valid session token never outlives its row.',\n default: 7,\n }),\n RUNNER_SESSION_GC_BATCH_SIZE: num({\n desc: 'Maximum number of expired runner sessions maintenance deletes in one pass.',\n default: 1000,\n }),\n RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS: num({\n desc: 'How long consumed or expired ephemeral registration tokens are retained for audit and debugging before maintenance deletes them, in days. Active tokens that are neither consumed nor expired are never deleted. This window is independent of the runner-session retention windows.',\n default: 7,\n }),\n RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE: num({\n desc: 'Maximum number of consumed or expired ephemeral registration tokens maintenance deletes in one pass.',\n default: 1000,\n }),\n PROVISIONER_ACTIVE_WINDOW_SECONDS: num({\n desc: 'Time window, in seconds, used to list active provisioners from recent authenticated requests.',\n default: 120,\n }),\n PROVISIONER_LAST_SEEN_THROTTLE_SECONDS: num({\n desc: 'Minimum time, in seconds, between last-seen writes for one provisioner token.',\n default: 10,\n }),\n PROVISIONED_RUNNER_COUNT_DIVERGENCE_TEMPLATE_KEY_LABEL_ENABLED: bool({\n desc: 'Whether runners_provider_runner_count_divergence includes template_key as a metric label. Use true or false. Defaults to false because template keys can create high-cardinality metric series. Set true only when template keys are bounded and stable.',\n default: false,\n }),\n});\n\nif (\n !Number.isInteger(config.EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS) ||\n config.EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS < 1 ||\n config.EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS >\n EPHEMERAL_REGISTRATION_TOKEN_TTL_HARD_MAX_SECONDS\n) {\n throw new Error(\n `EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS (${config.EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS}) must be a whole number of seconds between 1 and ${EPHEMERAL_REGISTRATION_TOKEN_TTL_HARD_MAX_SECONDS}.`,\n );\n}\n\nfor (const [name, value] of [\n ['RUNNER_BOOTSTRAP_TOKEN_TTL_SECONDS', config.RUNNER_BOOTSTRAP_TOKEN_TTL_SECONDS],\n ['RUNNER_CONTROL_SESSION_TTL_SECONDS', config.RUNNER_CONTROL_SESSION_TTL_SECONDS],\n ['RUNNER_ACTIVATION_TOKEN_TTL_SECONDS', config.RUNNER_ACTIVATION_TOKEN_TTL_SECONDS],\n] as const) {\n if (\n !Number.isInteger(value) ||\n value < 1 ||\n value > RUNNER_CONTROL_PLANE_TOKEN_TTL_HARD_MAX_SECONDS\n ) {\n throw new Error(\n `${name} (${value}) must be a whole number of seconds between 1 and ${RUNNER_CONTROL_PLANE_TOKEN_TTL_HARD_MAX_SECONDS}.`,\n );\n }\n}\n\nif (\n !Number.isInteger(config.RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS) ||\n config.RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS < 1\n) {\n throw new Error(\n `RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS (${config.RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS}) must be a whole number >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_ASSIGNMENT_POLL_INTERVAL_MS) ||\n config.RUNNER_ASSIGNMENT_POLL_INTERVAL_MS < 0\n) {\n throw new Error(\n `RUNNER_ASSIGNMENT_POLL_INTERVAL_MS (${config.RUNNER_ASSIGNMENT_POLL_INTERVAL_MS}) must be a whole number >= 0.`,\n );\n}\n\nif (\n !Number.isInteger(config.REGISTRATION_TOKEN_BATCH_MAX) ||\n config.REGISTRATION_TOKEN_BATCH_MAX < 1 ||\n config.REGISTRATION_TOKEN_BATCH_MAX > REGISTRATION_TOKEN_BATCH_HARD_MAX\n) {\n throw new Error(\n `REGISTRATION_TOKEN_BATCH_MAX (${config.REGISTRATION_TOKEN_BATCH_MAX}) must be a whole number between 1 and ${REGISTRATION_TOKEN_BATCH_HARD_MAX}.`,\n );\n}\n\nfor (const [name, value] of [\n ['PROVISIONER_MINT_RATE_LIMIT_MAX_REQUESTS', config.PROVISIONER_MINT_RATE_LIMIT_MAX_REQUESTS],\n ['PROVISIONER_MINT_RATE_LIMIT_WINDOW_SECONDS', config.PROVISIONER_MINT_RATE_LIMIT_WINDOW_SECONDS],\n ['EPHEMERAL_REGISTER_RATE_LIMIT_MAX_REQUESTS', config.EPHEMERAL_REGISTER_RATE_LIMIT_MAX_REQUESTS],\n [\n 'EPHEMERAL_REGISTER_RATE_LIMIT_WINDOW_SECONDS',\n config.EPHEMERAL_REGISTER_RATE_LIMIT_WINDOW_SECONDS,\n ],\n ['RUNNERS_RATE_LIMIT_TIMEOUT_MS', config.RUNNERS_RATE_LIMIT_TIMEOUT_MS],\n] as const) {\n if (!Number.isInteger(value) || value < 1) {\n throw new Error(`${name} (${value}) must be a whole number >= 1.`);\n }\n}\n\nif (!Number.isInteger(config.RESERVATION_TTL_SECONDS) || config.RESERVATION_TTL_SECONDS < 1) {\n throw new Error(\n `RESERVATION_TTL_SECONDS (${config.RESERVATION_TTL_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RESERVATION_LONG_POLL_MAX_WAIT_SECONDS) ||\n config.RESERVATION_LONG_POLL_MAX_WAIT_SECONDS < 0\n) {\n throw new Error(\n `RESERVATION_LONG_POLL_MAX_WAIT_SECONDS (${config.RESERVATION_LONG_POLL_MAX_WAIT_SECONDS}) must be a whole number of seconds >= 0.`,\n );\n}\n\nif (\n !Number.isInteger(config.RESERVATION_POLL_INTERVAL_MS) ||\n config.RESERVATION_POLL_INTERVAL_MS < 1\n) {\n throw new Error(\n `RESERVATION_POLL_INTERVAL_MS (${config.RESERVATION_POLL_INTERVAL_MS}) must be a whole number of milliseconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RESERVATION_POLL_MAX_INTERVAL_MS) ||\n config.RESERVATION_POLL_MAX_INTERVAL_MS < config.RESERVATION_POLL_INTERVAL_MS\n) {\n throw new Error(\n `RESERVATION_POLL_MAX_INTERVAL_MS (${config.RESERVATION_POLL_MAX_INTERVAL_MS}) must be a whole number of milliseconds >= RESERVATION_POLL_INTERVAL_MS (${config.RESERVATION_POLL_INTERVAL_MS}).`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_ACTIVE_WINDOW_SECONDS) ||\n config.RUNNER_ACTIVE_WINDOW_SECONDS < 1\n) {\n throw new Error(\n `RUNNER_ACTIVE_WINDOW_SECONDS (${config.RUNNER_ACTIVE_WINDOW_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS) ||\n config.RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS < 1\n) {\n throw new Error(\n `RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS (${config.RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS) ||\n config.RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS < 1 ||\n config.RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS >= STUCK_JOB_THRESHOLD_SECONDS\n) {\n throw new Error(\n `RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS (${config.RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS}) must be a whole number of seconds >= 1 and < ${STUCK_JOB_THRESHOLD_SECONDS}.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS) ||\n config.RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS < 1\n) {\n throw new Error(\n `RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS (${config.RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS) ||\n config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS < 1\n) {\n throw new Error(\n `RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS (${config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT) ||\n config.RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT < 1\n) {\n throw new Error(\n `RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT (${config.RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT}) must be a whole number >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS) ||\n config.RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS < 1\n) {\n throw new Error(\n `RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS (${config.RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_SESSION_MANUAL_RETENTION_DAYS) ||\n config.RUNNER_SESSION_MANUAL_RETENTION_DAYS < 1\n) {\n throw new Error(\n `RUNNER_SESSION_MANUAL_RETENTION_DAYS (${config.RUNNER_SESSION_MANUAL_RETENTION_DAYS}) must be a whole number of days >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS) ||\n config.RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS < 1\n) {\n throw new Error(\n `RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS (${config.RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS}) must be a whole number of days >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_SESSION_GC_BATCH_SIZE) ||\n config.RUNNER_SESSION_GC_BATCH_SIZE < 1\n) {\n throw new Error(\n `RUNNER_SESSION_GC_BATCH_SIZE (${config.RUNNER_SESSION_GC_BATCH_SIZE}) must be a whole number >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS) ||\n config.RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS < 1\n) {\n throw new Error(\n `RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS (${config.RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS}) must be a whole number of days >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE) ||\n config.RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE < 1\n) {\n throw new Error(\n `RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE (${config.RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE}) must be a whole number >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.PROVISIONER_ACTIVE_WINDOW_SECONDS) ||\n config.PROVISIONER_ACTIVE_WINDOW_SECONDS < 1\n) {\n throw new Error(\n `PROVISIONER_ACTIVE_WINDOW_SECONDS (${config.PROVISIONER_ACTIVE_WINDOW_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n !Number.isInteger(config.PROVISIONER_LAST_SEEN_THROTTLE_SECONDS) ||\n config.PROVISIONER_LAST_SEEN_THROTTLE_SECONDS < 1\n) {\n throw new Error(\n `PROVISIONER_LAST_SEEN_THROTTLE_SECONDS (${config.PROVISIONER_LAST_SEEN_THROTTLE_SECONDS}) must be a whole number of seconds >= 1.`,\n );\n}\n\nif (\n config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS <=\n config.PROVISIONER_LAST_SEEN_THROTTLE_SECONDS\n) {\n throw new Error(\n `RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS (${config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS}) must be greater than PROVISIONER_LAST_SEEN_THROTTLE_SECONDS (${config.PROVISIONER_LAST_SEEN_THROTTLE_SECONDS}).`,\n );\n}\n\nif (\n config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS <=\n config.RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS\n) {\n throw new Error(\n `RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS (${config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS}) must be greater than RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS (${config.RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS}).`,\n );\n}\n"],"names":["RUNNER_ASSIGNMENT_POLL_DEFAULT_WAIT_SECONDS","bool","createConfig","num","STUCK_JOB_THRESHOLD_SECONDS","EPHEMERAL_REGISTRATION_TOKEN_TTL_HARD_MAX_SECONDS","REGISTRATION_TOKEN_BATCH_HARD_MAX","RUNNER_CONTROL_PLANE_TOKEN_TTL_HARD_MAX_SECONDS","config","RUNNER_BOOTSTRAP_TOKEN_TTL_SECONDS","desc","default","RUNNER_CONTROL_SESSION_TTL_SECONDS","RUNNER_ACTIVATION_TOKEN_TTL_SECONDS","RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS","RUNNER_ASSIGNMENT_POLL_INTERVAL_MS","EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS","REGISTRATION_TOKEN_BATCH_MAX","PROVISIONER_MINT_RATE_LIMIT_MAX_REQUESTS","PROVISIONER_MINT_RATE_LIMIT_WINDOW_SECONDS","EPHEMERAL_REGISTER_RATE_LIMIT_MAX_REQUESTS","EPHEMERAL_REGISTER_RATE_LIMIT_WINDOW_SECONDS","RUNNERS_RATE_LIMIT_TIMEOUT_MS","RESERVATION_TTL_SECONDS","RESERVATION_LONG_POLL_MAX_WAIT_SECONDS","RESERVATION_POLL_INTERVAL_MS","RESERVATION_POLL_MAX_INTERVAL_MS","RUNNER_ACTIVE_WINDOW_SECONDS","RUNNER_TOOL_CAPABILITIES_STALE_AFTER_SECONDS","RUNNER_NO_FIRST_HEARTBEAT_GRACE_SECONDS","RUNNER_RECONCILE_TERMINATE_GRACE_SECONDS","RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS","RUNNER_STALE_PROVISIONED_RUNNER_REAPER_LIMIT","RUNNER_SESSION_LIVENESS_THROTTLE_SECONDS","RUNNER_SESSION_MANUAL_RETENTION_DAYS","RUNNER_SESSION_EPHEMERAL_RETENTION_DAYS","RUNNER_SESSION_GC_BATCH_SIZE","RUNNER_EPHEMERAL_TOKEN_RETENTION_DAYS","RUNNER_EPHEMERAL_TOKEN_GC_BATCH_SIZE","PROVISIONER_ACTIVE_WINDOW_SECONDS","PROVISIONER_LAST_SEEN_THROTTLE_SECONDS","PROVISIONED_RUNNER_COUNT_DIVERGENCE_TEMPLATE_KEY_LABEL_ENABLED","Number","isInteger","Error","name","value"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type AdministratorRunnerInstanceRow, type ListAdministratorRunnerInstancesParams, listAdministratorRunnerInstances as listAdministratorRunnerInstanceRows } from '#db/admin-runner-instances.js';
|
|
2
|
+
export type RunnerAdministratorLifecycleState = 'unassigned' | 'assigned' | 'activated' | 'claimed' | 'completed';
|
|
3
|
+
export type RunnerAdministratorEnrollmentState = 'pending' | 'enrolled' | 'activated';
|
|
4
|
+
export type RunnerAdministratorReconciliationStatus = 'current' | 'stale' | 'terminal' | 'unknown';
|
|
5
|
+
export interface RunnerAdministratorInstance {
|
|
6
|
+
id: string;
|
|
7
|
+
lifecycleState: RunnerAdministratorLifecycleState;
|
|
8
|
+
computeState: AdministratorRunnerInstanceRow['state'];
|
|
9
|
+
enrollmentState: RunnerAdministratorEnrollmentState;
|
|
10
|
+
assignmentPresence: 'assigned' | 'unassigned';
|
|
11
|
+
assignedWorkspace: {
|
|
12
|
+
id: string;
|
|
13
|
+
} | null;
|
|
14
|
+
labels: string[];
|
|
15
|
+
createdAt: Date;
|
|
16
|
+
lastHeartbeatAt: Date;
|
|
17
|
+
closureReason: string | null;
|
|
18
|
+
closedAt: Date | null;
|
|
19
|
+
provisioner: {
|
|
20
|
+
id: string;
|
|
21
|
+
scope: 'installation';
|
|
22
|
+
name: string | null;
|
|
23
|
+
};
|
|
24
|
+
reconciliationStatus: RunnerAdministratorReconciliationStatus;
|
|
25
|
+
}
|
|
26
|
+
export interface ListRunnerAdministratorInstancesParams extends ListAdministratorRunnerInstancesParams {
|
|
27
|
+
reconciliationStaleAfterSeconds?: number | undefined;
|
|
28
|
+
}
|
|
29
|
+
export interface ListRunnerAdministratorInstancesResult {
|
|
30
|
+
runners: RunnerAdministratorInstance[];
|
|
31
|
+
nextCursor: Awaited<ReturnType<typeof listAdministratorRunnerInstanceRows>>['nextCursor'];
|
|
32
|
+
}
|
|
33
|
+
export declare function listRunnerAdministratorInstances(params: ListRunnerAdministratorInstancesParams): Promise<ListRunnerAdministratorInstancesResult>;
|
|
34
|
+
//# sourceMappingURL=admin-runner-instances.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-runner-instances.d.ts","sourceRoot":"","sources":["../../src/core/admin-runner-instances.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,8BAA8B,EACnC,KAAK,sCAAsC,EAC3C,gCAAgC,IAAI,mCAAmC,EACxE,MAAM,+BAA+B,CAAC;AAGvC,MAAM,MAAM,iCAAiC,GACzC,YAAY,GACZ,UAAU,GACV,WAAW,GACX,SAAS,GACT,WAAW,CAAC;AAChB,MAAM,MAAM,kCAAkC,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;AACtF,MAAM,MAAM,uCAAuC,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAEnG,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,iCAAiC,CAAC;IAClD,YAAY,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACtD,eAAe,EAAE,kCAAkC,CAAC;IACpD,kBAAkB,EAAE,UAAU,GAAG,YAAY,CAAC;IAC9C,iBAAiB,EAAE;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,eAAe,EAAE,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,cAAc,CAAC;QACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KACrB,CAAC;IACF,oBAAoB,EAAE,uCAAuC,CAAC;CAC/D;AAED,MAAM,WAAW,sCACf,SAAQ,sCAAsC;IAC9C,+BAA+B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,sCAAsC;IACrD,OAAO,EAAE,2BAA2B,EAAE,CAAC;IACvC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,mCAAmC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;CAC3F;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,sCAAsC,GAC7C,OAAO,CAAC,sCAAsC,CAAC,CAajD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { config } from '#config.js';
|
|
2
|
+
import { listAdministratorRunnerInstances as listAdministratorRunnerInstanceRows } from '#db/admin-runner-instances.js';
|
|
3
|
+
import { isTerminalState } from '#db/runner-instances.js';
|
|
4
|
+
export async function listRunnerAdministratorInstances(params) {
|
|
5
|
+
const result = await listAdministratorRunnerInstanceRows(params);
|
|
6
|
+
const staleAfterSeconds = params.reconciliationStaleAfterSeconds ?? config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS;
|
|
7
|
+
const now = new Date();
|
|
8
|
+
return {
|
|
9
|
+
runners: result.runners.map((row)=>toRunnerAdministratorInstance(row, {
|
|
10
|
+
now,
|
|
11
|
+
staleAfterSeconds
|
|
12
|
+
})),
|
|
13
|
+
nextCursor: result.nextCursor
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function toRunnerAdministratorInstance(row, params) {
|
|
17
|
+
const isAssigned = row.workspaceId !== null;
|
|
18
|
+
const isActivated = row.runnerSessionId !== null;
|
|
19
|
+
const hasClaim = row.firstClaimedAt !== null;
|
|
20
|
+
const isTerminal = isTerminalState(row.state);
|
|
21
|
+
return {
|
|
22
|
+
id: row.id,
|
|
23
|
+
lifecycleState: !isAssigned ? 'unassigned' : isTerminal ? 'completed' : !isActivated ? 'assigned' : !hasClaim ? 'activated' : 'claimed',
|
|
24
|
+
computeState: row.state,
|
|
25
|
+
enrollmentState: isActivated ? 'activated' : row.hasActiveControlSession ? 'enrolled' : 'pending',
|
|
26
|
+
assignmentPresence: isAssigned ? 'assigned' : 'unassigned',
|
|
27
|
+
assignedWorkspace: row.workspaceId ? {
|
|
28
|
+
id: row.workspaceId
|
|
29
|
+
} : null,
|
|
30
|
+
labels: row.labels,
|
|
31
|
+
createdAt: row.createdAt,
|
|
32
|
+
lastHeartbeatAt: row.reportedAt,
|
|
33
|
+
closureReason: row.reason,
|
|
34
|
+
closedAt: closedAt(row),
|
|
35
|
+
provisioner: {
|
|
36
|
+
id: row.provisionerId,
|
|
37
|
+
scope: 'installation',
|
|
38
|
+
name: row.provisionerName
|
|
39
|
+
},
|
|
40
|
+
reconciliationStatus: reconciliationStatus(row, params)
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function closedAt(row) {
|
|
44
|
+
if (row.state === 'stopped') return row.stoppedAt;
|
|
45
|
+
if (row.state === 'failed') return row.failedAt;
|
|
46
|
+
if (row.state === 'terminated') return row.terminatedAt;
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
function reconciliationStatus(row, params) {
|
|
50
|
+
if (isTerminalState(row.state)) return 'terminal';
|
|
51
|
+
if (!row.provisionerLastSeenAt) return 'unknown';
|
|
52
|
+
const cutoff = params.now.getTime() - params.staleAfterSeconds * 1000;
|
|
53
|
+
const reportIsStale = row.reportedAt.getTime() <= cutoff;
|
|
54
|
+
const provisionerIsStale = row.provisionerLastSeenAt.getTime() <= cutoff;
|
|
55
|
+
return reportIsStale || provisionerIsStale ? 'stale' : 'current';
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=admin-runner-instances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/admin-runner-instances.ts"],"sourcesContent":["import {config} from '#config.js';\nimport {\n type AdministratorRunnerInstanceRow,\n type ListAdministratorRunnerInstancesParams,\n listAdministratorRunnerInstances as listAdministratorRunnerInstanceRows,\n} from '#db/admin-runner-instances.js';\nimport {isTerminalState} from '#db/runner-instances.js';\n\nexport type RunnerAdministratorLifecycleState =\n | 'unassigned'\n | 'assigned'\n | 'activated'\n | 'claimed'\n | 'completed';\nexport type RunnerAdministratorEnrollmentState = 'pending' | 'enrolled' | 'activated';\nexport type RunnerAdministratorReconciliationStatus = 'current' | 'stale' | 'terminal' | 'unknown';\n\nexport interface RunnerAdministratorInstance {\n id: string;\n lifecycleState: RunnerAdministratorLifecycleState;\n computeState: AdministratorRunnerInstanceRow['state'];\n enrollmentState: RunnerAdministratorEnrollmentState;\n assignmentPresence: 'assigned' | 'unassigned';\n assignedWorkspace: {id: string} | null;\n labels: string[];\n createdAt: Date;\n lastHeartbeatAt: Date;\n closureReason: string | null;\n closedAt: Date | null;\n provisioner: {\n id: string;\n scope: 'installation';\n name: string | null;\n };\n reconciliationStatus: RunnerAdministratorReconciliationStatus;\n}\n\nexport interface ListRunnerAdministratorInstancesParams\n extends ListAdministratorRunnerInstancesParams {\n reconciliationStaleAfterSeconds?: number | undefined;\n}\n\nexport interface ListRunnerAdministratorInstancesResult {\n runners: RunnerAdministratorInstance[];\n nextCursor: Awaited<ReturnType<typeof listAdministratorRunnerInstanceRows>>['nextCursor'];\n}\n\nexport async function listRunnerAdministratorInstances(\n params: ListRunnerAdministratorInstancesParams,\n): Promise<ListRunnerAdministratorInstancesResult> {\n const result = await listAdministratorRunnerInstanceRows(params);\n const staleAfterSeconds =\n params.reconciliationStaleAfterSeconds ??\n config.RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS;\n const now = new Date();\n\n return {\n runners: result.runners.map((row) =>\n toRunnerAdministratorInstance(row, {now, staleAfterSeconds}),\n ),\n nextCursor: result.nextCursor,\n };\n}\n\nfunction toRunnerAdministratorInstance(\n row: AdministratorRunnerInstanceRow,\n params: {now: Date; staleAfterSeconds: number},\n): RunnerAdministratorInstance {\n const isAssigned = row.workspaceId !== null;\n const isActivated = row.runnerSessionId !== null;\n const hasClaim = row.firstClaimedAt !== null;\n const isTerminal = isTerminalState(row.state);\n\n return {\n id: row.id,\n lifecycleState: !isAssigned\n ? 'unassigned'\n : isTerminal\n ? 'completed'\n : !isActivated\n ? 'assigned'\n : !hasClaim\n ? 'activated'\n : 'claimed',\n computeState: row.state,\n enrollmentState: isActivated\n ? 'activated'\n : row.hasActiveControlSession\n ? 'enrolled'\n : 'pending',\n assignmentPresence: isAssigned ? 'assigned' : 'unassigned',\n assignedWorkspace: row.workspaceId ? {id: row.workspaceId} : null,\n labels: row.labels,\n createdAt: row.createdAt,\n lastHeartbeatAt: row.reportedAt,\n closureReason: row.reason,\n closedAt: closedAt(row),\n provisioner: {\n id: row.provisionerId,\n scope: 'installation',\n name: row.provisionerName,\n },\n reconciliationStatus: reconciliationStatus(row, params),\n };\n}\n\nfunction closedAt(row: AdministratorRunnerInstanceRow): Date | null {\n if (row.state === 'stopped') return row.stoppedAt;\n if (row.state === 'failed') return row.failedAt;\n if (row.state === 'terminated') return row.terminatedAt;\n return null;\n}\n\nfunction reconciliationStatus(\n row: AdministratorRunnerInstanceRow,\n params: {now: Date; staleAfterSeconds: number},\n): RunnerAdministratorReconciliationStatus {\n if (isTerminalState(row.state)) return 'terminal';\n if (!row.provisionerLastSeenAt) return 'unknown';\n\n const cutoff = params.now.getTime() - params.staleAfterSeconds * 1000;\n const reportIsStale = row.reportedAt.getTime() <= cutoff;\n const provisionerIsStale = row.provisionerLastSeenAt.getTime() <= cutoff;\n return reportIsStale || provisionerIsStale ? 'stale' : 'current';\n}\n"],"names":["config","listAdministratorRunnerInstances","listAdministratorRunnerInstanceRows","isTerminalState","listRunnerAdministratorInstances","params","result","staleAfterSeconds","reconciliationStaleAfterSeconds","RUNNER_STALE_PROVISIONED_RUNNER_THRESHOLD_SECONDS","now","Date","runners","map","row","toRunnerAdministratorInstance","nextCursor","isAssigned","workspaceId","isActivated","runnerSessionId","hasClaim","firstClaimedAt","isTerminal","state","id","lifecycleState","computeState","enrollmentState","hasActiveControlSession","assignmentPresence","assignedWorkspace","labels","createdAt","lastHeartbeatAt","reportedAt","closureReason","reason","closedAt","provisioner","provisionerId","scope","name","provisionerName","reconciliationStatus","stoppedAt","failedAt","terminatedAt","provisionerLastSeenAt","cutoff","getTime","reportIsStale","provisionerIsStale"],"mappings":"AAAA,SAAQA,MAAM,QAAO,aAAa;AAClC,SAGEC,oCAAoCC,mCAAmC,QAClE,gCAAgC;AACvC,SAAQC,eAAe,QAAO,0BAA0B;AAyCxD,OAAO,eAAeC,iCACpBC,MAA8C;IAE9C,MAAMC,SAAS,MAAMJ,oCAAoCG;IACzD,MAAME,oBACJF,OAAOG,+BAA+B,IACtCR,OAAOS,iDAAiD;IAC1D,MAAMC,MAAM,IAAIC;IAEhB,OAAO;QACLC,SAASN,OAAOM,OAAO,CAACC,GAAG,CAAC,CAACC,MAC3BC,8BAA8BD,KAAK;gBAACJ;gBAAKH;YAAiB;QAE5DS,YAAYV,OAAOU,UAAU;IAC/B;AACF;AAEA,SAASD,8BACPD,GAAmC,EACnCT,MAA8C;IAE9C,MAAMY,aAAaH,IAAII,WAAW,KAAK;IACvC,MAAMC,cAAcL,IAAIM,eAAe,KAAK;IAC5C,MAAMC,WAAWP,IAAIQ,cAAc,KAAK;IACxC,MAAMC,aAAapB,gBAAgBW,IAAIU,KAAK;IAE5C,OAAO;QACLC,IAAIX,IAAIW,EAAE;QACVC,gBAAgB,CAACT,aACb,eACAM,aACE,cACA,CAACJ,cACC,aACA,CAACE,WACC,cACA;QACVM,cAAcb,IAAIU,KAAK;QACvBI,iBAAiBT,cACb,cACAL,IAAIe,uBAAuB,GACzB,aACA;QACNC,oBAAoBb,aAAa,aAAa;QAC9Cc,mBAAmBjB,IAAII,WAAW,GAAG;YAACO,IAAIX,IAAII,WAAW;QAAA,IAAI;QAC7Dc,QAAQlB,IAAIkB,MAAM;QAClBC,WAAWnB,IAAImB,SAAS;QACxBC,iBAAiBpB,IAAIqB,UAAU;QAC/BC,eAAetB,IAAIuB,MAAM;QACzBC,UAAUA,SAASxB;QACnByB,aAAa;YACXd,IAAIX,IAAI0B,aAAa;YACrBC,OAAO;YACPC,MAAM5B,IAAI6B,eAAe;QAC3B;QACAC,sBAAsBA,qBAAqB9B,KAAKT;IAClD;AACF;AAEA,SAASiC,SAASxB,GAAmC;IACnD,IAAIA,IAAIU,KAAK,KAAK,WAAW,OAAOV,IAAI+B,SAAS;IACjD,IAAI/B,IAAIU,KAAK,KAAK,UAAU,OAAOV,IAAIgC,QAAQ;IAC/C,IAAIhC,IAAIU,KAAK,KAAK,cAAc,OAAOV,IAAIiC,YAAY;IACvD,OAAO;AACT;AAEA,SAASH,qBACP9B,GAAmC,EACnCT,MAA8C;IAE9C,IAAIF,gBAAgBW,IAAIU,KAAK,GAAG,OAAO;IACvC,IAAI,CAACV,IAAIkC,qBAAqB,EAAE,OAAO;IAEvC,MAAMC,SAAS5C,OAAOK,GAAG,CAACwC,OAAO,KAAK7C,OAAOE,iBAAiB,GAAG;IACjE,MAAM4C,gBAAgBrC,IAAIqB,UAAU,CAACe,OAAO,MAAMD;IAClD,MAAMG,qBAAqBtC,IAAIkC,qBAAqB,CAACE,OAAO,MAAMD;IAClE,OAAOE,iBAAiBC,qBAAqB,UAAU;AACzD"}
|
package/dist/core/errors.d.ts
CHANGED
|
@@ -7,6 +7,12 @@ export declare class ManualRegistrationTokenNotFoundError extends Error {
|
|
|
7
7
|
export declare class ProvisionerTokenNotFoundError extends Error {
|
|
8
8
|
constructor(tokenId: string);
|
|
9
9
|
}
|
|
10
|
+
export declare class ProvisionerAdminIdempotencyKeyReuseError extends Error {
|
|
11
|
+
constructor();
|
|
12
|
+
}
|
|
13
|
+
export declare class ProvisionerAdminIdempotencyReplayUnavailableError extends Error {
|
|
14
|
+
constructor();
|
|
15
|
+
}
|
|
10
16
|
export declare class EmptyRunnerLabelsError extends Error {
|
|
11
17
|
constructor();
|
|
12
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,gCAAiC,SAAQ,KAAK;gBAC7C,cAAc,EAAE,MAAM;CAInC;AAED,qBAAa,oCAAqC,SAAQ,KAAK;gBACjD,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAED,qBAAa,wBAAyB,SAAQ,KAAK;;CAKlD;AAED,qBAAa,8BAA+B,SAAQ,KAAK;aAC3B,gBAAgB,EAAE,MAAM;gBAAxB,gBAAgB,EAAE,MAAM;CAIrD;AAED,qBAAa,6BAA8B,SAAQ,KAAK;aAC1B,gBAAgB,EAAE,MAAM;gBAAxB,gBAAgB,EAAE,MAAM;CAIrD;AAED,qBAAa,uCAAwC,SAAQ,KAAK;aAE9C,gBAAgB,EAAE,MAAM;aACxB,WAAW,EAAE,MAAM;gBADnB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM;CAOtC;AAED,qBAAa,2CAA4C,SAAQ,KAAK;aAElD,WAAW,EAAE,MAAM;aACnB,aAAa,EAAE,MAAM;aACrB,gBAAgB,EAAE,MAAM;gBAFxB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM;CAO3C;AAED,qBAAa,wBAAyB,SAAQ,KAAK;aACrB,aAAa,EAAE,MAAM;gBAArB,aAAa,EAAE,MAAM;CAIlD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;aACpB,aAAa,EAAE,MAAM;gBAArB,aAAa,EAAE,MAAM;CAIlD;AAED,qBAAa,gCAAiC,SAAQ,KAAK;aAC7B,gBAAgB,EAAE,MAAM;gBAAxB,gBAAgB,EAAE,MAAM;CAIrD;AACD,qBAAa,kCAAmC,SAAQ,KAAK;aAC/B,gBAAgB,EAAE,MAAM;gBAAxB,gBAAgB,EAAE,MAAM;CAIrD;AACD,qBAAa,+BAAgC,SAAQ,KAAK;aAC5B,aAAa,EAAE,MAAM;gBAArB,aAAa,EAAE,MAAM;CAIlD;AAED,qBAAa,mCAAoC,SAAQ,KAAK;aAE1C,SAAS,EAAE,MAAM;aACjB,GAAG,EAAE,MAAM;gBADX,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM;CAO9B;AAED,qBAAa,6CAA8C,SAAQ,KAAK;aAEpD,SAAS,EAAE,MAAM;aACjB,gBAAgB,EAAE,MAAM;aACxB,aAAa,EAAE,MAAM;gBAFrB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,aAAa,GAAE,MAAU;CAO5C;AAED,qBAAa,2CAA4C,SAAQ,KAAK;aACxC,iBAAiB,EAAE,MAAM,EAAE;gBAA3B,iBAAiB,EAAE,MAAM,EAAE;CAMxD;AAED,qBAAa,2BAA4B,SAAQ,KAAK;aACxB,eAAe,EAAE,MAAM;gBAAvB,eAAe,EAAE,MAAM;CAIpD"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,gCAAiC,SAAQ,KAAK;gBAC7C,cAAc,EAAE,MAAM;CAInC;AAED,qBAAa,oCAAqC,SAAQ,KAAK;gBACjD,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,wCAAyC,SAAQ,KAAK;;CAKlE;AAED,qBAAa,iDAAkD,SAAQ,KAAK;;CAK3E;AAED,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAED,qBAAa,wBAAyB,SAAQ,KAAK;;CAKlD;AAED,qBAAa,8BAA+B,SAAQ,KAAK;aAC3B,gBAAgB,EAAE,MAAM;gBAAxB,gBAAgB,EAAE,MAAM;CAIrD;AAED,qBAAa,6BAA8B,SAAQ,KAAK;aAC1B,gBAAgB,EAAE,MAAM;gBAAxB,gBAAgB,EAAE,MAAM;CAIrD;AAED,qBAAa,uCAAwC,SAAQ,KAAK;aAE9C,gBAAgB,EAAE,MAAM;aACxB,WAAW,EAAE,MAAM;gBADnB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM;CAOtC;AAED,qBAAa,2CAA4C,SAAQ,KAAK;aAElD,WAAW,EAAE,MAAM;aACnB,aAAa,EAAE,MAAM;aACrB,gBAAgB,EAAE,MAAM;gBAFxB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM;CAO3C;AAED,qBAAa,wBAAyB,SAAQ,KAAK;aACrB,aAAa,EAAE,MAAM;gBAArB,aAAa,EAAE,MAAM;CAIlD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;aACpB,aAAa,EAAE,MAAM;gBAArB,aAAa,EAAE,MAAM;CAIlD;AAED,qBAAa,gCAAiC,SAAQ,KAAK;aAC7B,gBAAgB,EAAE,MAAM;gBAAxB,gBAAgB,EAAE,MAAM;CAIrD;AACD,qBAAa,kCAAmC,SAAQ,KAAK;aAC/B,gBAAgB,EAAE,MAAM;gBAAxB,gBAAgB,EAAE,MAAM;CAIrD;AACD,qBAAa,+BAAgC,SAAQ,KAAK;aAC5B,aAAa,EAAE,MAAM;gBAArB,aAAa,EAAE,MAAM;CAIlD;AAED,qBAAa,mCAAoC,SAAQ,KAAK;aAE1C,SAAS,EAAE,MAAM;aACjB,GAAG,EAAE,MAAM;gBADX,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM;CAO9B;AAED,qBAAa,6CAA8C,SAAQ,KAAK;aAEpD,SAAS,EAAE,MAAM;aACjB,gBAAgB,EAAE,MAAM;aACxB,aAAa,EAAE,MAAM;gBAFrB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,aAAa,GAAE,MAAU;CAO5C;AAED,qBAAa,2CAA4C,SAAQ,KAAK;aACxC,iBAAiB,EAAE,MAAM,EAAE;gBAA3B,iBAAiB,EAAE,MAAM,EAAE;CAMxD;AAED,qBAAa,2BAA4B,SAAQ,KAAK;aACxB,eAAe,EAAE,MAAM;gBAAvB,eAAe,EAAE,MAAM;CAIpD"}
|
package/dist/core/errors.js
CHANGED
|
@@ -16,6 +16,18 @@ export class ProvisionerTokenNotFoundError extends Error {
|
|
|
16
16
|
this.name = 'ProvisionerTokenNotFoundError';
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
+
export class ProvisionerAdminIdempotencyKeyReuseError extends Error {
|
|
20
|
+
constructor(){
|
|
21
|
+
super('Idempotency-Key was already used for a different provisioner token command');
|
|
22
|
+
this.name = 'ProvisionerAdminIdempotencyKeyReuseError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class ProvisionerAdminIdempotencyReplayUnavailableError extends Error {
|
|
26
|
+
constructor(){
|
|
27
|
+
super('Idempotency-Key replay cannot reproduce the original provisioner token');
|
|
28
|
+
this.name = 'ProvisionerAdminIdempotencyReplayUnavailableError';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
19
31
|
export class EmptyRunnerLabelsError extends Error {
|
|
20
32
|
constructor(){
|
|
21
33
|
super('Runner labels cannot be empty');
|
package/dist/core/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/errors.ts"],"sourcesContent":["export class RunningJobExecutionNotFoundError extends Error {\n constructor(jobExecutionId: string) {\n super(`Running job execution not found: ${jobExecutionId}`);\n this.name = 'RunningJobExecutionNotFoundError';\n }\n}\n\nexport class ManualRegistrationTokenNotFoundError extends Error {\n constructor(tokenId: string) {\n super(`Manual registration token not found: ${tokenId}`);\n this.name = 'ManualRegistrationTokenNotFoundError';\n }\n}\n\nexport class ProvisionerTokenNotFoundError extends Error {\n constructor(tokenId: string) {\n super(`Provisioner token not found: ${tokenId}`);\n this.name = 'ProvisionerTokenNotFoundError';\n }\n}\n\nexport class EmptyRunnerLabelsError extends Error {\n constructor() {\n super('Runner labels cannot be empty');\n this.name = 'EmptyRunnerLabelsError';\n }\n}\n\nexport class EmptyRequiredLabelsError extends Error {\n constructor() {\n super('Required labels cannot be empty');\n this.name = 'EmptyRequiredLabelsError';\n }\n}\n\nexport class RegistrationTokenConsumedError extends Error {\n constructor(public readonly ephemeralTokenId: string) {\n super(`Ephemeral registration token has already been consumed: ${ephemeralTokenId}`);\n this.name = 'RegistrationTokenConsumedError';\n }\n}\n\nexport class RegistrationTokenExpiredError extends Error {\n constructor(public readonly ephemeralTokenId: string) {\n super(`Ephemeral registration token has expired: ${ephemeralTokenId}`);\n this.name = 'RegistrationTokenExpiredError';\n }\n}\n\nexport class RegistrationTokenWorkspaceMismatchError extends Error {\n constructor(\n public readonly ephemeralTokenId: string,\n public readonly workspaceId: string,\n ) {\n super(\n `Ephemeral registration token ${ephemeralTokenId} does not belong to workspace ${workspaceId}`,\n );\n this.name = 'RegistrationTokenWorkspaceMismatchError';\n }\n}\n\nexport class ActiveEphemeralRegistrationTokenExistsError extends Error {\n constructor(\n public readonly workspaceId: string,\n public readonly provisionerId: string,\n public readonly providerRunnerId: string,\n ) {\n super(\n `Active ephemeral registration token already exists for provisioned runner ${providerRunnerId} in workspace ${workspaceId}`,\n );\n this.name = 'ActiveEphemeralRegistrationTokenExistsError';\n }\n}\n\nexport class ReservationNotFoundError extends Error {\n constructor(public readonly reservationId: string) {\n super(`Reservation not found: ${reservationId}`);\n this.name = 'ReservationNotFoundError';\n }\n}\n\nexport class ReservationExpiredError extends Error {\n constructor(public readonly reservationId: string) {\n super(`Reservation has expired: ${reservationId}`);\n this.name = 'ReservationExpiredError';\n }\n}\n\nexport class RunnerInstanceNotAssignableError extends Error {\n constructor(public readonly runnerInstanceId: string) {\n super(`Runner instance cannot be assigned: ${runnerInstanceId}`);\n this.name = 'RunnerInstanceNotAssignableError';\n }\n}\nexport class RunnerInstanceAlreadyAssignedError extends Error {\n constructor(public readonly runnerInstanceId: string) {\n super(`Runner instance is already assigned: ${runnerInstanceId}`);\n this.name = 'RunnerInstanceAlreadyAssignedError';\n }\n}\nexport class ReservationAlreadyAssignedError extends Error {\n constructor(public readonly reservationId: string) {\n super(`Reservation is already assigned: ${reservationId}`);\n this.name = 'ReservationAlreadyAssignedError';\n }\n}\n\nexport class RegistrationTokenBatchTooLargeError extends Error {\n constructor(\n public readonly requested: number,\n public readonly max: number,\n ) {\n super(\n `Registration token batch requested ${requested} provisioned runners, exceeding max ${max}`,\n );\n this.name = 'RegistrationTokenBatchTooLargeError';\n }\n}\n\nexport class RegistrationTokenBatchExceedsReservationError extends Error {\n constructor(\n public readonly requested: number,\n public readonly reservationCount: number,\n public readonly alreadyMinted: number = 0,\n ) {\n super(\n `Registration token batch requested ${requested} provisioned runners with ${alreadyMinted} already minted, exceeding reservation count ${reservationCount}`,\n );\n this.name = 'RegistrationTokenBatchExceedsReservationError';\n }\n}\n\nexport class ActiveEphemeralRegistrationTokensExistError extends Error {\n constructor(public readonly providerRunnerIds: string[]) {\n super(\n `Active ephemeral registration tokens already exist for provisioned runners: ${providerRunnerIds.join(', ')}`,\n );\n this.name = 'ActiveEphemeralRegistrationTokensExistError';\n }\n}\n\nexport class RunnerSessionExhaustedError extends Error {\n constructor(public readonly runnerSessionId: string) {\n super(`Runner session claim limit exhausted: ${runnerSessionId}`);\n this.name = 'RunnerSessionExhaustedError';\n }\n}\n"],"names":["RunningJobExecutionNotFoundError","Error","jobExecutionId","name","ManualRegistrationTokenNotFoundError","tokenId","ProvisionerTokenNotFoundError","EmptyRunnerLabelsError","EmptyRequiredLabelsError","RegistrationTokenConsumedError","ephemeralTokenId","RegistrationTokenExpiredError","RegistrationTokenWorkspaceMismatchError","workspaceId","ActiveEphemeralRegistrationTokenExistsError","provisionerId","providerRunnerId","ReservationNotFoundError","reservationId","ReservationExpiredError","RunnerInstanceNotAssignableError","runnerInstanceId","RunnerInstanceAlreadyAssignedError","ReservationAlreadyAssignedError","RegistrationTokenBatchTooLargeError","requested","max","RegistrationTokenBatchExceedsReservationError","reservationCount","alreadyMinted","ActiveEphemeralRegistrationTokensExistError","providerRunnerIds","join","RunnerSessionExhaustedError","runnerSessionId"],"mappings":"AAAA,OAAO,MAAMA,yCAAyCC;IACpD,YAAYC,cAAsB,CAAE;QAClC,KAAK,CAAC,CAAC,iCAAiC,EAAEA,gBAAgB;QAC1D,IAAI,CAACC,IAAI,GAAG;IACd;AACF;AAEA,OAAO,MAAMC,6CAA6CH;IACxD,YAAYI,OAAe,CAAE;QAC3B,KAAK,CAAC,CAAC,qCAAqC,EAAEA,SAAS;QACvD,IAAI,CAACF,IAAI,GAAG;IACd;AACF;AAEA,OAAO,MAAMG,sCAAsCL;IACjD,YAAYI,OAAe,CAAE;QAC3B,KAAK,CAAC,CAAC,6BAA6B,EAAEA,SAAS;QAC/C,IAAI,CAACF,IAAI,GAAG;IACd;AACF;AAEA,OAAO,MAAMI,+BAA+
|
|
1
|
+
{"version":3,"sources":["../../src/core/errors.ts"],"sourcesContent":["export class RunningJobExecutionNotFoundError extends Error {\n constructor(jobExecutionId: string) {\n super(`Running job execution not found: ${jobExecutionId}`);\n this.name = 'RunningJobExecutionNotFoundError';\n }\n}\n\nexport class ManualRegistrationTokenNotFoundError extends Error {\n constructor(tokenId: string) {\n super(`Manual registration token not found: ${tokenId}`);\n this.name = 'ManualRegistrationTokenNotFoundError';\n }\n}\n\nexport class ProvisionerTokenNotFoundError extends Error {\n constructor(tokenId: string) {\n super(`Provisioner token not found: ${tokenId}`);\n this.name = 'ProvisionerTokenNotFoundError';\n }\n}\n\nexport class ProvisionerAdminIdempotencyKeyReuseError extends Error {\n constructor() {\n super('Idempotency-Key was already used for a different provisioner token command');\n this.name = 'ProvisionerAdminIdempotencyKeyReuseError';\n }\n}\n\nexport class ProvisionerAdminIdempotencyReplayUnavailableError extends Error {\n constructor() {\n super('Idempotency-Key replay cannot reproduce the original provisioner token');\n this.name = 'ProvisionerAdminIdempotencyReplayUnavailableError';\n }\n}\n\nexport class EmptyRunnerLabelsError extends Error {\n constructor() {\n super('Runner labels cannot be empty');\n this.name = 'EmptyRunnerLabelsError';\n }\n}\n\nexport class EmptyRequiredLabelsError extends Error {\n constructor() {\n super('Required labels cannot be empty');\n this.name = 'EmptyRequiredLabelsError';\n }\n}\n\nexport class RegistrationTokenConsumedError extends Error {\n constructor(public readonly ephemeralTokenId: string) {\n super(`Ephemeral registration token has already been consumed: ${ephemeralTokenId}`);\n this.name = 'RegistrationTokenConsumedError';\n }\n}\n\nexport class RegistrationTokenExpiredError extends Error {\n constructor(public readonly ephemeralTokenId: string) {\n super(`Ephemeral registration token has expired: ${ephemeralTokenId}`);\n this.name = 'RegistrationTokenExpiredError';\n }\n}\n\nexport class RegistrationTokenWorkspaceMismatchError extends Error {\n constructor(\n public readonly ephemeralTokenId: string,\n public readonly workspaceId: string,\n ) {\n super(\n `Ephemeral registration token ${ephemeralTokenId} does not belong to workspace ${workspaceId}`,\n );\n this.name = 'RegistrationTokenWorkspaceMismatchError';\n }\n}\n\nexport class ActiveEphemeralRegistrationTokenExistsError extends Error {\n constructor(\n public readonly workspaceId: string,\n public readonly provisionerId: string,\n public readonly providerRunnerId: string,\n ) {\n super(\n `Active ephemeral registration token already exists for provisioned runner ${providerRunnerId} in workspace ${workspaceId}`,\n );\n this.name = 'ActiveEphemeralRegistrationTokenExistsError';\n }\n}\n\nexport class ReservationNotFoundError extends Error {\n constructor(public readonly reservationId: string) {\n super(`Reservation not found: ${reservationId}`);\n this.name = 'ReservationNotFoundError';\n }\n}\n\nexport class ReservationExpiredError extends Error {\n constructor(public readonly reservationId: string) {\n super(`Reservation has expired: ${reservationId}`);\n this.name = 'ReservationExpiredError';\n }\n}\n\nexport class RunnerInstanceNotAssignableError extends Error {\n constructor(public readonly runnerInstanceId: string) {\n super(`Runner instance cannot be assigned: ${runnerInstanceId}`);\n this.name = 'RunnerInstanceNotAssignableError';\n }\n}\nexport class RunnerInstanceAlreadyAssignedError extends Error {\n constructor(public readonly runnerInstanceId: string) {\n super(`Runner instance is already assigned: ${runnerInstanceId}`);\n this.name = 'RunnerInstanceAlreadyAssignedError';\n }\n}\nexport class ReservationAlreadyAssignedError extends Error {\n constructor(public readonly reservationId: string) {\n super(`Reservation is already assigned: ${reservationId}`);\n this.name = 'ReservationAlreadyAssignedError';\n }\n}\n\nexport class RegistrationTokenBatchTooLargeError extends Error {\n constructor(\n public readonly requested: number,\n public readonly max: number,\n ) {\n super(\n `Registration token batch requested ${requested} provisioned runners, exceeding max ${max}`,\n );\n this.name = 'RegistrationTokenBatchTooLargeError';\n }\n}\n\nexport class RegistrationTokenBatchExceedsReservationError extends Error {\n constructor(\n public readonly requested: number,\n public readonly reservationCount: number,\n public readonly alreadyMinted: number = 0,\n ) {\n super(\n `Registration token batch requested ${requested} provisioned runners with ${alreadyMinted} already minted, exceeding reservation count ${reservationCount}`,\n );\n this.name = 'RegistrationTokenBatchExceedsReservationError';\n }\n}\n\nexport class ActiveEphemeralRegistrationTokensExistError extends Error {\n constructor(public readonly providerRunnerIds: string[]) {\n super(\n `Active ephemeral registration tokens already exist for provisioned runners: ${providerRunnerIds.join(', ')}`,\n );\n this.name = 'ActiveEphemeralRegistrationTokensExistError';\n }\n}\n\nexport class RunnerSessionExhaustedError extends Error {\n constructor(public readonly runnerSessionId: string) {\n super(`Runner session claim limit exhausted: ${runnerSessionId}`);\n this.name = 'RunnerSessionExhaustedError';\n }\n}\n"],"names":["RunningJobExecutionNotFoundError","Error","jobExecutionId","name","ManualRegistrationTokenNotFoundError","tokenId","ProvisionerTokenNotFoundError","ProvisionerAdminIdempotencyKeyReuseError","ProvisionerAdminIdempotencyReplayUnavailableError","EmptyRunnerLabelsError","EmptyRequiredLabelsError","RegistrationTokenConsumedError","ephemeralTokenId","RegistrationTokenExpiredError","RegistrationTokenWorkspaceMismatchError","workspaceId","ActiveEphemeralRegistrationTokenExistsError","provisionerId","providerRunnerId","ReservationNotFoundError","reservationId","ReservationExpiredError","RunnerInstanceNotAssignableError","runnerInstanceId","RunnerInstanceAlreadyAssignedError","ReservationAlreadyAssignedError","RegistrationTokenBatchTooLargeError","requested","max","RegistrationTokenBatchExceedsReservationError","reservationCount","alreadyMinted","ActiveEphemeralRegistrationTokensExistError","providerRunnerIds","join","RunnerSessionExhaustedError","runnerSessionId"],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
export { type ListRunnerAdministratorInstancesParams, type ListRunnerAdministratorInstancesResult, listRunnerAdministratorInstances, type RunnerAdministratorInstance, } from './admin-runner-instances.js';
|
|
1
2
|
export type { EphemeralRegistrationToken } from './entities/ephemeral-registration-token.js';
|
|
2
3
|
export type { ManualRegistrationToken } from './entities/manual-registration-token.js';
|
|
3
4
|
export type { ProvisionerCapabilitySnapshot } from './entities/provisioner-capability-snapshot.js';
|
|
4
5
|
export type { ActiveProvisionerToken, ProvisionerScope, ProvisionerToken, } from './entities/provisioner-token.js';
|
|
5
6
|
export type { RunnerInstance, RunnerInstanceState, } from './entities/runner-instance.js';
|
|
6
7
|
export type { RunnerSession } from './entities/runner-session.js';
|
|
7
|
-
export { EmptyRunnerLabelsError, ManualRegistrationTokenNotFoundError, ProvisionerTokenNotFoundError, RegistrationTokenConsumedError, RegistrationTokenExpiredError, RunnerSessionExhaustedError, RunningJobExecutionNotFoundError, } from './errors.js';
|
|
8
|
+
export { EmptyRunnerLabelsError, ManualRegistrationTokenNotFoundError, ProvisionerAdminIdempotencyKeyReuseError, ProvisionerAdminIdempotencyReplayUnavailableError, ProvisionerTokenNotFoundError, RegistrationTokenConsumedError, RegistrationTokenExpiredError, RunnerSessionExhaustedError, RunningJobExecutionNotFoundError, } from './errors.js';
|
|
8
9
|
export { type ClaimJobExecutionResult, claimJobExecution } from './job-executions.js';
|
|
9
10
|
export { createWorkspaceManualRegistrationToken, listUsableManualRegistrationTokens, revokeWorkspaceManualRegistrationToken, } from './manual-registration-tokens.js';
|
|
10
11
|
export { hasActiveWorkspaceProvisionerCapability } from './provisioner-capability-snapshots.js';
|
|
11
|
-
export { createInstallationProvisionerToken, createWorkspaceProvisionerToken, listActiveProvisioners, listUsableProvisionerTokens, revokeInstallationProvisionerToken, revokeWorkspaceProvisionerToken, } from './provisioner-tokens.js';
|
|
12
|
+
export { createAdministratorInstallationProvisionerToken, createInstallationProvisionerToken, createWorkspaceProvisionerToken, installationProvisionerTokenStatus, listActiveProvisioners, listAdministratorInstallationProvisionerTokens, listUsableProvisionerTokens, revokeAdministratorInstallationProvisionerToken, revokeInstallationProvisionerToken, revokeWorkspaceProvisionerToken, } from './provisioner-tokens.js';
|
|
12
13
|
export { getRunnerAssignment, issueRunnerActivationToken } from './runner-activation.js';
|
|
13
14
|
export { assignRunnerInstances } from './runner-assignments.js';
|
|
14
15
|
export { attachRunnerControlProviderId, createRunnerInstancesWithBootstrapTokens, enrollRunnerControlSession, exchangeRunnerBootstrapToken, RunnerBootstrapTokenInvalidError, RunnerControlSessionInvalidError, touchRunnerControlSession, } from './runner-control-sessions.js';
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,0BAA0B,EAAC,MAAM,4CAA4C,CAAC;AAC3F,YAAY,EAAC,uBAAuB,EAAC,MAAM,yCAAyC,CAAC;AACrF,YAAY,EAAC,6BAA6B,EAAC,MAAM,+CAA+C,CAAC;AACjG,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,cAAc,EACd,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,oCAAoC,EACpC,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,KAAK,uBAAuB,EAAE,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACpF,OAAO,EACL,sCAAsC,EACtC,kCAAkC,EAClC,sCAAsC,GACvC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAC,uCAAuC,EAAC,MAAM,uCAAuC,CAAC;AAC9F,OAAO,EACL,kCAAkC,EAClC,+BAA+B,EAC/B,sBAAsB,EACtB,2BAA2B,EAC3B,kCAAkC,EAClC,+BAA+B,GAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,mBAAmB,EAAE,0BAA0B,EAAC,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EACL,6BAA6B,EAC7B,wCAAwC,EACxC,0BAA0B,EAC1B,4BAA4B,EAC5B,gCAAgC,EAChC,gCAAgC,EAChC,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,YAAY,EACjB,8BAA8B,EAC9B,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sCAAsC,EAC3C,KAAK,sCAAsC,EAC3C,gCAAgC,EAChC,KAAK,2BAA2B,GACjC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAC,0BAA0B,EAAC,MAAM,4CAA4C,CAAC;AAC3F,YAAY,EAAC,uBAAuB,EAAC,MAAM,yCAAyC,CAAC;AACrF,YAAY,EAAC,6BAA6B,EAAC,MAAM,+CAA+C,CAAC;AACjG,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,cAAc,EACd,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,oCAAoC,EACpC,wCAAwC,EACxC,iDAAiD,EACjD,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,KAAK,uBAAuB,EAAE,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACpF,OAAO,EACL,sCAAsC,EACtC,kCAAkC,EAClC,sCAAsC,GACvC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAC,uCAAuC,EAAC,MAAM,uCAAuC,CAAC;AAC9F,OAAO,EACL,+CAA+C,EAC/C,kCAAkC,EAClC,+BAA+B,EAC/B,kCAAkC,EAClC,sBAAsB,EACtB,8CAA8C,EAC9C,2BAA2B,EAC3B,+CAA+C,EAC/C,kCAAkC,EAClC,+BAA+B,GAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,mBAAmB,EAAE,0BAA0B,EAAC,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EACL,6BAA6B,EAC7B,wCAAwC,EACxC,0BAA0B,EAC1B,4BAA4B,EAC5B,gCAAgC,EAChC,gCAAgC,EAChC,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,YAAY,EACjB,8BAA8B,EAC9B,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,+BAA+B,CAAC"}
|
package/dist/core/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { listRunnerAdministratorInstances } from './admin-runner-instances.js';
|
|
2
|
+
export { EmptyRunnerLabelsError, ManualRegistrationTokenNotFoundError, ProvisionerAdminIdempotencyKeyReuseError, ProvisionerAdminIdempotencyReplayUnavailableError, ProvisionerTokenNotFoundError, RegistrationTokenConsumedError, RegistrationTokenExpiredError, RunnerSessionExhaustedError, RunningJobExecutionNotFoundError } from './errors.js';
|
|
2
3
|
export { claimJobExecution } from './job-executions.js';
|
|
3
4
|
export { createWorkspaceManualRegistrationToken, listUsableManualRegistrationTokens, revokeWorkspaceManualRegistrationToken } from './manual-registration-tokens.js';
|
|
4
5
|
export { hasActiveWorkspaceProvisionerCapability } from './provisioner-capability-snapshots.js';
|
|
5
|
-
export { createInstallationProvisionerToken, createWorkspaceProvisionerToken, listActiveProvisioners, listUsableProvisionerTokens, revokeInstallationProvisionerToken, revokeWorkspaceProvisionerToken } from './provisioner-tokens.js';
|
|
6
|
+
export { createAdministratorInstallationProvisionerToken, createInstallationProvisionerToken, createWorkspaceProvisionerToken, installationProvisionerTokenStatus, listActiveProvisioners, listAdministratorInstallationProvisionerTokens, listUsableProvisionerTokens, revokeAdministratorInstallationProvisionerToken, revokeInstallationProvisionerToken, revokeWorkspaceProvisionerToken } from './provisioner-tokens.js';
|
|
6
7
|
export { getRunnerAssignment, issueRunnerActivationToken } from './runner-activation.js';
|
|
7
8
|
export { assignRunnerInstances } from './runner-assignments.js';
|
|
8
9
|
export { attachRunnerControlProviderId, createRunnerInstancesWithBootstrapTokens, enrollRunnerControlSession, exchangeRunnerBootstrapToken, RunnerBootstrapTokenInvalidError, RunnerControlSessionInvalidError, touchRunnerControlSession } from './runner-control-sessions.js';
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/index.ts"],"sourcesContent":["export type {EphemeralRegistrationToken} from './entities/ephemeral-registration-token.js';\nexport type {ManualRegistrationToken} from './entities/manual-registration-token.js';\nexport type {ProvisionerCapabilitySnapshot} from './entities/provisioner-capability-snapshot.js';\nexport type {\n ActiveProvisionerToken,\n ProvisionerScope,\n ProvisionerToken,\n} from './entities/provisioner-token.js';\nexport type {\n RunnerInstance,\n RunnerInstanceState,\n} from './entities/runner-instance.js';\nexport type {RunnerSession} from './entities/runner-session.js';\nexport {\n EmptyRunnerLabelsError,\n ManualRegistrationTokenNotFoundError,\n ProvisionerTokenNotFoundError,\n RegistrationTokenConsumedError,\n RegistrationTokenExpiredError,\n RunnerSessionExhaustedError,\n RunningJobExecutionNotFoundError,\n} from './errors.js';\nexport {type ClaimJobExecutionResult, claimJobExecution} from './job-executions.js';\nexport {\n createWorkspaceManualRegistrationToken,\n listUsableManualRegistrationTokens,\n revokeWorkspaceManualRegistrationToken,\n} from './manual-registration-tokens.js';\nexport {hasActiveWorkspaceProvisionerCapability} from './provisioner-capability-snapshots.js';\nexport {\n createInstallationProvisionerToken,\n createWorkspaceProvisionerToken,\n listActiveProvisioners,\n listUsableProvisionerTokens,\n revokeInstallationProvisionerToken,\n revokeWorkspaceProvisionerToken,\n} from './provisioner-tokens.js';\nexport {getRunnerAssignment, issueRunnerActivationToken} from './runner-activation.js';\nexport {assignRunnerInstances} from './runner-assignments.js';\nexport {\n attachRunnerControlProviderId,\n createRunnerInstancesWithBootstrapTokens,\n enrollRunnerControlSession,\n exchangeRunnerBootstrapToken,\n RunnerBootstrapTokenInvalidError,\n RunnerControlSessionInvalidError,\n touchRunnerControlSession,\n} from './runner-control-sessions.js';\nexport {\n type ActiveRunner,\n attachRunnerInstanceProviderId,\n listActiveRunners,\n type ReconcileDesiredIntent,\n type ReconciledBoundJobExecution,\n type ReconciledRunnerInstance,\n type ReconcileRunnerInstancesParams,\n type ReconcileRunnerInstancesResult,\n type ReportRunnerInstancesParams,\n type ReportRunnerInstancesResult,\n reconcileRunnerInstances,\n reportRunnerInstances,\n} from './runner-instances.js';\nexport {\n type RegisterRunnerSessionResult,\n type RunnerRegistrationCredential,\n registerRunnerSession,\n} from './runner-sessions.js';\nexport {\n EMPTY_RUNNER_TOOL_CAPABILITIES,\n effectiveRunnerToolCapabilities,\n} from './runner-tool-capabilities.js';\n"],"names":["EmptyRunnerLabelsError","ManualRegistrationTokenNotFoundError","ProvisionerTokenNotFoundError","RegistrationTokenConsumedError","RegistrationTokenExpiredError","RunnerSessionExhaustedError","RunningJobExecutionNotFoundError","claimJobExecution","createWorkspaceManualRegistrationToken","listUsableManualRegistrationTokens","revokeWorkspaceManualRegistrationToken","hasActiveWorkspaceProvisionerCapability","createInstallationProvisionerToken","createWorkspaceProvisionerToken","listActiveProvisioners","listUsableProvisionerTokens","revokeInstallationProvisionerToken","revokeWorkspaceProvisionerToken","getRunnerAssignment","issueRunnerActivationToken","assignRunnerInstances","attachRunnerControlProviderId","createRunnerInstancesWithBootstrapTokens","enrollRunnerControlSession","exchangeRunnerBootstrapToken","RunnerBootstrapTokenInvalidError","RunnerControlSessionInvalidError","touchRunnerControlSession","attachRunnerInstanceProviderId","listActiveRunners","reconcileRunnerInstances","reportRunnerInstances","registerRunnerSession","EMPTY_RUNNER_TOOL_CAPABILITIES","effectiveRunnerToolCapabilities"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/core/index.ts"],"sourcesContent":["export {\n type ListRunnerAdministratorInstancesParams,\n type ListRunnerAdministratorInstancesResult,\n listRunnerAdministratorInstances,\n type RunnerAdministratorInstance,\n} from './admin-runner-instances.js';\nexport type {EphemeralRegistrationToken} from './entities/ephemeral-registration-token.js';\nexport type {ManualRegistrationToken} from './entities/manual-registration-token.js';\nexport type {ProvisionerCapabilitySnapshot} from './entities/provisioner-capability-snapshot.js';\nexport type {\n ActiveProvisionerToken,\n ProvisionerScope,\n ProvisionerToken,\n} from './entities/provisioner-token.js';\nexport type {\n RunnerInstance,\n RunnerInstanceState,\n} from './entities/runner-instance.js';\nexport type {RunnerSession} from './entities/runner-session.js';\nexport {\n EmptyRunnerLabelsError,\n ManualRegistrationTokenNotFoundError,\n ProvisionerAdminIdempotencyKeyReuseError,\n ProvisionerAdminIdempotencyReplayUnavailableError,\n ProvisionerTokenNotFoundError,\n RegistrationTokenConsumedError,\n RegistrationTokenExpiredError,\n RunnerSessionExhaustedError,\n RunningJobExecutionNotFoundError,\n} from './errors.js';\nexport {type ClaimJobExecutionResult, claimJobExecution} from './job-executions.js';\nexport {\n createWorkspaceManualRegistrationToken,\n listUsableManualRegistrationTokens,\n revokeWorkspaceManualRegistrationToken,\n} from './manual-registration-tokens.js';\nexport {hasActiveWorkspaceProvisionerCapability} from './provisioner-capability-snapshots.js';\nexport {\n createAdministratorInstallationProvisionerToken,\n createInstallationProvisionerToken,\n createWorkspaceProvisionerToken,\n installationProvisionerTokenStatus,\n listActiveProvisioners,\n listAdministratorInstallationProvisionerTokens,\n listUsableProvisionerTokens,\n revokeAdministratorInstallationProvisionerToken,\n revokeInstallationProvisionerToken,\n revokeWorkspaceProvisionerToken,\n} from './provisioner-tokens.js';\nexport {getRunnerAssignment, issueRunnerActivationToken} from './runner-activation.js';\nexport {assignRunnerInstances} from './runner-assignments.js';\nexport {\n attachRunnerControlProviderId,\n createRunnerInstancesWithBootstrapTokens,\n enrollRunnerControlSession,\n exchangeRunnerBootstrapToken,\n RunnerBootstrapTokenInvalidError,\n RunnerControlSessionInvalidError,\n touchRunnerControlSession,\n} from './runner-control-sessions.js';\nexport {\n type ActiveRunner,\n attachRunnerInstanceProviderId,\n listActiveRunners,\n type ReconcileDesiredIntent,\n type ReconciledBoundJobExecution,\n type ReconciledRunnerInstance,\n type ReconcileRunnerInstancesParams,\n type ReconcileRunnerInstancesResult,\n type ReportRunnerInstancesParams,\n type ReportRunnerInstancesResult,\n reconcileRunnerInstances,\n reportRunnerInstances,\n} from './runner-instances.js';\nexport {\n type RegisterRunnerSessionResult,\n type RunnerRegistrationCredential,\n registerRunnerSession,\n} from './runner-sessions.js';\nexport {\n EMPTY_RUNNER_TOOL_CAPABILITIES,\n effectiveRunnerToolCapabilities,\n} from './runner-tool-capabilities.js';\n"],"names":["listRunnerAdministratorInstances","EmptyRunnerLabelsError","ManualRegistrationTokenNotFoundError","ProvisionerAdminIdempotencyKeyReuseError","ProvisionerAdminIdempotencyReplayUnavailableError","ProvisionerTokenNotFoundError","RegistrationTokenConsumedError","RegistrationTokenExpiredError","RunnerSessionExhaustedError","RunningJobExecutionNotFoundError","claimJobExecution","createWorkspaceManualRegistrationToken","listUsableManualRegistrationTokens","revokeWorkspaceManualRegistrationToken","hasActiveWorkspaceProvisionerCapability","createAdministratorInstallationProvisionerToken","createInstallationProvisionerToken","createWorkspaceProvisionerToken","installationProvisionerTokenStatus","listActiveProvisioners","listAdministratorInstallationProvisionerTokens","listUsableProvisionerTokens","revokeAdministratorInstallationProvisionerToken","revokeInstallationProvisionerToken","revokeWorkspaceProvisionerToken","getRunnerAssignment","issueRunnerActivationToken","assignRunnerInstances","attachRunnerControlProviderId","createRunnerInstancesWithBootstrapTokens","enrollRunnerControlSession","exchangeRunnerBootstrapToken","RunnerBootstrapTokenInvalidError","RunnerControlSessionInvalidError","touchRunnerControlSession","attachRunnerInstanceProviderId","listActiveRunners","reconcileRunnerInstances","reportRunnerInstances","registerRunnerSession","EMPTY_RUNNER_TOOL_CAPABILITIES","effectiveRunnerToolCapabilities"],"mappings":"AAAA,SAGEA,gCAAgC,QAE3B,8BAA8B;AAcrC,SACEC,sBAAsB,EACtBC,oCAAoC,EACpCC,wCAAwC,EACxCC,iDAAiD,EACjDC,6BAA6B,EAC7BC,8BAA8B,EAC9BC,6BAA6B,EAC7BC,2BAA2B,EAC3BC,gCAAgC,QAC3B,cAAc;AACrB,SAAsCC,iBAAiB,QAAO,sBAAsB;AACpF,SACEC,sCAAsC,EACtCC,kCAAkC,EAClCC,sCAAsC,QACjC,kCAAkC;AACzC,SAAQC,uCAAuC,QAAO,wCAAwC;AAC9F,SACEC,+CAA+C,EAC/CC,kCAAkC,EAClCC,+BAA+B,EAC/BC,kCAAkC,EAClCC,sBAAsB,EACtBC,8CAA8C,EAC9CC,2BAA2B,EAC3BC,+CAA+C,EAC/CC,kCAAkC,EAClCC,+BAA+B,QAC1B,0BAA0B;AACjC,SAAQC,mBAAmB,EAAEC,0BAA0B,QAAO,yBAAyB;AACvF,SAAQC,qBAAqB,QAAO,0BAA0B;AAC9D,SACEC,6BAA6B,EAC7BC,wCAAwC,EACxCC,0BAA0B,EAC1BC,4BAA4B,EAC5BC,gCAAgC,EAChCC,gCAAgC,EAChCC,yBAAyB,QACpB,+BAA+B;AACtC,SAEEC,8BAA8B,EAC9BC,iBAAiB,EAQjBC,wBAAwB,EACxBC,qBAAqB,QAChB,wBAAwB;AAC/B,SAGEC,qBAAqB,QAChB,uBAAuB;AAC9B,SACEC,8BAA8B,EAC9BC,+BAA+B,QAC1B,gCAAgC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { AdministrationRole } from '@shipfox/api-common-dto';
|
|
2
|
+
import type { TimestampIdCursor } from '@shipfox/node-drizzle';
|
|
1
3
|
import type { ActiveProvisionerToken, ProvisionerToken } from './entities/provisioner-token.js';
|
|
2
4
|
export interface CreateWorkspaceProvisionerTokenParams {
|
|
3
5
|
workspaceId: string;
|
|
@@ -27,4 +29,35 @@ export declare function revokeInstallationProvisionerToken(params: {
|
|
|
27
29
|
tokenId: string;
|
|
28
30
|
revokedByUserId: string;
|
|
29
31
|
}): Promise<ProvisionerToken>;
|
|
32
|
+
export interface InstallationProvisionerTokenAdministrationContext {
|
|
33
|
+
actorId: string;
|
|
34
|
+
actorRole: AdministrationRole;
|
|
35
|
+
idempotencyKey: string;
|
|
36
|
+
correlationId: string;
|
|
37
|
+
reason: string;
|
|
38
|
+
}
|
|
39
|
+
export type InstallationProvisionerTokenStatus = 'active' | 'expired' | 'revoked';
|
|
40
|
+
export declare function installationProvisionerTokenStatus(token: ProvisionerToken, now?: Date): InstallationProvisionerTokenStatus;
|
|
41
|
+
export declare function listAdministratorInstallationProvisionerTokens(params: {
|
|
42
|
+
limit: number;
|
|
43
|
+
cursor?: TimestampIdCursor | undefined;
|
|
44
|
+
status?: InstallationProvisionerTokenStatus | undefined;
|
|
45
|
+
}): Promise<{
|
|
46
|
+
tokens: ProvisionerToken[];
|
|
47
|
+
nextCursor: TimestampIdCursor | null;
|
|
48
|
+
}>;
|
|
49
|
+
export declare function createAdministratorInstallationProvisionerToken(params: InstallationProvisionerTokenAdministrationContext & {
|
|
50
|
+
name?: string | undefined;
|
|
51
|
+
ttlSeconds?: number | undefined;
|
|
52
|
+
}): Promise<{
|
|
53
|
+
token: ProvisionerToken;
|
|
54
|
+
rawToken: string;
|
|
55
|
+
correlationId: string;
|
|
56
|
+
}>;
|
|
57
|
+
export declare function revokeAdministratorInstallationProvisionerToken(params: InstallationProvisionerTokenAdministrationContext & {
|
|
58
|
+
tokenId: string;
|
|
59
|
+
}): Promise<{
|
|
60
|
+
token: ProvisionerToken;
|
|
61
|
+
correlationId: string;
|
|
62
|
+
}>;
|
|
30
63
|
//# sourceMappingURL=provisioner-tokens.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provisioner-tokens.d.ts","sourceRoot":"","sources":["../../src/core/provisioner-tokens.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provisioner-tokens.d.ts","sourceRoot":"","sources":["../../src/core/provisioner-tokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAGhE,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AAa7D,OAAO,KAAK,EAAC,sBAAsB,EAAE,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AAM9F,MAAM,WAAW,qCAAqC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,qCAAqC;IACpD,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qCAAqC,GAC5C,OAAO,CAAC,qCAAqC,CAAC,CAehD;AAED,MAAM,WAAW,wCAAwC;IACvD,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,wBAAsB,kCAAkC,CACtD,MAAM,EAAE,wCAAwC,GAC/C,OAAO,CAAC,qCAAqC,CAAC,CAYhD;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAE5F;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAK7F;AAED,wBAAsB,+BAA+B,CAAC,MAAM,EAAE;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAI5B;AAED,wBAAsB,kCAAkC,CAAC,MAAM,EAAE;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAI5B;AAOD,MAAM,WAAW,iDAAiD;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAyCD,MAAM,MAAM,kCAAkC,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAElF,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,gBAAgB,EACvB,GAAG,OAAa,GACf,kCAAkC,CAIpC;AAED,wBAAsB,8CAA8C,CAAC,MAAM,EAAE;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACvC,MAAM,CAAC,EAAE,kCAAkC,GAAG,SAAS,CAAC;CACzD;;;GAEA;AAED,wBAAsB,+CAA+C,CACnE,MAAM,EAAE,iDAAiD,GAAG;IAC1D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,GACA,OAAO,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAC,CAAC,CAoC7E;AAED,wBAAsB,+CAA+C,CACnE,MAAM,EAAE,iDAAiD,GAAG;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GAC5E,OAAO,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAC,CAAC,CA2B3D"}
|