typekro 0.13.0 → 0.15.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 (85) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/alchemy/deployers.d.ts +2 -2
  3. package/dist/alchemy/deployers.d.ts.map +1 -1
  4. package/dist/alchemy/deployers.js +12 -5
  5. package/dist/alchemy/deployers.js.map +1 -1
  6. package/dist/alchemy/index.d.ts +4 -2
  7. package/dist/alchemy/index.d.ts.map +1 -1
  8. package/dist/alchemy/index.js +4 -3
  9. package/dist/alchemy/index.js.map +1 -1
  10. package/dist/alchemy/resource-registration.d.ts +81 -19
  11. package/dist/alchemy/resource-registration.d.ts.map +1 -1
  12. package/dist/alchemy/resource-registration.js +296 -147
  13. package/dist/alchemy/resource-registration.js.map +1 -1
  14. package/dist/alchemy/types.d.ts +76 -8
  15. package/dist/alchemy/types.d.ts.map +1 -1
  16. package/dist/alchemy/wrapper.d.ts +0 -9
  17. package/dist/alchemy/wrapper.d.ts.map +1 -1
  18. package/dist/alchemy/wrapper.js +0 -15
  19. package/dist/alchemy/wrapper.js.map +1 -1
  20. package/dist/core/constants/brands.d.ts +1 -1
  21. package/dist/core/constants/brands.d.ts.map +1 -1
  22. package/dist/core/constants/brands.js +1 -1
  23. package/dist/core/constants/brands.js.map +1 -1
  24. package/dist/core/containers/image.d.ts +40 -43
  25. package/dist/core/containers/image.d.ts.map +1 -1
  26. package/dist/core/containers/image.js +52 -34
  27. package/dist/core/containers/image.js.map +1 -1
  28. package/dist/core/containers/index.d.ts +8 -12
  29. package/dist/core/containers/index.d.ts.map +1 -1
  30. package/dist/core/containers/index.js +8 -12
  31. package/dist/core/containers/index.js.map +1 -1
  32. package/dist/core/deployment/direct-factory.d.ts +14 -2
  33. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  34. package/dist/core/deployment/direct-factory.js +117 -21
  35. package/dist/core/deployment/direct-factory.js.map +1 -1
  36. package/dist/core/deployment/engine.d.ts +8 -5
  37. package/dist/core/deployment/engine.d.ts.map +1 -1
  38. package/dist/core/deployment/engine.js +36 -12
  39. package/dist/core/deployment/engine.js.map +1 -1
  40. package/dist/core/deployment/kro-factory.d.ts +33 -14
  41. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  42. package/dist/core/deployment/kro-factory.js +130 -164
  43. package/dist/core/deployment/kro-factory.js.map +1 -1
  44. package/dist/core/deployment/shared-utilities.d.ts +15 -4
  45. package/dist/core/deployment/shared-utilities.d.ts.map +1 -1
  46. package/dist/core/deployment/shared-utilities.js +47 -14
  47. package/dist/core/deployment/shared-utilities.js.map +1 -1
  48. package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
  49. package/dist/core/deployment/strategies/direct-strategy.js +1 -2
  50. package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
  51. package/dist/core/deployment/strategies/index.d.ts +0 -1
  52. package/dist/core/deployment/strategies/index.d.ts.map +1 -1
  53. package/dist/core/deployment/strategies/index.js +0 -1
  54. package/dist/core/deployment/strategies/index.js.map +1 -1
  55. package/dist/core/types/deployment.d.ts +28 -42
  56. package/dist/core/types/deployment.d.ts.map +1 -1
  57. package/dist/core/types/resource-graph.d.ts +2 -6
  58. package/dist/core/types/resource-graph.d.ts.map +1 -1
  59. package/dist/core/types/schema.d.ts +0 -1
  60. package/dist/core/types/schema.d.ts.map +1 -1
  61. package/dist/core/types/serialization.d.ts +3 -7
  62. package/dist/core/types/serialization.d.ts.map +1 -1
  63. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -1
  64. package/dist/factories/kubernetes/yaml/yaml-directory.js +2 -13
  65. package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -1
  66. package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -1
  67. package/dist/factories/kubernetes/yaml/yaml-file.js +2 -18
  68. package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -1
  69. package/dist/shared/brands.d.ts +0 -9
  70. package/dist/shared/brands.d.ts.map +1 -1
  71. package/dist/shared/brands.js +0 -9
  72. package/dist/shared/brands.js.map +1 -1
  73. package/package.json +6 -3
  74. package/dist/alchemy/deployment.d.ts +0 -12
  75. package/dist/alchemy/deployment.d.ts.map +0 -1
  76. package/dist/alchemy/deployment.js +0 -12
  77. package/dist/alchemy/deployment.js.map +0 -1
  78. package/dist/core/containers/resolve.d.ts +0 -14
  79. package/dist/core/containers/resolve.d.ts.map +0 -1
  80. package/dist/core/containers/resolve.js +0 -88
  81. package/dist/core/containers/resolve.js.map +0 -1
  82. package/dist/core/deployment/strategies/alchemy-strategy.d.ts +0 -109
  83. package/dist/core/deployment/strategies/alchemy-strategy.d.ts.map +0 -1
  84. package/dist/core/deployment/strategies/alchemy-strategy.js +0 -556
  85. package/dist/core/deployment/strategies/alchemy-strategy.js.map +0 -1
@@ -1,556 +0,0 @@
1
- /**
2
- * Alchemy Deployment Strategy
3
- *
4
- * This module provides the alchemy deployment strategy that wraps deployments
5
- * in alchemy resources with individual resource registration.
6
- */
7
- import { DEFAULT_READINESS_TIMEOUT } from '../../config/defaults.js';
8
- import { DependencyGraph } from '../../dependencies/graph.js';
9
- import { ensureError } from '../../errors.js';
10
- import { getComponentLogger } from '../../logging/index.js';
11
- import { hasResourceMetadata } from '../../metadata/index.js';
12
- import { ensureReadinessEvaluator } from '../../readiness/index.js';
13
- import { getEffectiveScopes } from '../resource-tagging.js';
14
- import { validateAlchemyScope } from '../shared-utilities.js';
15
- import { BaseDeploymentStrategy } from './base-strategy.js';
16
- import { DirectDeploymentStrategy } from './direct-strategy.js';
17
- /**
18
- * Alchemy deployment strategy - wraps deployments in alchemy resources with individual resource registration
19
- *
20
- * This strategy implements individual resource registration for Direct mode Alchemy integration.
21
- * Unlike Kro mode which registers RGDs and instances, Direct mode registers each individual
22
- * Kubernetes resource (Deployment, Service, ConfigMap, etc.) as separate Alchemy resource types.
23
- *
24
- * ## Resource Registration Pattern
25
- *
26
- * **Direct Mode (this strategy):**
27
- * - Each individual Kubernetes resource gets its own Alchemy resource type registration
28
- * - Resource types are named using the pattern `kubernetes::{Kind}` (e.g., `kubernetes::Deployment`)
29
- * - Each instance of each resource gets a separate Alchemy resource registered
30
- * - Example: A webapp with Deployment + Service creates 2 Alchemy resource types and 2 resource instances
31
- *
32
- * **Kro Mode (for comparison):**
33
- * - Each RGD gets one Alchemy resource type registered (`kro::ResourceGraphDefinition`)
34
- * - Each instance of each RGD gets a separate Alchemy resource registered (`kro::{Kind}`)
35
- * - Example: A webapp RGD creates 1 RGD type + 1 instance type = 2 Alchemy resources total
36
- *
37
- * ## Error Handling
38
- *
39
- * The strategy implements robust error handling for individual resource failures:
40
- * - Continues processing remaining resources when individual resources fail
41
- * - Collects all errors and includes them in the final DeploymentResult
42
- * - Sets deployment status to 'partial' when some resources succeed and others fail
43
- * - Provides resource-specific error context including kind, name, namespace, and Alchemy resource type
44
- *
45
- * ## Integration with DirectTypeKroDeployer
46
- *
47
- * This strategy integrates with DirectTypeKroDeployer for actual resource deployment:
48
- * - Extracts DirectDeploymentEngine from the base DirectDeploymentStrategy
49
- * - Creates DirectTypeKroDeployer instance for individual resource deployments
50
- * - Passes deployer to each Alchemy resource provider for deployment execution
51
- *
52
- * @template TSpec - The specification type for the resource
53
- * @template TStatus - The status type for the resource
54
- */
55
- export class AlchemyDeploymentStrategy extends BaseDeploymentStrategy {
56
- alchemyScope;
57
- baseStrategy;
58
- alchemyLogger = getComponentLogger('alchemy-deployment-strategy');
59
- constructor(factoryName, namespace, schemaDefinition,
60
- // biome-ignore lint/suspicious/noExplicitAny: alchemy strategy must preserve the generic status-builder resource map contract.
61
- statusBuilder, resourceKeys, factoryOptions, alchemyScope, baseStrategy) {
62
- super(factoryName, namespace, schemaDefinition, statusBuilder, resourceKeys, factoryOptions);
63
- this.alchemyScope = alchemyScope;
64
- this.baseStrategy = baseStrategy;
65
- }
66
- /**
67
- * Execute deployment with individual resource registration for Alchemy integration
68
- *
69
- * This method implements the core logic for Direct mode Alchemy integration:
70
- *
71
- * ## Process Overview
72
- * 1. **Validation**: Validates the Alchemy scope is available and properly configured
73
- * 2. **Resource Graph Creation**: Gets the resource graph from the base strategy using createResourceGraphForInstance
74
- * 3. **Deployer Setup**: Creates DirectTypeKroDeployer instance using DirectDeploymentEngine from base strategy
75
- * 4. **Individual Registration**: Processes each resource in the resource graph individually for Alchemy registration
76
- * 5. **Error Collection**: Continues processing remaining resources when individual resources fail
77
- * 6. **Result Creation**: Creates comprehensive DeploymentResult with individual resource tracking
78
- *
79
- * ## Individual Resource Processing
80
- *
81
- * For each resource in the resource graph:
82
- * - **Type Inference**: Infers Alchemy resource type from Kubernetes kind (e.g., `kubernetes::Deployment`)
83
- * - **Type Registration**: Calls ensureResourceTypeRegistered to register the resource type (shared across instances)
84
- * - **ID Generation**: Creates unique resource ID using createAlchemyResourceId with namespace and resource info
85
- * - **Deployment**: Deploys the resource through Alchemy using the resource provider and DirectTypeKroDeployer
86
- * - **Tracking**: Tracks deployed resource with Alchemy metadata (resource ID, type, etc.)
87
- *
88
- * ## Error Handling Strategy
89
- *
90
- * The method implements robust error handling:
91
- * - **Continue on Failure**: Individual resource failures don't stop processing of remaining resources
92
- * - **Error Collection**: All errors are collected with detailed context about which resource failed
93
- * - **Resource Context**: Error messages include resource kind, name, namespace, and Alchemy resource type
94
- * - **Partial Status**: Deployment status is set to 'partial' when some resources succeed and others fail
95
- *
96
- * ## Resource Type Naming
97
- *
98
- * Resource types follow consistent naming patterns:
99
- * - **Kubernetes Resources**: `kubernetes::{Kind}` (e.g., `kubernetes::Deployment`, `kubernetes::Service`)
100
- * - **Shared Types**: Multiple instances of the same resource type share the same Alchemy resource type registration
101
- * - **Unique IDs**: Each resource instance gets a unique Alchemy resource ID for individual tracking
102
- *
103
- * @param spec - The resource specification to deploy
104
- * @param instanceName - The name of this specific instance
105
- * @returns Promise<DeploymentResult> - Comprehensive deployment result with individual resource tracking
106
- * @throws Error - If Alchemy scope validation fails or critical deployment errors occur
107
- */
108
- async executeDeployment(spec, instanceName, opts) {
109
- try {
110
- // Validate alchemy scope is available and properly configured
111
- validateAlchemyScope(this.alchemyScope, 'Alchemy deployment');
112
- // Use static imports for registration functions
113
- const { ensureResourceTypeRegistered, createAlchemyResourceId } = await import('../../../alchemy/deployment.js');
114
- // Get resource graph from base strategy using createResourceGraphForInstance
115
- // This provides the individual Kubernetes resources that need to be registered with Alchemy
116
- this.logger.info('About to create resource graph for instance', {
117
- instanceName,
118
- hasBaseStrategy: !!this.baseStrategy,
119
- baseStrategyType: this.baseStrategy?.constructor?.name,
120
- });
121
- const resourceGraph = this.createResourceGraphForInstance(spec, instanceName);
122
- this.logger.info('Resource graph created', {
123
- resourceCount: resourceGraph.resources.length,
124
- graphName: resourceGraph.name,
125
- });
126
- let directResult;
127
- try {
128
- directResult = await this.executeBaseDirectDeployment(spec, instanceName, opts);
129
- }
130
- catch (directDeploymentError) {
131
- const error = ensureError(directDeploymentError);
132
- this.logger.warn('Base direct deployment failed; preserving failure in Alchemy result', {
133
- error: error.message,
134
- resourceCount: resourceGraph.resources.length,
135
- });
136
- directResult = {
137
- status: 'failed',
138
- deploymentId: `alchemy-direct-failed-${instanceName}-${Date.now()}`,
139
- resources: [],
140
- dependencyGraph: resourceGraph.dependencyGraph,
141
- duration: 0,
142
- errors: resourceGraph.resources.map((resource) => ({
143
- resourceId: resource.id,
144
- phase: 'deployment',
145
- error: new Error(`Direct deployment failed for ${resource.manifest.kind || 'Unknown'}/${resource.manifest.metadata?.name || 'unnamed'}: ${error.message}`),
146
- timestamp: new Date(),
147
- })),
148
- };
149
- }
150
- const directResourcesById = new Map(directResult.resources.map((resource) => [resource.id, resource]));
151
- const trackingDeployer = {
152
- deploy: async (resource) => resource,
153
- delete: async () => {
154
- // Alchemy direct mode is only registering state here; the base direct
155
- // deployment already performed Kubernetes mutations.
156
- },
157
- };
158
- // Process each actually deployed resource in the graph for Alchemy state registration.
159
- const deployedResources = [];
160
- const errors = [];
161
- const startTime = Date.now();
162
- this.logger.info('Processing resource graph for alchemy deployment', {
163
- resourceCount: resourceGraph.resources.length,
164
- resourceIds: resourceGraph.resources.map((r) => r.id),
165
- resourceKinds: resourceGraph.resources.map((r) => r.manifest.kind),
166
- });
167
- // Continue processing remaining resources when individual resources fail
168
- for (const resource of resourceGraph.resources) {
169
- const directDeployedResource = directResourcesById.get(resource.id);
170
- if (!directDeployedResource) {
171
- this.logger.debug('Skipping Alchemy state registration for undeployed resource', {
172
- resourceId: resource.id,
173
- resourceScopes: getEffectiveScopes(resource.manifest),
174
- targetScopes: opts?.targetScopes,
175
- });
176
- continue;
177
- }
178
- try {
179
- this.logger.info('Processing resource for alchemy deployment', {
180
- resourceId: resource.id,
181
- resourceKind: resource.manifest.kind,
182
- resourceName: resource.manifest.metadata?.name,
183
- hasReadinessEvaluator: hasResourceMetadata(resource.manifest),
184
- });
185
- const resourceWithEvaluator = ensureReadinessEvaluator(resource.manifest);
186
- // Register resource type dynamically (shared across instances)
187
- const ResourceProvider = ensureResourceTypeRegistered(resourceWithEvaluator);
188
- // Create unique resource ID for this instance
189
- const resourceId = createAlchemyResourceId(resourceWithEvaluator, this.namespace);
190
- // Deploy individual resource through Alchemy within the scope
191
- await this.alchemyScope.run(async () => {
192
- try {
193
- // Extract serializable kubeConfig options
194
- const kubeConfigOptions = this.extractKubeConfigOptions();
195
- // Create the resource through Alchemy
196
- const _alchemyResource = await ResourceProvider(resourceId, {
197
- resource: resourceWithEvaluator,
198
- namespace: this.namespace,
199
- deploymentStrategy: 'direct',
200
- kubeConfigOptions,
201
- deployer: trackingDeployer,
202
- options: {
203
- waitForReady: this.factoryOptions.waitForReady ?? false, // Default to false for faster tests
204
- timeout: this.factoryOptions.timeout ?? DEFAULT_READINESS_TIMEOUT,
205
- factoryName: this.factoryName,
206
- instanceName,
207
- ...(opts?.singletonSpecFingerprint && { singletonSpecFingerprint: opts.singletonSpecFingerprint }),
208
- },
209
- });
210
- // Track the deployed resource
211
- deployedResources.push({
212
- ...directDeployedResource,
213
- alchemyResourceId: resourceId,
214
- alchemyResourceType: ResourceProvider.name || 'unknown',
215
- });
216
- this.logger.debug('Successfully deployed resource through Alchemy', {
217
- resourceKind: resource.manifest.kind,
218
- resourceName: resource.manifest.metadata?.name,
219
- alchemyResourceId: resourceId,
220
- alchemyResourceType: ResourceProvider.name,
221
- });
222
- }
223
- catch (deployError) {
224
- const error = ensureError(deployError);
225
- this.logger.error('Failed to deploy individual resource through Alchemy', error, {
226
- resourceKind: resource.manifest.kind,
227
- resourceName: resource.manifest.metadata?.name,
228
- resourceId: resource.id,
229
- namespace: this.namespace,
230
- });
231
- // Collect error but continue processing other resources
232
- errors.push({
233
- resourceId: resource.id,
234
- error,
235
- phase: 'deployment',
236
- timestamp: new Date(),
237
- resourceKind: resource.manifest.kind || 'Unknown',
238
- resourceName: resource.manifest.metadata?.name || 'unnamed',
239
- alchemyResourceType: ResourceProvider.name || 'unknown',
240
- namespace: this.namespace,
241
- });
242
- }
243
- });
244
- }
245
- catch (registrationError) {
246
- const error = ensureError(registrationError);
247
- this.logger.error('Failed to register resource type with Alchemy', error, {
248
- resourceKind: resource.manifest.kind,
249
- resourceName: resource.manifest.metadata?.name,
250
- resourceId: resource.id,
251
- });
252
- // Collect error but continue processing other resources
253
- errors.push({
254
- resourceId: resource.id,
255
- error,
256
- phase: 'deployment',
257
- timestamp: new Date(),
258
- resourceKind: resource.manifest.kind || 'Unknown',
259
- resourceName: resource.manifest.metadata?.name || 'unnamed',
260
- alchemyResourceType: 'registration-failed',
261
- namespace: this.namespace,
262
- });
263
- }
264
- }
265
- // Create comprehensive deployment result
266
- const duration = Date.now() - startTime;
267
- const allErrors = [
268
- ...(directResult.errors ?? []).map((error) => ({
269
- ...error,
270
- resourceKind: 'Unknown',
271
- resourceName: error.resourceId,
272
- alchemyResourceType: 'direct-deployment',
273
- namespace: this.namespace,
274
- })),
275
- ...errors,
276
- ];
277
- const hasErrors = allErrors.length > 0;
278
- let hasSuccesses = deployedResources.length > 0;
279
- let rolledBackAfterAlchemyFailure = false;
280
- if (hasErrors && directResult.resources.length > 0) {
281
- await this.rollbackBaseDirectDeployment(directResult);
282
- deployedResources.length = 0;
283
- hasSuccesses = false;
284
- rolledBackAfterAlchemyFailure = true;
285
- }
286
- let status;
287
- if (rolledBackAfterAlchemyFailure) {
288
- status = 'failed';
289
- }
290
- else if (hasSuccesses && !hasErrors) {
291
- status = 'success';
292
- }
293
- else if (!hasSuccesses && hasErrors) {
294
- status = 'failed';
295
- }
296
- else if (!hasSuccesses && !hasErrors) {
297
- status = directResult.status;
298
- }
299
- else {
300
- status = 'partial';
301
- }
302
- this.logger.info('Alchemy deployment completed', {
303
- status,
304
- successfulResources: deployedResources.length,
305
- failedResources: allErrors.length,
306
- totalResources: resourceGraph.resources.length,
307
- duration,
308
- });
309
- return {
310
- status,
311
- deploymentId: directResult.deploymentId,
312
- resources: deployedResources,
313
- dependencyGraph: resourceGraph.dependencyGraph,
314
- duration,
315
- errors: allErrors.map((e) => ({
316
- resourceId: e.resourceId,
317
- error: e.error,
318
- phase: e.phase,
319
- timestamp: e.timestamp,
320
- })),
321
- };
322
- }
323
- catch (error) {
324
- this.logger.error('Alchemy deployment strategy failed', ensureError(error));
325
- throw error;
326
- }
327
- }
328
- async executeBaseDirectDeployment(spec, instanceName, opts) {
329
- const strategy = this.baseStrategy;
330
- if (typeof strategy.executeDeployment !== 'function') {
331
- throw new Error('Alchemy direct deployment requires a direct base strategy');
332
- }
333
- return strategy.executeDeployment(spec, instanceName, opts);
334
- }
335
- async rollbackBaseDirectDeployment(directResult) {
336
- const strategy = this.baseStrategy;
337
- if (typeof strategy.rollbackDeployment !== 'function') {
338
- this.logger.warn('Alchemy registration failed after direct deployment, but base strategy cannot rollback', {
339
- deploymentId: directResult.deploymentId,
340
- resourceCount: directResult.resources.length,
341
- });
342
- return;
343
- }
344
- try {
345
- const scopes = [...new Set(directResult.resources.flatMap((resource) => getEffectiveScopes(resource.manifest)))];
346
- await strategy.rollbackDeployment(directResult.deploymentId, scopes.length > 0 ? { scopes } : undefined);
347
- this.logger.info('Rolled back direct resources after Alchemy registration failure', {
348
- deploymentId: directResult.deploymentId,
349
- resourceCount: directResult.resources.length,
350
- });
351
- }
352
- catch (rollbackError) {
353
- this.logger.error('Failed to rollback direct resources after Alchemy registration failure', ensureError(rollbackError), {
354
- deploymentId: directResult.deploymentId,
355
- });
356
- throw rollbackError;
357
- }
358
- }
359
- getStrategyMode() {
360
- return 'direct'; // Alchemy strategy uses direct mode for individual resource registration
361
- }
362
- /**
363
- * Create resource graph for instance using base strategy logic
364
- */
365
- createResourceGraphForInstance(spec, instanceName) {
366
- // Delegate to the base strategy's resource resolution logic
367
- if (this.baseStrategy instanceof DirectDeploymentStrategy) {
368
- const baseStrategy = this.baseStrategy;
369
- if (baseStrategy.resourceResolver &&
370
- typeof baseStrategy.resourceResolver.createResourceGraphForInstance === 'function') {
371
- this.logger.info('Calling createResourceGraphForInstance on resource resolver', {
372
- hasResourceResolver: !!baseStrategy.resourceResolver,
373
- resolverType: baseStrategy.resourceResolver.constructor?.name,
374
- });
375
- const resourceGraph = baseStrategy.resourceResolver.createResourceGraphForInstance(spec, instanceName);
376
- this.logger.info('Created resource graph from base strategy', {
377
- resourceCount: resourceGraph.resources.length,
378
- resourceIds: resourceGraph.resources.map((r) => r.id),
379
- resourceKinds: resourceGraph.resources.map((r) => r.manifest?.kind),
380
- });
381
- return { ...resourceGraph, name: instanceName };
382
- }
383
- else {
384
- this.logger.warn('Base strategy does not have resourceResolver or createResourceGraphForInstance method', {
385
- hasResourceResolver: !!baseStrategy.resourceResolver,
386
- resolverType: baseStrategy.resourceResolver?.constructor?.name,
387
- hasMethod: baseStrategy.resourceResolver
388
- ? typeof baseStrategy.resourceResolver.createResourceGraphForInstance
389
- : 'no resolver',
390
- });
391
- }
392
- }
393
- else {
394
- this.logger.warn('Base strategy is not DirectDeploymentStrategy', {
395
- baseStrategyType: this.baseStrategy?.constructor?.name,
396
- });
397
- }
398
- // Fallback implementation - this should not happen in normal operation
399
- this.logger.error('Falling back to empty resource graph - this indicates a configuration issue');
400
- return {
401
- name: instanceName,
402
- resources: [],
403
- dependencyGraph: new DependencyGraph(),
404
- };
405
- }
406
- /**
407
- * Extract serializable kubeConfig options from factory options
408
- */
409
- extractKubeConfigOptions() {
410
- let kubeConfigOptions = {};
411
- if (this.factoryOptions.kubeConfig) {
412
- const kc = this.factoryOptions.kubeConfig;
413
- const cluster = kc.getCurrentCluster();
414
- const user = kc.getCurrentUser();
415
- const context = kc.getCurrentContext();
416
- this.logger.debug('Extracting kubeconfig options for alchemy', {
417
- hasCluster: !!cluster,
418
- clusterSkipTLS: cluster?.skipTLSVerify,
419
- clusterServer: cluster?.server,
420
- hasUser: !!user,
421
- context,
422
- });
423
- // SECURITY: Prioritize user's explicit skipTLSVerify choice over cluster config
424
- const userSkipTLS = this.factoryOptions.skipTLSVerify;
425
- const clusterSkipTLS = cluster?.skipTLSVerify;
426
- const finalSkipTLS = userSkipTLS === true ? true : (clusterSkipTLS ?? false);
427
- // Log security warning when TLS is disabled
428
- if (finalSkipTLS) {
429
- this.logger.warn('TLS verification disabled - this is insecure and should only be used in development', {
430
- component: 'alchemy-deployment-strategy',
431
- security: 'tls-disabled',
432
- userExplicit: userSkipTLS === true,
433
- fromClusterConfig: clusterSkipTLS === true,
434
- server: cluster?.server,
435
- recommendation: userSkipTLS === true
436
- ? 'Remove skipTLSVerify: true from factory options for production'
437
- : 'Update cluster configuration to enable TLS verification',
438
- });
439
- }
440
- kubeConfigOptions = {
441
- skipTLSVerify: finalSkipTLS,
442
- ...(cluster?.server && { server: cluster.server }),
443
- ...(context && { context }),
444
- // Include complete cluster configuration
445
- ...(cluster && {
446
- cluster: {
447
- name: cluster.name,
448
- server: cluster.server,
449
- skipTLSVerify: finalSkipTLS,
450
- ...(cluster.caData && { caData: cluster.caData }),
451
- ...(cluster.caFile && { caFile: cluster.caFile }),
452
- },
453
- }),
454
- // Include complete user configuration
455
- ...(user && {
456
- user: {
457
- name: user.name,
458
- ...(user.token && { token: user.token }),
459
- ...(user.certData && { certData: user.certData }),
460
- ...(user.certFile && { certFile: user.certFile }),
461
- ...(user.keyData && { keyData: user.keyData }),
462
- ...(user.keyFile && { keyFile: user.keyFile }),
463
- ...(user.exec ? { exec: user.exec } : {}),
464
- ...(user.authProvider
465
- ? { authProvider: user.authProvider }
466
- : {}),
467
- },
468
- }),
469
- };
470
- this.logger.debug('Extracted kubeconfig options', {
471
- server: cluster?.server ?? '(default)',
472
- hasToken: !!user?.token,
473
- hasCertData: !!user?.certData,
474
- hasKeyData: !!user?.keyData,
475
- });
476
- }
477
- else {
478
- // Try extracting from the base strategy's factory options (common in tests)
479
- try {
480
- if (this.baseStrategy instanceof DirectDeploymentStrategy) {
481
- const bs = this.baseStrategy;
482
- const baseFactoryOptions = bs?.factoryOptions;
483
- const baseKc = baseFactoryOptions?.kubeConfig;
484
- const cluster = baseKc?.getCurrentCluster();
485
- const user = baseKc?.getCurrentUser();
486
- const context = baseKc?.getCurrentContext();
487
- this.logger.debug('Extracting kubeconfig options from base strategy for alchemy', {
488
- hasBaseFactoryOptions: !!baseFactoryOptions,
489
- hasBaseKubeConfig: !!baseKc,
490
- hasCluster: !!cluster,
491
- clusterSkipTLS: cluster?.skipTLSVerify,
492
- clusterServer: cluster?.server,
493
- hasUser: !!user,
494
- context,
495
- });
496
- if (baseKc && cluster) {
497
- // SECURITY: Prioritize user's explicit skipTLSVerify choice over cluster config
498
- const userSkipTLS = this.factoryOptions.skipTLSVerify;
499
- const clusterSkipTLS = cluster.skipTLSVerify;
500
- const finalSkipTLS = userSkipTLS === true ? true : (clusterSkipTLS ?? false);
501
- // Log security warning when TLS is disabled
502
- if (finalSkipTLS) {
503
- this.logger.warn('TLS verification disabled - this is insecure and should only be used in development', {
504
- component: 'alchemy-deployment-strategy',
505
- security: 'tls-disabled',
506
- userExplicit: userSkipTLS === true,
507
- fromClusterConfig: clusterSkipTLS === true,
508
- server: cluster?.server,
509
- recommendation: userSkipTLS === true
510
- ? 'Remove skipTLSVerify: true from factory options for production'
511
- : 'Update cluster configuration to enable TLS verification',
512
- });
513
- }
514
- kubeConfigOptions = {
515
- skipTLSVerify: finalSkipTLS,
516
- ...(cluster.server && { server: cluster.server }),
517
- ...(context && { context }),
518
- cluster: {
519
- name: cluster.name,
520
- server: cluster.server,
521
- skipTLSVerify: finalSkipTLS,
522
- ...(cluster.caData && { caData: cluster.caData }),
523
- ...(cluster.caFile && { caFile: cluster.caFile }),
524
- },
525
- ...(user && {
526
- user: {
527
- name: user.name,
528
- ...(user.token && { token: user.token }),
529
- ...(user.certData && { certData: user.certData }),
530
- ...(user.certFile && { certFile: user.certFile }),
531
- ...(user.keyData && { keyData: user.keyData }),
532
- ...(user.keyFile && { keyFile: user.keyFile }),
533
- ...(user.exec ? { exec: user.exec } : {}),
534
- ...(user.authProvider
535
- ? { authProvider: user.authProvider }
536
- : {}),
537
- },
538
- }),
539
- };
540
- this.logger.debug('Extracted kubeconfig options from base strategy', {
541
- hasCluster: !!kubeConfigOptions.cluster,
542
- hasUser: !!kubeConfigOptions.user,
543
- });
544
- }
545
- }
546
- }
547
- catch (extractionError) {
548
- this.logger.debug('Could not extract kubeconfig from base strategy, using default', {
549
- error: ensureError(extractionError).message,
550
- });
551
- }
552
- }
553
- return kubeConfigOptions;
554
- }
555
- }
556
- //# sourceMappingURL=alchemy-strategy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"alchemy-strategy.js","sourceRoot":"","sources":["../../../../src/core/deployment/strategies/alchemy-strategy.ts"],"names":[],"mappings":"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"}