{"version":3,"sources":["../src/containers.ts"],"sourcesContent":["import { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execAsync = promisify(exec);\n\nfunction buildKubectlEnvironment(kubeconfig?: string): NodeJS.ProcessEnv {\n  if (!kubeconfig) {\n    return process.env;\n  }\n  return {\n    ...process.env,\n    // eslint-disable-next-line @typescript-eslint/naming-convention -- environment variable name\n    KUBECONFIG: kubeconfig,\n  };\n}\n\nexport type ContainerConfig = {\n  image: string;\n  environment: Record<string, string>;\n  volumes: string[];\n  ports: Record<string, string>;\n  secrets: Record<string, string>;\n};\n\nexport type KubernetesConfig = {\n  namespace: string;\n  serviceAccount: string;\n  secrets: Record<string, Record<string, string>>;\n  configMaps: Record<string, Record<string, string>>;\n};\n\nexport class DockerIntegration {\n  async createContainer(name: string, config: ContainerConfig): Promise<string> {\n    const environmentVariables = Object.entries(config.environment)\n      .map(([key, value]) => `-e ${key}=\"${value}\"`)\n      .join(' ');\n\n    const volumes = config.volumes.map((v) => `-v ${v}`).join(' ');\n    const ports = Object.entries(config.ports)\n      .map(([host, container]) => `-p ${host}:${container}`)\n      .join(' ');\n\n    const secrets = Object.entries(config.secrets)\n      .map(([key, value]) => `-e ${key}=\"${value}\"`)\n      .join(' ');\n\n    const command = `docker run -d --name ${name} ${environmentVariables} ${volumes} ${ports} ${secrets} ${config.image}`;\n\n    try {\n      const { stdout } = await execAsync(command);\n      return stdout.trim();\n    } catch (error) {\n      throw new Error(`Failed to create Docker container: ${error}`);\n    }\n  }\n\n  async injectSecrets(containerId: string, secrets: Record<string, string>): Promise<void> {\n    for (const [key, value] of Object.entries(secrets)) {\n      const command = `docker exec ${containerId} sh -c \"echo '${value}' > /run/secrets/${key}\"`;\n      try {\n        await execAsync(command);\n      } catch (error) {\n        console.warn(`Failed to inject secret ${key}: ${error}`);\n      }\n    }\n  }\n\n  async getContainerLogs(containerId: string, tail = 100): Promise<string> {\n    try {\n      const { stdout } = await execAsync(`docker logs --tail ${tail} ${containerId}`);\n      return stdout;\n    } catch (error) {\n      throw new Error(`Failed to get container logs: ${error}`);\n    }\n  }\n\n  async stopContainer(containerId: string): Promise<void> {\n    try {\n      await execAsync(`docker stop ${containerId}`);\n    } catch (error) {\n      throw new Error(`Failed to stop container: ${error}`);\n    }\n  }\n\n  async removeContainer(containerId: string): Promise<void> {\n    try {\n      await execAsync(`docker rm ${containerId}`);\n    } catch (error) {\n      throw new Error(`Failed to remove container: ${error}`);\n    }\n  }\n\n  async listContainers(): Promise<Array<{ id: string; name: string; status: string }>> {\n    try {\n      const { stdout } = await execAsync('docker ps -a --format \"{{.ID}}|{{.Names}}|{{.Status}}\"');\n      return stdout\n        .trim()\n        .split('\\n')\n        .filter((line) => line)\n        .map((line) => {\n          const parts = line.split('|');\n          return {\n            id: parts[0] ?? '',\n            name: parts[1] ?? '',\n            status: parts[2] ?? '',\n          };\n        });\n    } catch (error) {\n      throw new Error(`Failed to list containers: ${error}`);\n    }\n  }\n}\n\nexport class K8sIntegration {\n  constructor(private readonly kubeconfig?: string) {}\n\n  async createSecret(name: string, namespace: string, data: Record<string, string>): Promise<void> {\n    const secretData = Object.entries(data)\n      .map(([key, value]) => `${key}=${Buffer.from(value).toString('base64')}`)\n      .join(',');\n\n    const command = `kubectl create secret generic ${name} --from-literal=${secretData} --namespace=${namespace}`;\n\n    try {\n      await execAsync(command, {\n        env: buildKubectlEnvironment(this.kubeconfig),\n      });\n    } catch (error) {\n      throw new Error(`Failed to create Kubernetes secret: ${error}`);\n    }\n  }\n\n  async updateSecret(name: string, namespace: string, data: Record<string, string>): Promise<void> {\n    const secretData = Object.entries(data)\n      .map(([key, value]) => `${key}=${Buffer.from(value).toString('base64')}`)\n      .join(',');\n\n    const command = `kubectl create secret generic ${name} --from-literal=${secretData} --namespace=${namespace} --dry-run=client -o yaml | kubectl apply -f -`;\n\n    try {\n      await execAsync(command, {\n        env: buildKubectlEnvironment(this.kubeconfig),\n      });\n    } catch (error) {\n      throw new Error(`Failed to update Kubernetes secret: ${error}`);\n    }\n  }\n\n  async getSecret(name: string, namespace: string): Promise<Record<string, string>> {\n    try {\n      const { stdout } = await execAsync(`kubectl get secret ${name} -n ${namespace} -o json`, {\n        env: buildKubectlEnvironment(this.kubeconfig),\n      });\n\n      const secret = JSON.parse(stdout) as { data?: Record<string, string> };\n      const data: Record<string, string> = {};\n\n      for (const [key, value] of Object.entries(secret.data ?? {})) {\n        data[key] = Buffer.from(value as string, 'base64').toString('utf8');\n      }\n\n      return data;\n    } catch (error) {\n      throw new Error(`Failed to get Kubernetes secret: ${error}`);\n    }\n  }\n\n  async deleteSecret(name: string, namespace: string): Promise<void> {\n    try {\n      await execAsync(`kubectl delete secret ${name} --namespace=${namespace}`, {\n        env: buildKubectlEnvironment(this.kubeconfig),\n      });\n    } catch (error) {\n      throw new Error(`Failed to delete Kubernetes secret: ${error}`);\n    }\n  }\n\n  async createConfigMap(\n    name: string,\n    namespace: string,\n    data: Record<string, string>\n  ): Promise<void> {\n    const dataArguments = Object.entries(data)\n      .map(([key, value]) => `--from-literal=${key}=${value}`)\n      .join(' ');\n\n    const command = `kubectl create configmap ${name} ${dataArguments} --namespace=${namespace}`;\n\n    try {\n      await execAsync(command, {\n        env: buildKubectlEnvironment(this.kubeconfig),\n      });\n    } catch (error) {\n      throw new Error(`Failed to create Kubernetes configmap: ${error}`);\n    }\n  }\n\n  async injectSecretsIntoDeployment(\n    deploymentName: string,\n    namespace: string,\n    secretReferences: Record<string, string>\n  ): Promise<void> {\n    // This would patch the deployment to mount secrets as environment variables or volumes\n    const patch = {\n      spec: {\n        template: {\n          spec: {\n            containers: [\n              {\n                name: deploymentName,\n                envFrom: [\n                  {\n                    secretRef: {\n                      name: Object.values(secretReferences)[0], // Simplified - would need more complex logic\n                    },\n                  },\n                ],\n              },\n            ],\n          },\n        },\n      },\n    };\n\n    const patchJson = JSON.stringify(patch);\n    const command = `kubectl patch deployment ${deploymentName} -n ${namespace} --type merge -p '${patchJson}'`;\n\n    try {\n      await execAsync(command, {\n        env: buildKubectlEnvironment(this.kubeconfig),\n      });\n    } catch (error) {\n      throw new Error(`Failed to inject secrets into deployment: ${error}`);\n    }\n  }\n\n  async getPodLogs(podName: string, namespace: string, tail = 100): Promise<string> {\n    try {\n      const { stdout } = await execAsync(`kubectl logs ${podName} -n ${namespace} --tail=${tail}`, {\n        env: buildKubectlEnvironment(this.kubeconfig),\n      });\n      return stdout;\n    } catch (error) {\n      throw new Error(`Failed to get pod logs: ${error}`);\n    }\n  }\n\n  async listSecrets(namespace: string): Promise<string[]> {\n    try {\n      const { stdout } = await execAsync(\n        `kubectl get secrets -n ${namespace} -o jsonpath='{.items[*].metadata.name}'`,\n        {\n          env: buildKubectlEnvironment(this.kubeconfig),\n        }\n      );\n      return stdout\n        .trim()\n        .split(' ')\n        .filter((name) => name);\n    } catch (error) {\n      throw new Error(`Failed to list Kubernetes secrets: ${error}`);\n    }\n  }\n}\n\nexport class ContainerOrchestrator {\n  constructor(\n    private readonly docker?: DockerIntegration,\n    private readonly kubernetes?: K8sIntegration\n  ) {}\n\n  async deployApplication(\n    name: string,\n    config: ContainerConfig | KubernetesConfig,\n    useKubernetes = false\n  ): Promise<void> {\n    if (useKubernetes && this.kubernetes) {\n      await this.deployToKubernetes(name, config as KubernetesConfig);\n    } else if (this.docker) {\n      await this.deployToDocker(name, config as ContainerConfig);\n    } else {\n      throw new Error('No container runtime configured');\n    }\n  }\n\n  private async deployToDocker(name: string, config: ContainerConfig): Promise<void> {\n    if (!this.docker) {\n      throw new Error('Docker integration not configured');\n    }\n\n    const containerId = await this.docker.createContainer(name, config);\n    console.info(`Created Docker container: ${containerId}`);\n\n    if (config.secrets) {\n      await this.docker.injectSecrets(containerId, config.secrets);\n      console.info(`Injected secrets into container: ${containerId}`);\n    }\n  }\n\n  private async deployToKubernetes(_name: string, config: KubernetesConfig): Promise<void> {\n    if (!this.kubernetes) {\n      throw new Error('Kubernetes integration not configured');\n    }\n\n    // Create secrets\n    for (const [secretName, secretData] of Object.entries(config.secrets)) {\n      await this.kubernetes.createSecret(secretName, config.namespace, secretData);\n      console.info(`Created Kubernetes secret: ${secretName}`);\n    }\n\n    // Create config maps\n    for (const [configName, configData] of Object.entries(config.configMaps)) {\n      await this.kubernetes.createConfigMap(configName, config.namespace, configData);\n      console.info(`Created Kubernetes configmap: ${configName}`);\n    }\n  }\n\n  async getLogs(name: string, namespace?: string, tail = 100): Promise<string> {\n    if (this.kubernetes && namespace) {\n      return await this.kubernetes.getPodLogs(name, namespace, tail);\n    } else if (this.docker) {\n      return await this.docker.getContainerLogs(name, tail);\n    } else {\n      throw new Error('No container runtime configured');\n    }\n  }\n\n  async cleanup(name: string, namespace?: string): Promise<void> {\n    if (this.kubernetes && namespace) {\n      // Clean up Kubernetes resources\n      for (const secretName of await this.kubernetes.listSecrets(namespace)) {\n        if (secretName.startsWith(name)) {\n          await this.kubernetes.deleteSecret(secretName, namespace);\n        }\n      }\n    } else if (this.docker) {\n      const containers = await this.docker.listContainers();\n      const container = containers.find((c) => c.name === name);\n      if (container) {\n        await this.docker.stopContainer(container.id);\n        await this.docker.removeContainer(container.id);\n      }\n    }\n  }\n}\n"],"mappings":"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","names":[]}