@cat-factory/integrations 0.34.1 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/index.d.ts +5 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +8 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/modules/environments/EnvironmentConnectionService.d.ts +38 -40
  6. package/dist/modules/environments/EnvironmentConnectionService.d.ts.map +1 -1
  7. package/dist/modules/environments/EnvironmentConnectionService.js +106 -114
  8. package/dist/modules/environments/EnvironmentConnectionService.js.map +1 -1
  9. package/dist/modules/environments/EnvironmentProvisioningService.d.ts +15 -6
  10. package/dist/modules/environments/EnvironmentProvisioningService.d.ts.map +1 -1
  11. package/dist/modules/environments/EnvironmentProvisioningService.js +21 -7
  12. package/dist/modules/environments/EnvironmentProvisioningService.js.map +1 -1
  13. package/dist/modules/environments/EnvironmentTeardownService.d.ts +0 -2
  14. package/dist/modules/environments/EnvironmentTeardownService.d.ts.map +1 -1
  15. package/dist/modules/environments/EnvironmentTeardownService.js +5 -5
  16. package/dist/modules/environments/EnvironmentTeardownService.js.map +1 -1
  17. package/dist/modules/environments/HttpEnvironmentProvider.js +1 -1
  18. package/dist/modules/environments/HttpEnvironmentProvider.js.map +1 -1
  19. package/dist/modules/environments/environment-backends.d.ts +53 -0
  20. package/dist/modules/environments/environment-backends.d.ts.map +1 -0
  21. package/dist/modules/environments/environment-backends.js +101 -0
  22. package/dist/modules/environments/environment-backends.js.map +1 -0
  23. package/dist/modules/environments/environments.logic.d.ts +5 -1
  24. package/dist/modules/environments/environments.logic.d.ts.map +1 -1
  25. package/dist/modules/environments/environments.logic.js +24 -0
  26. package/dist/modules/environments/environments.logic.js.map +1 -1
  27. package/dist/modules/kubernetes/KubernetesApiClient.d.ts +27 -0
  28. package/dist/modules/kubernetes/KubernetesApiClient.d.ts.map +1 -0
  29. package/dist/modules/kubernetes/KubernetesApiClient.js +77 -0
  30. package/dist/modules/kubernetes/KubernetesApiClient.js.map +1 -0
  31. package/dist/modules/kubernetes/KubernetesEnvironmentProvider.d.ts +33 -0
  32. package/dist/modules/kubernetes/KubernetesEnvironmentProvider.d.ts.map +1 -0
  33. package/dist/modules/kubernetes/KubernetesEnvironmentProvider.js +250 -0
  34. package/dist/modules/kubernetes/KubernetesEnvironmentProvider.js.map +1 -0
  35. package/dist/modules/kubernetes/KubernetesRunnerTransport.d.ts +1 -13
  36. package/dist/modules/kubernetes/KubernetesRunnerTransport.d.ts.map +1 -1
  37. package/dist/modules/kubernetes/KubernetesRunnerTransport.js +6 -69
  38. package/dist/modules/kubernetes/KubernetesRunnerTransport.js.map +1 -1
  39. package/dist/modules/kubernetes/kubernetes-environment.logic.d.ts +68 -0
  40. package/dist/modules/kubernetes/kubernetes-environment.logic.d.ts.map +1 -0
  41. package/dist/modules/kubernetes/kubernetes-environment.logic.js +189 -0
  42. package/dist/modules/kubernetes/kubernetes-environment.logic.js.map +1 -0
  43. package/dist/modules/kubernetes/kubernetes.logic.d.ts +14 -2
  44. package/dist/modules/kubernetes/kubernetes.logic.d.ts.map +1 -1
  45. package/dist/modules/kubernetes/kubernetes.logic.js +45 -12
  46. package/dist/modules/kubernetes/kubernetes.logic.js.map +1 -1
  47. package/dist/modules/runners/runner-backends.d.ts.map +1 -1
  48. package/dist/modules/runners/runner-backends.js +3 -2
  49. package/dist/modules/runners/runner-backends.js.map +1 -1
  50. package/package.json +4 -3
@@ -1,32 +1,9 @@
1
- import { ConflictError, STRICT_URL_SAFETY_POLICY, ValidationError } from '@cat-factory/kernel';
1
+ import { ConflictError, ValidationError } from '@cat-factory/kernel';
2
2
  import { requireWorkspace } from '@cat-factory/kernel';
3
- import { assertSafeEnvironmentUrl, missingRequiredConfigKeys, stringifyProviderConfig, } from './environments.logic.js';
3
+ import { environmentBackend } from './environment-backends.js';
4
+ import { missingRequiredConfigKeys, stringifyProviderConfig } from './environments.logic.js';
4
5
  /** Deterministic head branch for the PR-mode config bootstrap (idempotent re-runs). */
5
6
  const BOOTSTRAP_CONFIG_BRANCH = 'cat-factory/env-config';
6
- /** Collect every secret key a manifest's auth scheme references. */
7
- export function referencedSecretKeys(manifest) {
8
- const auth = manifest.auth;
9
- switch (auth.type) {
10
- case 'none':
11
- return [];
12
- case 'api_key':
13
- case 'bearer':
14
- return [auth.secretRef.key];
15
- case 'basic':
16
- return [auth.usernameSecretRef.key, auth.passwordSecretRef.key];
17
- case 'oauth2_client_credentials':
18
- return [auth.clientIdSecretRef.key, auth.clientSecretSecretRef.key];
19
- case 'custom_headers':
20
- return auth.headers.map((h) => h.secretRef.key);
21
- }
22
- }
23
- /** Validate every URL a manifest will fetch (defence against SSRF). */
24
- function assertManifestUrlsSafe(manifest, policy) {
25
- assertSafeEnvironmentUrl(manifest.baseUrl, 'base URL', policy);
26
- if (manifest.auth.type === 'oauth2_client_credentials') {
27
- assertSafeEnvironmentUrl(manifest.auth.tokenUrl, 'OAuth token URL', policy);
28
- }
29
- }
30
7
  export class EnvironmentConnectionService {
31
8
  deps;
32
9
  constructor(deps) {
@@ -35,22 +12,30 @@ export class EnvironmentConnectionService {
35
12
  /** Register (or replace) a workspace's environment provider. */
36
13
  async register(workspaceId, input) {
37
14
  await requireWorkspace(this.deps.workspaceRepository, workspaceId);
38
- // The manifest is validated against the Valibot schema at the controller
39
- // (jsonBody); here we enforce the additional SSRF + secret-completeness rules.
40
- const manifest = input.manifest;
41
- assertManifestUrlsSafe(manifest, this.deps.urlPolicy ?? STRICT_URL_SAFETY_POLICY);
42
- // Every secret the manifest references must be supplied.
43
- const missing = referencedSecretKeys(manifest).filter((key) => !(key in input.secrets));
15
+ const backend = this.requireBackend(input.config.kind);
16
+ backend.assertConfigSafe(input.config, {
17
+ ...(this.deps.urlPolicy ? { urlPolicy: this.deps.urlPolicy } : {}),
18
+ ...(this.deps.customTlsSupported !== undefined
19
+ ? { customTlsSupported: this.deps.customTlsSupported }
20
+ : {}),
21
+ });
22
+ // Every secret the chosen backend references must be supplied.
23
+ const missing = backend
24
+ .referencedSecretKeys(input.config)
25
+ .filter((key) => !(key in input.secrets));
44
26
  if (missing.length) {
45
27
  throw new ValidationError(`Missing secret values for: ${missing.join(', ')}`);
46
28
  }
29
+ const meta = backend.connectionMeta(input.config);
30
+ const manifest = backend.toManifest(input.config);
47
31
  const existing = await this.deps.environmentConnectionRepository.getByWorkspace(workspaceId);
48
32
  const secretsCipher = await this.deps.secretCipher.encrypt(JSON.stringify(input.secrets));
49
33
  const record = {
50
34
  workspaceId,
51
- providerId: manifest.providerId,
52
- label: manifest.label,
53
- baseUrl: manifest.baseUrl,
35
+ kind: input.config.kind,
36
+ providerId: meta.providerId,
37
+ label: meta.label,
38
+ baseUrl: meta.baseUrl,
54
39
  manifestJson: JSON.stringify(manifest),
55
40
  secretsCipher,
56
41
  createdAt: existing?.createdAt ?? this.deps.clock.now(),
@@ -59,10 +44,12 @@ export class EnvironmentConnectionService {
59
44
  await this.deps.environmentConnectionRepository.upsert(record);
60
45
  return this.toConnection(record, Object.keys(input.secrets));
61
46
  }
62
- /** Rotate/replace the secret bundle without re-sending the manifest. */
47
+ /** Rotate/replace the secret bundle without re-sending the config. */
63
48
  async updateSecrets(workspaceId, secrets) {
64
49
  const { record, manifest } = await this.requireConnection(workspaceId);
65
- const missing = referencedSecretKeys(manifest).filter((key) => !(key in secrets));
50
+ const backend = this.requireBackend(record.kind);
51
+ const config = backend.fromManifest(manifest);
52
+ const missing = backend.referencedSecretKeys(config).filter((key) => !(key in secrets));
66
53
  if (missing.length) {
67
54
  throw new ValidationError(`Missing secret values for: ${missing.join(', ')}`);
68
55
  }
@@ -73,21 +60,17 @@ export class EnvironmentConnectionService {
73
60
  }
74
61
  /**
75
62
  * Describe the provider's config fields for the UI (what to render and whether a
76
- * connection test is available). For a manifest provider the fields reflect the
77
- * secret keys the current manifest references; for a native provider they come
78
- * from the provider's own `describeConfig`.
63
+ * connection test is available). Resolves the backend for the workspace's stored
64
+ * connection (or the default `manifest` backend when none is registered).
79
65
  */
80
66
  async describeProvider(workspaceId) {
81
- const provider = this.deps.environmentProvider;
82
67
  const record = await this.deps.environmentConnectionRepository.getByWorkspace(workspaceId);
68
+ const kind = record?.kind ?? 'manifest';
69
+ const backend = this.requireBackend(kind);
70
+ const provider = this.deps.environmentProvider ?? this.buildProvider(backend);
71
+ const overridden = !!this.deps.environmentProvider;
83
72
  const manifest = record ? JSON.parse(record.manifestJson) : undefined;
84
- const configFields = provider?.describeConfig?.(manifest) ?? [];
85
- // Everything already supplied for this workspace: the stored secret-bundle keys, a
86
- // native adapter's manifest `providerConfig` keys (its non-secret per-workspace
87
- // settings), and `baseUrl` when the manifest carries one. The last mirrors the connect
88
- // form's write path (a field keyed `baseUrl` is persisted onto the manifest's `baseUrl`,
89
- // NOT into providerConfig or the secret bundle) — without it a `required` baseUrl field
90
- // would stay in `missingRequired` forever and the banner could never clear.
73
+ const configFields = provider.describeConfig?.(manifest) ?? [];
91
74
  const storedKeys = [];
92
75
  if (record) {
93
76
  storedKeys.push(...Object.keys(await this.decryptSecrets(record)));
@@ -97,44 +80,48 @@ export class EnvironmentConnectionService {
97
80
  storedKeys.push('baseUrl');
98
81
  }
99
82
  return {
100
- providerId: this.deps.providerId ?? manifest?.providerId ?? 'http',
101
- label: this.deps.providerLabel ?? manifest?.label ?? 'Custom HTTP provider',
102
- kind: this.deps.providerKind ?? 'manifest',
83
+ providerId: record?.providerId ?? kind,
84
+ label: record?.label ?? kind,
85
+ kind: overridden || kind !== 'manifest' ? 'native' : 'manifest',
103
86
  configFields,
104
- supportsTest: typeof provider?.testConnection === 'function',
105
- supportsRepoValidation: typeof provider?.validateRepo === 'function',
106
- supportsRepoBootstrap: typeof provider?.bootstrapProviderConfiguration === 'function',
107
- ...(provider?.describeBootstrapInputs
87
+ supportsTest: typeof provider.testConnection === 'function',
88
+ supportsRepoValidation: typeof provider.validateRepo === 'function',
89
+ supportsRepoBootstrap: typeof provider.bootstrapProviderConfiguration === 'function',
90
+ ...(provider.describeBootstrapInputs
108
91
  ? { bootstrapInputs: provider.describeBootstrapInputs() }
109
92
  : {}),
110
93
  missingRequired: missingRequiredConfigKeys(configFields, storedKeys),
111
- // The current saved manifest (non-secret — only secret-ref key names, never values),
112
- // so the native connect form overlays edits onto the real stored manifest instead of
113
- // the bare scaffold, preserving previously-saved providerConfig (incl. nested values).
114
94
  ...(manifest ? { savedManifest: manifest } : {}),
115
- ...(provider?.describeManifestTemplate
95
+ ...(provider.describeManifestTemplate
116
96
  ? { manifestTemplate: provider.describeManifestTemplate() }
117
97
  : {}),
118
98
  };
119
99
  }
120
100
  /**
121
- * Probe a candidate connection before saving (nothing is persisted). Builds a
122
- * secret resolver over the supplied (unsaved) secret values and delegates to the
123
- * provider's `testConnection`; a provider without one reports "nothing to test".
101
+ * Probe a candidate connection before saving (nothing is persisted). Builds the
102
+ * backend's provider from the candidate config + a resolver over the supplied
103
+ * (unsaved) secrets and delegates to the provider's `testConnection`.
124
104
  */
125
105
  async testConnection(workspaceId, input) {
126
106
  await requireWorkspace(this.deps.workspaceRepository, workspaceId);
127
- const provider = this.deps.environmentProvider;
128
- if (!provider?.testConnection) {
107
+ if (!input.config)
108
+ return { ok: true, message: 'Nothing to test.' };
109
+ const backend = this.requireBackend(input.config.kind);
110
+ backend.assertConfigSafe(input.config, {
111
+ ...(this.deps.urlPolicy ? { urlPolicy: this.deps.urlPolicy } : {}),
112
+ ...(this.deps.customTlsSupported !== undefined
113
+ ? { customTlsSupported: this.deps.customTlsSupported }
114
+ : {}),
115
+ });
116
+ const provider = this.buildProvider(backend);
117
+ if (!provider.testConnection) {
129
118
  return { ok: true, message: 'This provider has no connection test.' };
130
119
  }
131
- if (input.manifest) {
132
- assertManifestUrlsSafe(input.manifest, this.deps.urlPolicy ?? STRICT_URL_SAFETY_POLICY);
133
- }
120
+ const manifest = backend.toManifest(input.config);
134
121
  const secrets = input.secrets ?? {};
135
122
  return provider.testConnection({
136
- manifest: input.manifest,
137
- config: input.config ?? {},
123
+ manifest,
124
+ config: {},
138
125
  resolveSecret: (key) => secrets[key],
139
126
  });
140
127
  }
@@ -145,8 +132,8 @@ export class EnvironmentConnectionService {
145
132
  */
146
133
  async validateRepo(workspaceId, input) {
147
134
  await requireWorkspace(this.deps.workspaceRepository, workspaceId);
148
- const provider = this.deps.environmentProvider;
149
- if (!provider?.validateRepo)
135
+ const provider = await this.providerForWorkspace(workspaceId);
136
+ if (!provider.validateRepo)
150
137
  return { ok: true, issues: [] };
151
138
  const bound = await this.resolveRepo(workspaceId, input.owner, input.repo, input.provider);
152
139
  if (!bound) {
@@ -163,7 +150,7 @@ export class EnvironmentConnectionService {
163
150
  const manifest = await this.optionalManifest(workspaceId);
164
151
  const resolveSecret = await this.resolveSecrets(workspaceId);
165
152
  const gitRef = input.gitRef ?? bound.baseBranch;
166
- return this.runProviderValidate(bound, gitRef, input.owner, input.repo, stringifyProviderConfig(manifest?.providerConfig), resolveSecret);
153
+ return this.runProviderValidate(provider, bound, gitRef, input.owner, input.repo, stringifyProviderConfig(manifest?.providerConfig), resolveSecret);
167
154
  }
168
155
  /**
169
156
  * Mechanically bootstrap the provider's config file into a target repo from the
@@ -173,13 +160,13 @@ export class EnvironmentConnectionService {
173
160
  */
174
161
  async bootstrapRepo(workspaceId, input) {
175
162
  await requireWorkspace(this.deps.workspaceRepository, workspaceId);
176
- const provider = this.deps.environmentProvider;
163
+ const provider = await this.providerForWorkspace(workspaceId);
177
164
  const fail = (issues) => ({
178
165
  ok: false,
179
166
  committed: false,
180
167
  issues,
181
168
  });
182
- if (!provider?.bootstrapProviderConfiguration) {
169
+ if (!provider.bootstrapProviderConfiguration) {
183
170
  return fail([
184
171
  { severity: 'error', message: 'This provider does not support config bootstrap.' },
185
172
  ]);
@@ -211,17 +198,12 @@ export class EnvironmentConnectionService {
211
198
  let writeBranch = targetBranch;
212
199
  if (!generated.needsAgent && generated.files.length) {
213
200
  const prMode = !!input.openPr;
214
- // In PR mode we write to (and re-validate against) a deterministic branch; a re-run
215
- // must compare against THAT branch (not the still-unmerged target) so identical
216
- // content is a no-op and we never re-commit / open a duplicate PR. First run: the PR
217
- // branch doesn't exist yet, so the base/target branch is the correct compare ref.
218
201
  let prBranchHead = null;
219
202
  if (prMode) {
220
203
  writeBranch = BOOTSTRAP_CONFIG_BRANCH;
221
204
  prBranchHead = await bound.repo.headSha(writeBranch);
222
205
  }
223
206
  const compareBranch = prMode && prBranchHead ? writeBranch : targetBranch;
224
- // Idempotent: only write files whose content actually changes.
225
207
  const changed = [];
226
208
  for (const file of generated.files) {
227
209
  const existing = await readRepoFile(file.path, compareBranch);
@@ -237,8 +219,6 @@ export class EnvironmentConnectionService {
237
219
  await bound.repo.createBranch(writeBranch, base);
238
220
  }
239
221
  await bound.repo.commitFiles({ branch: writeBranch, message, files: changed });
240
- // Only open a PR when we just created the branch; a re-run commits onto the
241
- // existing branch and its already-open PR picks the new commit up.
242
222
  if (!prBranchHead) {
243
223
  await bound.repo.openPullRequest({
244
224
  title: message,
@@ -254,7 +234,7 @@ export class EnvironmentConnectionService {
254
234
  committed = true;
255
235
  }
256
236
  }
257
- let validation = await this.runProviderValidate(bound, writeBranch, input.owner, input.repo, config, resolveSecret);
237
+ let validation = await this.runProviderValidate(provider, bound, writeBranch, input.owner, input.repo, config, resolveSecret);
258
238
  let usedAgent = false;
259
239
  let repairJobId;
260
240
  if (!validation.ok &&
@@ -262,13 +242,6 @@ export class EnvironmentConnectionService {
262
242
  provider.describeRepairAgent &&
263
243
  this.deps.dispatchConfigRepair) {
264
244
  usedAgent = true;
265
- // PR mode: the agent must push its fix to the PR branch, NOT straight to the target
266
- // branch. The mechanical path only switches `writeBranch` to the PR branch when it
267
- // actually committed generated files; on the `needsAgent` path it never did, so
268
- // `writeBranch` is still the target branch here. Establish the PR branch (create it off
269
- // the target head + open the PR) before dispatch, so the agent's push lands on the PR
270
- // branch and re-validation reads it — otherwise `openPr` would be silently bypassed and
271
- // the fix committed directly onto e.g. `main`.
272
245
  if (input.openPr && writeBranch === targetBranch) {
273
246
  const prBranchHead = await bound.repo.headSha(BOOTSTRAP_CONFIG_BRANCH);
274
247
  if (!prBranchHead) {
@@ -285,12 +258,6 @@ export class EnvironmentConnectionService {
285
258
  }
286
259
  writeBranch = BOOTSTRAP_CONFIG_BRANCH;
287
260
  }
288
- // START the durable repair run and return immediately — the agent pushes its fix back
289
- // onto `writeBranch` asynchronously, and the run re-validates (via {@link revalidate})
290
- // on completion to settle `ok`/`issues`. So this call does NOT block on the agent and
291
- // does NOT re-validate inline; `ok` is reported as `false` (pending) until the repair
292
- // run finishes, which the caller tracks via `repairJobId` (snapshot + repair events).
293
- // A dispatch/pre-flight failure is recorded on the repair-job row by the run itself.
294
261
  const started = await this.deps.dispatchConfigRepair({
295
262
  workspaceId,
296
263
  owner: input.owner,
@@ -309,8 +276,6 @@ export class EnvironmentConnectionService {
309
276
  providerId: manifest?.providerId ?? null,
310
277
  blockId: null,
311
278
  executionId: null,
312
- // The mechanical bootstrap's own outcome: a dispatched async repair means it did NOT
313
- // produce a valid config (a repair run is now pending; `repairJobId` in `detail`).
314
279
  outcome: validation.ok ? 'success' : 'failure',
315
280
  error: validation.ok
316
281
  ? null
@@ -319,9 +284,6 @@ export class EnvironmentConnectionService {
319
284
  : 'Provider config bootstrap did not produce a valid config',
320
285
  detail: JSON.stringify({ committed, usedAgent, branch: writeBranch, repairJobId }),
321
286
  });
322
- // Surface the provider's own bootstrap diagnostics (e.g. why it bailed with
323
- // `needsAgent`) on the mechanical path. Once an async repair was dispatched, `ok` is
324
- // pending (false) and the residual issues are the ones the repair will address.
325
287
  const generatedIssues = generated.issues ?? [];
326
288
  return {
327
289
  ok: usedAgent ? false : validation.ok,
@@ -332,16 +294,13 @@ export class EnvironmentConnectionService {
332
294
  };
333
295
  }
334
296
  /**
335
- * Re-validate a repo's provider config after the async repair agent pushed its fix
336
- * re-deriving the bound RepoFiles, parsed manifest, decrypted secrets, and config the
337
- * same way {@link bootstrapRepo} does, then running the provider's `validateRepo`. This
338
- * is the callback {@link EnvConfigRepairService.pollJob} invokes on a successful repair
339
- * run to settle its terminal `ok`/`issues`. Lives here because the decrypted secrets +
340
- * manifest config live here (orchestration must not reach into the integration internals).
297
+ * Re-validate a repo's provider config after the async repair agent pushed its fix.
298
+ * The callback {@link EnvConfigRepairService.pollJob} invokes on a successful repair.
341
299
  */
342
300
  async revalidate(input) {
343
301
  const { workspaceId, owner, repo, gitRef } = input;
344
302
  await requireWorkspace(this.deps.workspaceRepository, workspaceId);
303
+ const provider = await this.providerForWorkspace(workspaceId);
345
304
  const bound = await this.resolveRepo(workspaceId, owner, repo);
346
305
  if (!bound) {
347
306
  return {
@@ -357,7 +316,16 @@ export class EnvironmentConnectionService {
357
316
  const manifest = await this.optionalManifest(workspaceId);
358
317
  const resolveSecret = await this.resolveSecrets(workspaceId);
359
318
  const config = stringifyProviderConfig(manifest?.providerConfig);
360
- return this.runProviderValidate(bound, gitRef, owner, repo, config, resolveSecret);
319
+ return this.runProviderValidate(provider, bound, gitRef, owner, repo, config, resolveSecret);
320
+ }
321
+ /**
322
+ * The live provider + stored manifest for a workspace, for the provisioning/teardown
323
+ * services. Throws when the workspace has no registered connection.
324
+ */
325
+ async resolveProvider(workspaceId) {
326
+ const { record, manifest } = await this.requireConnection(workspaceId);
327
+ const provider = this.deps.environmentProvider ?? this.buildProvider(this.requireBackend(record.kind));
328
+ return { provider, manifest };
361
329
  }
362
330
  /** Resolve a VCS-neutral bound RepoFiles for the workspace+coords, or null. */
363
331
  async resolveRepo(workspaceId, owner, repo, provider) {
@@ -367,10 +335,9 @@ export class EnvironmentConnectionService {
367
335
  ...(provider ? { provider } : {}),
368
336
  })) ?? null);
369
337
  }
370
- /** Run the provider's `validateRepo` with a VCS-neutral reader bound to `gitRef`. */
371
- async runProviderValidate(bound, gitRef, owner, repo, config, resolveSecret) {
372
- const provider = this.deps.environmentProvider;
373
- if (!provider?.validateRepo)
338
+ /** Run the given provider's `validateRepo` with a VCS-neutral reader bound to `gitRef`. */
339
+ async runProviderValidate(provider, bound, gitRef, owner, repo, config, resolveSecret) {
340
+ if (!provider.validateRepo)
374
341
  return { ok: true, issues: [] };
375
342
  return provider.validateRepo({
376
343
  readRepoFile: (path, ref) => bound.repo.getFile(path, ref ?? gitRef),
@@ -391,9 +358,7 @@ export class EnvironmentConnectionService {
391
358
  }
392
359
  /**
393
360
  * Resolve the parsed manifest if the workspace has a registered connection, else
394
- * undefined — the non-throwing sibling of {@link requireConnection}. The on-demand
395
- * repo validate/bootstrap routes are documented to never throw to the client, so they
396
- * degrade to "no per-workspace config" rather than a 409 when nothing is registered.
361
+ * undefined — the non-throwing sibling of {@link requireConnection}.
397
362
  */
398
363
  async optionalManifest(workspaceId) {
399
364
  const record = await this.deps.environmentConnectionRepository.getByWorkspace(workspaceId);
@@ -425,6 +390,23 @@ export class EnvironmentConnectionService {
425
390
  return;
426
391
  await this.deps.environmentConnectionRepository.softDelete(workspaceId, this.deps.clock.now());
427
392
  }
393
+ // --- internals ----------------------------------------------------------
394
+ requireBackend(kind) {
395
+ const backend = environmentBackend(kind);
396
+ if (!backend)
397
+ throw new ValidationError(`Unknown environment backend kind '${kind}'`);
398
+ return backend;
399
+ }
400
+ buildProvider(backend) {
401
+ return backend.buildProvider(this.deps.urlPolicy ? { urlPolicy: this.deps.urlPolicy } : {});
402
+ }
403
+ /** The provider for the workspace's stored kind (or the manifest default when none). */
404
+ async providerForWorkspace(workspaceId) {
405
+ if (this.deps.environmentProvider)
406
+ return this.deps.environmentProvider;
407
+ const record = await this.deps.environmentConnectionRepository.getByWorkspace(workspaceId);
408
+ return this.buildProvider(this.requireBackend(record?.kind ?? 'manifest'));
409
+ }
428
410
  async decryptSecrets(record) {
429
411
  if (!record.secretsCipher)
430
412
  return {};
@@ -432,12 +414,22 @@ export class EnvironmentConnectionService {
432
414
  return parsed && typeof parsed === 'object' ? parsed : {};
433
415
  }
434
416
  toConnection(record, secretKeys) {
417
+ let config;
418
+ try {
419
+ const backend = this.requireBackend(record.kind);
420
+ config = backend.fromManifest(JSON.parse(record.manifestJson));
421
+ }
422
+ catch {
423
+ config = undefined;
424
+ }
435
425
  return {
426
+ kind: record.kind,
436
427
  providerId: record.providerId,
437
428
  label: record.label,
438
429
  baseUrl: record.baseUrl,
439
430
  connectedAt: record.createdAt,
440
431
  secretKeys,
432
+ ...(config ? { config } : {}),
441
433
  };
442
434
  }
443
435
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentConnectionService.js","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentConnectionService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EnvironmentConnectionService.js","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentConnectionService.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,12 @@
1
1
  import type { Clock, IdGenerator } from '@cat-factory/kernel';
2
2
  import type { EnvironmentRegistryRepository } from '@cat-factory/kernel';
3
- import type { EnvironmentProvider, ProvisionContext, ResolveRunRepoContext, UrlSafetyPolicy } from '@cat-factory/kernel';
3
+ import type { ProvisionContext, ResolveRunRepoContext, RunRepoContext, UrlSafetyPolicy } from '@cat-factory/kernel';
4
4
  import type { SecretCipher } from '@cat-factory/kernel';
5
5
  import type { EnvironmentAccessHandle, EnvironmentHandle } from '@cat-factory/kernel';
6
6
  import type { EnvironmentConnectionService } from './EnvironmentConnectionService.js';
7
7
  import type { ProvisioningLogRecorder } from '../provisioning-logs/ProvisioningLogService.js';
8
8
  export interface EnvironmentProvisioningServiceDependencies {
9
9
  connectionService: EnvironmentConnectionService;
10
- environmentProvider: EnvironmentProvider;
11
10
  environmentRegistryRepository: EnvironmentRegistryRepository;
12
11
  secretCipher: SecretCipher;
13
12
  idGenerator: IdGenerator;
@@ -18,12 +17,22 @@ export interface EnvironmentProvisioningServiceDependencies {
18
17
  provisioningLog?: ProvisioningLogRecorder;
19
18
  /**
20
19
  * Resolve the VCS-neutral, run-repo-bound RepoFiles for a block, so provisioning can
21
- * pre-flight `provider.validateRepo` (e.g. that a Kargo `.kargo.yml` exists + is valid)
22
- * BEFORE calling the provider failing fast with a clear error instead of an async
23
- * failed environment. The same resolver the engine uses for pre/post-ops. Absent (or a
24
- * provider without `validateRepo`, or a block-less manual provision) ⇒ no gate.
20
+ * pre-flight `provider.validateRepo` BEFORE calling the provider failing fast with a
21
+ * clear error instead of an async failed environment and so a native adapter (the
22
+ * Kubernetes backend) can read CO-LOCATED manifests from the block's repo. Absent (or a
23
+ * block-less manual provision) ⇒ no run repo.
25
24
  */
26
25
  resolveRunRepoContext?: ResolveRunRepoContext;
26
+ /**
27
+ * Resolve a checkout-free RepoFiles bound to an ARBITRARY repo — so a native adapter (the
28
+ * Kubernetes backend) can read manifests from a SEPARATE repo. Absent ⇒ separate-repo
29
+ * sources report "no VCS connection".
30
+ */
31
+ resolveRepoFilesForWorkspace?: (workspaceId: string, coords: {
32
+ owner: string;
33
+ repo: string;
34
+ provider?: 'github' | 'gitlab';
35
+ }) => Promise<RunRepoContext | null>;
27
36
  }
28
37
  export interface ProvisionArgs {
29
38
  workspaceId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentProvisioningService.d.ts","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentProvisioningService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EnvironmentProvisioningService.d.ts","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentProvisioningService.ts"],"names":[],"mappings":"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"}
@@ -22,13 +22,13 @@ export class EnvironmentProvisioningService {
22
22
  /** Provision an environment, persisting an encrypted record keyed by block/run. */
23
23
  async provision(args) {
24
24
  const { workspaceId } = args;
25
- const { manifest } = await this.deps.connectionService.requireConnection(workspaceId);
25
+ const { manifest, provider } = await this.deps.connectionService.resolveProvider(workspaceId);
26
26
  const resolveSecret = await this.deps.connectionService.resolveSecrets(workspaceId);
27
27
  // Pre-flight gate: if the provider declares repo-config expectations (e.g. Kargo's
28
28
  // `.kargo.yml`), verify them against the block's repo BEFORE provisioning, so a
29
29
  // missing/malformed config fails synchronously here instead of as an async failed
30
30
  // environment. Skipped for a block-less manual provision or an unconfigured workspace.
31
- await this.preflightValidateRepo(args, manifest, resolveSecret);
31
+ await this.preflightValidateRepo(provider, args, manifest, resolveSecret);
32
32
  // Expose the block id as `{{input.blockId}}` even on a manual provision, so a
33
33
  // manifest can template against it without the caller having to repeat it. The
34
34
  // typed git/PR/repo context is flattened into the same namespace for the manifest
@@ -38,13 +38,28 @@ export class EnvironmentProvisioningService {
38
38
  inputs.blockId = args.blockId;
39
39
  Object.assign(inputs, contextInputs(args.context));
40
40
  Object.assign(inputs, args.inputs);
41
+ // A native adapter (the Kubernetes backend) reads manifests from the run repo
42
+ // (co-located) or a separate repo; resolve both seams when available.
43
+ const runRepo = args.blockId && this.deps.resolveRunRepoContext
44
+ ? await this.deps.resolveRunRepoContext(workspaceId, args.blockId)
45
+ : null;
41
46
  let provisioned;
42
47
  try {
43
- provisioned = await this.deps.environmentProvider.provision({
48
+ provisioned = await provider.provision({
44
49
  manifest,
45
50
  inputs,
46
51
  ...(args.context ? { provisionContext: args.context } : {}),
47
52
  resolveSecret,
53
+ ...(runRepo ? { runRepo } : {}),
54
+ ...(this.deps.resolveRepoFilesForWorkspace
55
+ ? {
56
+ resolveRepoFiles: (coords) => this.deps.resolveRepoFilesForWorkspace(workspaceId, {
57
+ owner: coords.owner,
58
+ repo: coords.repo,
59
+ ...(coords.provider ? { provider: coords.provider } : {}),
60
+ }),
61
+ }
62
+ : {}),
48
63
  });
49
64
  }
50
65
  catch (error) {
@@ -117,8 +132,7 @@ export class EnvironmentProvisioningService {
117
132
  * provider. No-op when the provider has no `validateRepo`, no run-repo resolver is
118
133
  * wired, the provision is block-less, or the repo can't be resolved (unconfigured).
119
134
  */
120
- async preflightValidateRepo(args, manifest, resolveSecret) {
121
- const provider = this.deps.environmentProvider;
135
+ async preflightValidateRepo(provider, args, manifest, resolveSecret) {
122
136
  if (!provider.validateRepo || !this.deps.resolveRunRepoContext || !args.blockId)
123
137
  return;
124
138
  const bound = await this.deps.resolveRunRepoContext(args.workspaceId, args.blockId);
@@ -157,12 +171,12 @@ export class EnvironmentProvisioningService {
157
171
  /** Re-poll the provider for an environment's status and persist any change. */
158
172
  async refreshStatus(workspaceId, id) {
159
173
  const record = assertFound(await this.deps.environmentRegistryRepository.get(workspaceId, id), 'Environment', id);
160
- const { manifest } = await this.deps.connectionService.requireConnection(workspaceId);
174
+ const { manifest, provider } = await this.deps.connectionService.resolveProvider(workspaceId);
161
175
  const resolveSecret = await this.deps.connectionService.resolveSecrets(workspaceId);
162
176
  const provisionFields = await this.decryptFields(record.provisionFieldsCipher);
163
177
  let provisioned;
164
178
  try {
165
- provisioned = await this.deps.environmentProvider.status({
179
+ provisioned = await provider.status({
166
180
  manifest,
167
181
  externalId: record.externalId,
168
182
  provisionFields,