@forge/cli-shared

8.15.2-next.0-experimental-1dcd5938.15.2-next.1
~

Modified (14 files)

Index: package/out/tunnel/docker-compose-lifecycle.js
===================================================================
--- package/out/tunnel/docker-compose-lifecycle.js
+++ package/out/tunnel/docker-compose-lifecycle.js
@@ -1,12 +1,11 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.processDockerAuthentication = exports.stopDockerComposeStack = exports.determineComposeFlags = exports.startDockerComposeStack = exports.deleteDockerComposeFile = exports.generateContainersDockerComposeFile = exports.DockerAuthenticationError = exports.CannotUseBothImageAndBuildContextError = exports.MissingImageOrBuildContextError = exports.UnableToParseDockerComposeFileError = exports.DockerUnableToStartError = exports.DockerUnableToPullProxySidecarImage = exports.InvalidContainerServicePort = exports.STARTUP_TIMER_BUFFER_MS = exports.STARTUP_TIMER_MS = exports.K8S_AUTH_TOKEN_FILENAME = exports.CONTAINER_SERVICE_ASSETS = exports.PROXY_SIDECAR_VOLUME_DIR = void 0;
+exports.processDockerAuthentication = exports.stopDockerComposeStack = exports.startDockerComposeStack = exports.deleteDockerComposeFile = exports.generateContainersDockerComposeFile = exports.DockerAuthenticationError = exports.CannotUseBothImageAndBuildContextError = exports.MissingImageOrBuildContextError = exports.DockerUnableToStartError = exports.DockerUnableToPullProxySidecarImage = exports.InvalidContainerServicePort = exports.K8S_AUTH_TOKEN_FILENAME = exports.CONTAINER_SERVICE_ASSETS = exports.PROXY_SIDECAR_VOLUME_DIR = void 0;
 const tslib_1 = require("tslib");
 const fs = tslib_1.__importStar(require("fs"));
 const path = tslib_1.__importStar(require("path"));
 const yaml = tslib_1.__importStar(require("yaml"));
-const http = tslib_1.__importStar(require("http"));
 const docker_compose_1 = require("docker-compose");
 const shared_1 = require("../shared");
 const text_1 = require("../ui/text");
 const tunnel_options_1 = require("./tunnel-options");
@@ -14,16 +13,8 @@
 exports.PROXY_SIDECAR_VOLUME_DIR = '/forge/container';
 exports.CONTAINER_SERVICE_ASSETS = '.container-service-assets';
 exports.K8S_AUTH_TOKEN_FILENAME = 'local-account';
 const PROXY_SIDECAR_SERVICE_NAME = 'proxy-sidecar';
-const LIFECYCLE_PATTERNS = [
-    /Container .* (Starting|Started|Stopping|Stopped|Creating|Created|Recreated)/,
-    /Network .* (Creating|Created|Removing|Removed)/,
-    /Volume .* (Creating|Created|Removing|Removed)/,
-    /\[[\+\-]\] Running/
-];
-exports.STARTUP_TIMER_MS = 30 * 1000;
-exports.STARTUP_TIMER_BUFFER_MS = 5 * 1000;
 class InvalidContainerServicePort extends shared_1.UserError {
     constructor(serviceKey) {
         super(text_1.Text.error.invalidServicePort(serviceKey));
     }
@@ -40,14 +31,8 @@
         super(text_1.Text.tunnel.unableToStartDockerComposeStack(err?.message ?? 'Unknown Error Occurred.'));
     }
 }
 exports.DockerUnableToStartError = DockerUnableToStartError;
-class UnableToParseDockerComposeFileError extends shared_1.UserError {
-    constructor(serviceKey, err) {
-        super(text_1.Text.tunnel.UnableToParseDockerComposeFileError(serviceKey, err?.message ?? 'Unknown Error Occurred.'));
-    }
-}
-exports.UnableToParseDockerComposeFileError = UnableToParseDockerComposeFileError;
 class MissingImageOrBuildContextError extends shared_1.UserError {
     constructor(containerKey) {
         super(text_1.Text.tunnel.missingImageOrBuildContext(containerKey));
     }
@@ -66,9 +51,9 @@
 }
 exports.DockerAuthenticationError = DockerAuthenticationError;
 const generateContainersDockerComposeFile = async (services, appId, envId) => {
     const filesGenerated = {};
-    for (const [serviceIndex, service] of services.entries()) {
+    for (const service of services) {
         const { key: serviceKey, containers } = service;
         const containersWithTunnelConfig = containers.filter((container) => !!container.tunnel);
         if (containersWithTunnelConfig.length > 0) {
             const port = await (0, tunnel_options_1.getServicePort)(services, serviceKey);
@@ -86,31 +71,25 @@
                     container_name: container.key,
                     ...container.tunnel?.docker,
                     depends_on: [PROXY_SIDECAR_SERVICE_NAME]
                 };
-                if (config.build?.context) {
-                    config.build.context = adjustFilePath(config.build.context);
+                if (config.build?.context && !path.isAbsolute(config.build.context)) {
+                    let context = config.build.context;
+                    if (context.startsWith('./')) {
+                        context = context.slice(2);
+                    }
+                    config.build.context = '../' + context;
                 }
-                if (config.volumes) {
-                    config.volumes = config.volumes.map((volume) => adjustFilePath(volume));
-                }
-                if (config.develop?.watch) {
-                    config.develop.watch = config.develop.watch.map((watchConfig) => ({
-                        ...watchConfig,
-                        path: adjustFilePath(watchConfig.path)
-                    }));
-                }
                 const envArray = container?.tunnel?.docker.environment ?? [];
                 const filteredEnvArray = envArray.filter((envVar) => !envVar.startsWith('FORGE_EGRESS_PROXY_URL='));
                 filteredEnvArray.push('FORGE_EGRESS_PROXY_URL=http://proxy-sidecar:7072');
                 config.environment = filteredEnvArray;
                 return [container.key, config];
             }));
-            const healthEndpointPath = containersWithTunnelConfig[0].health.route.path;
             const dockerComposeConfig = {
                 services: {
                     ...containerConfig,
-                    ...(await getProxySidecarConfig(serviceKey, Object.keys(containerConfig), port, appId, envId, serviceIndex, healthEndpointPath))
+                    ...(await getProxySidecarConfig(serviceKey, Object.keys(containerConfig), port, appId, envId))
                 }
             };
             const yamlString = yaml.stringify(dockerComposeConfig);
             const filePath = getContainerDockerComposePath(serviceKey);
@@ -120,19 +99,9 @@
     }
     return filesGenerated;
 };
 exports.generateContainersDockerComposeFile = generateContainersDockerComposeFile;
-const adjustFilePath = (filePath) => {
-    if (path.isAbsolute(filePath)) {
-        return filePath;
-    }
-    let adjusted = filePath;
-    if (adjusted.startsWith('./')) {
-        adjusted = adjusted.slice(2);
-    }
-    return path.join('..', adjusted);
-};
-const getProxySidecarConfig = async (serviceKey, containerKeys, port, appId, envId, serviceIndex, healthEndpointPath) => {
+const getProxySidecarConfig = async (serviceKey, containerKeys, port, appId, envId) => {
     let fopBaseUrl = 'https://forge-outbound-proxy.services.atlassian.com';
     let jwksUrl = 'https://forge.cdn.prod.atlassian-dev.net/.well-known/jwks.json';
     let proxySidecarImage = 'forge-ecr.services.atlassian.com/forge-platform/proxy-sidecar:latest';
     if (process.env.FORGE_GRAPHQL_GATEWAY?.startsWith('https://api-private.stg.atlassian.com/graphql')) {
@@ -154,16 +123,12 @@
                 `APP_ID=ari:cloud:ecosystem::app/${appIdShort}`,
                 `ENV_ID=ari:cloud:ecosystem::environment/${appIdShort}/${envId}`,
                 `JWKS_URL=${jwksUrl}`,
                 `IS_LOCAL_DEV=true`,
-                `K8S_AUTH_TOKEN_PATH=${exports.PROXY_SIDECAR_VOLUME_DIR}/${exports.K8S_AUTH_TOKEN_FILENAME}`,
-                `${containerKeys[0]}_CONTAINER_HEALTHCHECK=http://${containerKeys[0]}:8080${healthEndpointPath}`
+                `K8S_AUTH_TOKEN_PATH=${exports.PROXY_SIDECAR_VOLUME_DIR}/${exports.K8S_AUTH_TOKEN_FILENAME}`
             ],
             volumes: [`../${exports.CONTAINER_SERVICE_ASSETS}:${exports.PROXY_SIDECAR_VOLUME_DIR}:ro`],
-            ports: [
-                `${port}:${tunnel_options_1.DEFAULT_PROXY_INGRESS_PORT}`,
-                `${tunnel_options_1.DEFAULT_PROXY_HEALTHCHECK_PORT_HOST_MACHINE + serviceIndex}:${tunnel_options_1.DEFAULT_PROXY_HEALTHCHECK_PORT}`
-            ]
+            ports: [`${port}:${tunnel_options_1.DEFAULT_PROXY_INGRESS_PORT}`]
         }
     };
 };
 const getProxySidecarContainerName = (serviceKey) => {
@@ -188,9 +153,9 @@
         }
     }
 };
 exports.deleteDockerComposeFile = deleteDockerComposeFile;
-const startDockerComposeStack = async (dockerComposeFilePath, serviceKey, logger) => {
+const startDockerComposeStack = async (dockerComposeFilePath, serviceKey) => {
     try {
         await (0, docker_compose_1.pullOne)('proxy-sidecar', {
             cwd: path.dirname(dockerComposeFilePath),
             log: true,
@@ -199,156 +164,23 @@
     }
     catch (err) {
         throw new DockerUnableToPullProxySidecarImage(err);
     }
-    await waitForContainersToStart(dockerComposeFilePath, serviceKey, logger);
-};
-exports.startDockerComposeStack = startDockerComposeStack;
-const determineComposeFlags = async (dockerComposeFilePath, serviceKey, logger) => {
-    const flags = ['--build', '--quiet-pull'];
     try {
-        const composeConfig = getComposeConfig(dockerComposeFilePath);
-        const hasWatchConfig = Object.values(composeConfig?.services ?? {}).some((service) => service?.develop?.watch);
-        if (hasWatchConfig) {
-            logger.info(`Hot reload config detected. Starting up ${serviceKey} containers using the --watch flag.`);
-            flags.push('--watch');
-        }
-    }
-    catch (_) { }
-    return flags;
-};
-exports.determineComposeFlags = determineComposeFlags;
-const getComposeConfig = (dockerComposeFilePath) => {
-    try {
-        const composeContent = fs.readFileSync(dockerComposeFilePath, 'utf8');
-        const composeConfig = yaml.parse(composeContent);
-        return composeConfig;
-    }
-    catch (_) { }
-    return undefined;
-};
-const extractProxySidecarHealthcheckUrl = (composeConfig) => {
-    if (!composeConfig?.services) {
-        return undefined;
-    }
-    let healthCheckHostPort = undefined;
-    try {
-        const proxySidecarService = composeConfig.services[PROXY_SIDECAR_SERVICE_NAME];
-        if (proxySidecarService && proxySidecarService.ports && proxySidecarService.ports.length > 0) {
-            const portMapping = proxySidecarService.ports.find((portMapping) => {
-                const parts = portMapping.split(':');
-                return parts[1] === tunnel_options_1.DEFAULT_PROXY_HEALTHCHECK_PORT.toString();
-            });
-            if (portMapping) {
-                healthCheckHostPort = portMapping.split(':')[0];
-            }
-        }
-    }
-    catch (_) { }
-    if (healthCheckHostPort) {
-        return `http://localhost:${healthCheckHostPort}/health`;
-    }
-    return undefined;
-};
-const checkContainerHealth = async (url) => {
-    return new Promise((resolve) => {
-        const request = http.get(url, { timeout: 3000 }, (res) => {
-            resolve((res.statusCode ?? 0) >= 200 && (res.statusCode ?? 0) < 300);
-        });
-        request.on('error', () => {
-            resolve(false);
-        });
-        request.on('timeout', () => {
-            request.destroy();
-            resolve(false);
-        });
-    });
-};
-const pollContainerHealth = async (proxySidecarHealthEndpointUrl, logger) => {
-    const maxAttempts = exports.STARTUP_TIMER_MS / 1000 - exports.STARTUP_TIMER_BUFFER_MS / 1000;
-    const pollInterval = 1000;
-    for (let attempt = 1; attempt <= maxAttempts; attempt++) {
-        const isHealthy = await checkContainerHealth(proxySidecarHealthEndpointUrl);
-        if (isHealthy) {
-            logger.info('All health endpoints responded successfully!');
-            return true;
-        }
-        if (attempt === maxAttempts) {
-            logger.warn(`Containers did not become healthy within ${exports.STARTUP_TIMER_MS / 1000}s`);
-            return false;
-        }
-        await new Promise((resolve) => setTimeout(resolve, pollInterval));
-    }
-    return false;
-};
-const waitForContainersToStart = async (dockerComposeFilePath, serviceKey, logger) => {
-    const composeFlags = await (0, exports.determineComposeFlags)(dockerComposeFilePath, serviceKey, logger);
-    let proxySidecarHealthEndpointUrl;
-    try {
-        const composeConfig = getComposeConfig(dockerComposeFilePath);
-        proxySidecarHealthEndpointUrl = extractProxySidecarHealthcheckUrl(composeConfig);
-    }
-    catch (err) {
-        throw new UnableToParseDockerComposeFileError(serviceKey, err);
-    }
-    return new Promise((resolve, reject) => {
-        let containersStarted = false;
-        const startupTimer = setTimeout(() => {
-            if (!containersStarted) {
-                containersStarted = true;
-                logger.info(`Startup timeout reached (${exports.STARTUP_TIMER_MS / 1000}s). Starting up the forge tunnel...`);
-                resolve();
-            }
-        }, exports.STARTUP_TIMER_MS);
-        const logFilter = (chunk) => {
-            const output = chunk.toString();
-            const lines = output.split('\n');
-            lines.forEach((line) => {
-                if (!line.trim())
-                    return;
-                if (LIFECYCLE_PATTERNS.some((pattern) => pattern.test(line))) {
-                    logger.info(line);
-                }
-            });
-        };
-        (0, docker_compose_1.execCompose)('up', composeFlags, {
+        await (0, docker_compose_1.upAll)({
             cwd: path.dirname(dockerComposeFilePath),
-            log: false,
+            log: true,
             config: dockerComposeFilePath,
             composeOptions: [`-p${serviceKey}`],
-            callback: logFilter
-        }).catch((error) => {
-            clearTimeout(startupTimer);
-            const errorMessage = error?.err || error?.out || error?.message || 'Unknown Error Occurred.';
-            reject(new DockerUnableToStartError(new Error(errorMessage)));
+            commandOptions: ['--build']
         });
-        setTimeout(async () => {
-            if (containersStarted)
-                return;
-            try {
-                if (proxySidecarHealthEndpointUrl) {
-                    logger.info(`Polling health endpoints for service: ${serviceKey}`);
-                    const allHealthy = await pollContainerHealth(proxySidecarHealthEndpointUrl, logger);
-                    if (allHealthy && !containersStarted) {
-                        containersStarted = true;
-                        clearTimeout(startupTimer);
-                        resolve();
-                    }
-                }
-                else {
-                    logger.info('No health check endpoints found. Continuing with tunnel startup...');
-                    containersStarted = true;
-                    clearTimeout(startupTimer);
-                    resolve();
-                }
-            }
-            catch (err) {
-                logger.warn(`Health check polling failed: ${err.message}. Relying on startup timeout...`);
-            }
-        }, exports.STARTUP_TIMER_BUFFER_MS);
-    });
+    }
+    catch (err) {
+        throw new DockerUnableToStartError(err);
+    }
 };
-const stopDockerComposeStack = async (configFile, logger, composeFiles) => {
+exports.startDockerComposeStack = startDockerComposeStack;
+const stopDockerComposeStack = async (configFile, composeFiles) => {
     if (!composeFiles || Object.keys(composeFiles).length === 0)
         return;
     const { services } = await configFile.readConfig();
     const serviceWithTunnelConfigExists = services?.some((service) => service.containers?.some((container) => {
@@ -357,15 +189,9 @@
     if (!services || services.length === 0 || !serviceWithTunnelConfigExists)
         return;
     await Promise.all(Object.entries(composeFiles).map(async ([serviceKey, file]) => {
         try {
-            await (0, docker_compose_1.downAll)({
-                cwd: '.',
-                log: false,
-                config: file,
-                composeOptions: [`-p${serviceKey}`],
-                callback: createCustomLogFilter(logger)
-            });
+            await (0, docker_compose_1.downAll)({ cwd: '.', log: true, config: file, composeOptions: [`-p${serviceKey}`] });
             await (0, exports.deleteDockerComposeFile)(file);
         }
         catch (err) {
             throw new Error(text_1.Text.tunnel.unableToStopDockerComposeStack(serviceKey, err.message ?? 'Unknown Error Occurred.'));
@@ -373,23 +199,8 @@
     }));
     deleteContainerServiceAssetsDir();
 };
 exports.stopDockerComposeStack = stopDockerComposeStack;
-const createCustomLogFilter = (logger) => {
-    let buffer = '';
-    return (chunk) => {
-        buffer += chunk.toString();
-        const lines = buffer.split('\n');
-        buffer = lines.pop() || '';
-        lines.forEach((line) => {
-            if (!line.trim())
-                return;
-            if (LIFECYCLE_PATTERNS.some((pattern) => pattern.test(line))) {
-                logger.info(line);
-            }
-        });
-    };
-};
 const processDockerAuthentication = async (childProcess) => {
     await new Promise((resolve, reject) => {
         childProcess.on('close', (code) => {
             if (code === 0) {
File too large for inline diff
Index: package/out/ui/text.js
===================================================================
--- package/out/ui/text.js
+++ package/out/ui/text.js
@@ -1054,10 +1054,9 @@
         debugArgumentNameMismatch: (arg) => `Arguments of ${chalk_1.default.bold('--debugFunctionHandlers')}, namely '${arg}', must be function handlers defined in the manifest.`,
         invalidDebugStartingPortNumber: (port) => `${chalk_1.default.bold('--debugStartingPort')} ${port} must be a valid port number.`,
         unableToAuthenticateDocker: (errCode) => `Docker authentication process exited with code: ${errCode}.`,
         unableToPullProxySidecarImage: (errMessage) => `Unable to pull the proxy sidecar image. Make sure to run 'forge containers docker-login' first. Full error: ${errMessage}`,
-        unableToStartDockerComposeStack: (errMessage) => `Cannot start Docker Compose stack. This usually happens when Docker isn't running or the provided manifest config is incorrect (e.g. configured Docker image doesn't exist). To fix this: Start a Docker engine, ensure the manifest config is correct, then retry the command. Full error: ${errMessage}`,
-        UnableToParseDockerComposeFileError: (serviceKey, errMessage) => `Unable to parse the Docker Compose file for service: ${serviceKey}. Please ensure that the manifest tunnel config is correct. Full error: ${errMessage}`,
+        unableToStartDockerComposeStack: (errMessage) => `Cannot start Docker Compose stack. This usually happens when Docker isn't running, or a Docker image doesn't exist. To fix this: Start a Docker engine, make sure all configured images exist, then retry the command. Full error: ${errMessage}`,
         unableToStopDockerComposeStack: (serviceKey, errMessage) => `Failed to stop Docker Compose stack for ${serviceKey}. Full error: ${errMessage}`,
         missingImageOrBuildContext: (containerKey) => `Container "${containerKey}" must either use an "image" config or "build" config in the tunnel configuration. Specify either an existing Docker image, or a build context from which the image will be built when the tunnel starts.`,
         cannotUseBothImageAndBuildContext: (containerKey) => `Container "${containerKey}" cannot use both an "image" config and "build" config in the tunnel configuration. Specify either an existing Docker image, or a build context from which the image will be built when the tunnel starts.`,
         invoke: (requestId, handler) => `invocation: ${requestId} ${handler}`,
Index: package/out/tunnel/tunnel-options.js
===================================================================
--- package/out/tunnel/tunnel-options.js
+++ package/out/tunnel/tunnel-options.js
@@ -1,7 +1,7 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.getServicePort = exports.DEFAULT_PROXY_HEALTHCHECK_PORT_HOST_MACHINE = exports.DEFAULT_PROXY_HEALTHCHECK_PORT = exports.DEFAULT_PROXY_INGRESS_PORT = exports.defaultNoDebugTunnelOptions = exports.TUNNEL_BUNDLE_DIRECTORY = exports.defaultDebugStartingPort = void 0;
+exports.getServicePort = exports.DEFAULT_PROXY_INGRESS_PORT = exports.defaultNoDebugTunnelOptions = exports.TUNNEL_BUNDLE_DIRECTORY = exports.defaultDebugStartingPort = void 0;
 const tslib_1 = require("tslib");
 const path_1 = tslib_1.__importDefault(require("path"));
 const shared_1 = require("../shared");
 exports.defaultDebugStartingPort = 9229;
@@ -10,10 +10,8 @@
     debug: false,
     debugStartingPort: exports.defaultDebugStartingPort
 };
 exports.DEFAULT_PROXY_INGRESS_PORT = 7071;
-exports.DEFAULT_PROXY_HEALTHCHECK_PORT = 7073;
-exports.DEFAULT_PROXY_HEALTHCHECK_PORT_HOST_MACHINE = 7011;
 async function getServicePort(services, serviceKey) {
     if (!serviceKey || !services || services.length === 0)
         return undefined;
     const defaultPort = services[0].tunnel?.port ?? exports.DEFAULT_PROXY_INGRESS_PORT;
Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@forge/cli-shared",
-  "version": "8.15.2-next.0-experimental-1dcd593",
+  "version": "8.15.2-next.1",
   "description": "Common functionality for Forge CLI",
   "author": "Atlassian",
   "license": "SEE LICENSE IN LICENSE.txt",
   "main": "out/index.js",
@@ -11,9 +11,9 @@
     "compile": "tsc -b -v",
     "generate-graphql-types": "graphql-codegen --config src/graphql/codegen.yml"
   },
   "dependencies": {
-    "@forge/manifest": "12.1.1-next.0-experimental-1dcd593",
+    "@forge/manifest": "12.1.1-next.1",
     "@forge/util": "2.0.1",
     "@forge/i18n": "0.0.7",
     "@sentry/node": "7.106.0",
     "adm-zip": "^0.5.10",
Index: package/out/tunnel/docker-compose-lifecycle.d.ts.map
===================================================================
--- package/out/tunnel/docker-compose-lifecycle.d.ts.map
+++ package/out/tunnel/docker-compose-lifecycle.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"docker-compose-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/docker-compose-lifecycle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAO3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAYvD,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAC1C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAEhD,qBAAa,2BAA4B,SAAQ,SAAS;gBAC5C,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,wBAAyB,SAAQ,SAAS;gBACzC,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK;CAG5C;AAED,qBAAa,+BAAgC,SAAQ,SAAS;gBAChD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,sCAAuC,SAAQ,SAAS;gBACvD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,OAAO,EAAE,MAAM;CAG5B;AAMD,eAAO,MAAM,mCAAmC,8BAAqC,MAAM,SAAS,MAAM,oCAgFzG,CAAC;AAuFF,eAAO,MAAM,uBAAuB,gBAAuB,MAAM,kBAYhE,CAAC;AAOF,eAAO,MAAM,uBAAuB,0BAAiC,MAAM,cAAc,MAAM,UAAU,MAAM,kBAc9G,CAAC;AAOF,eAAO,MAAM,qBAAqB,0BACT,MAAM,cACjB,MAAM,UACV,MAAM,KACb,QAAQ,MAAM,EAAE,CAgBlB,CAAC;AA2LF,eAAO,MAAM,sBAAsB,eACrB,UAAU,UACd,MAAM,iBACC,OAAO,MAAM,EAAE,MAAM,CAAC,kBAmCtC,CAAC;AAgCF,eAAO,MAAM,2BAA2B,iBAAwB,YAAY,kBAW3E,CAAC"}
\ No newline at end of file
+{"version":3,"file":"docker-compose-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/docker-compose-lifecycle.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAGvD,qBAAa,2BAA4B,SAAQ,SAAS;gBAC5C,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,wBAAyB,SAAQ,SAAS;gBACzC,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,+BAAgC,SAAQ,SAAS;gBAChD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,sCAAuC,SAAQ,SAAS;gBACvD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,OAAO,EAAE,MAAM;CAG5B;AAMD,eAAO,MAAM,mCAAmC,8BAAqC,MAAM,SAAS,MAAM,oCA+DzG,CAAC;AA+DF,eAAO,MAAM,uBAAuB,gBAAuB,MAAM,kBAYhE,CAAC;AAOF,eAAO,MAAM,uBAAuB,0BAAiC,MAAM,cAAc,MAAM,kBAwB9F,CAAC;AAMF,eAAO,MAAM,sBAAsB,eAAsB,UAAU,iBAAiB,OAAO,MAAM,EAAE,MAAM,CAAC,kBA4BzG,CAAC;AAMF,eAAO,MAAM,2BAA2B,iBAAwB,YAAY,kBAW3E,CAAC"}
\ No newline at end of file
File too large for inline diff
Index: package/out/ui/text.d.ts.map
===================================================================
--- package/out/ui/text.d.ts.map
+++ package/out/ui/text.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/ui/text.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/ui/text.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
Index: package/out/tunnel/tunnel-options.d.ts.map
===================================================================
--- package/out/tunnel/tunnel-options.d.ts.map
+++ package/out/tunnel/tunnel-options.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"tunnel-options.d.ts","sourceRoot":"","sources":["../../src/tunnel/tunnel-options.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,oBAAY,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oBAAY,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,GAAG;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAA8C,CAAC;AACnF,eAAO,MAAM,2BAA2B,EAAE,aAGzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,8BAA8B,OAAO,CAAC;AACnD,eAAO,MAAM,2CAA2C,OAAO,CAAC;AAQhE,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ1G"}
\ No newline at end of file
+{"version":3,"file":"tunnel-options.d.ts","sourceRoot":"","sources":["../../src/tunnel/tunnel-options.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,oBAAY,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oBAAY,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,GAAG;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAA8C,CAAC;AACnF,eAAO,MAAM,2BAA2B,EAAE,aAGzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAO/C,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ1G"}
\ No newline at end of file
File too large for inline diff
Index: package/out/tunnel/docker-compose-lifecycle.d.ts
===================================================================
--- package/out/tunnel/docker-compose-lifecycle.d.ts
+++ package/out/tunnel/docker-compose-lifecycle.d.ts
@@ -1,14 +1,11 @@
 import { UserError } from '../shared';
 import { ConfigFile } from '../config/config-file';
-import { Logger } from '../ui/logger';
 import { Services } from '@forge/manifest';
 import { ChildProcess } from 'child_process';
 export declare const PROXY_SIDECAR_VOLUME_DIR = "/forge/container";
 export declare const CONTAINER_SERVICE_ASSETS = ".container-service-assets";
 export declare const K8S_AUTH_TOKEN_FILENAME = "local-account";
-export declare const STARTUP_TIMER_MS: number;
-export declare const STARTUP_TIMER_BUFFER_MS: number;
 export declare class InvalidContainerServicePort extends UserError {
     constructor(serviceKey: string);
 }
 export declare class DockerUnableToPullProxySidecarImage extends UserError {
@@ -16,11 +13,8 @@
 }
 export declare class DockerUnableToStartError extends UserError {
     constructor(err?: Error);
 }
-export declare class UnableToParseDockerComposeFileError extends UserError {
-    constructor(serviceKey: string, err?: Error);
-}
 export declare class MissingImageOrBuildContextError extends UserError {
     constructor(containerKey: string);
 }
 export declare class CannotUseBothImageAndBuildContextError extends UserError {
@@ -30,9 +24,8 @@
     constructor(errCode: string);
 }
 export declare const generateContainersDockerComposeFile: (services: Services, appId: string, envId: string) => Promise<Record<string, string>>;
 export declare const deleteDockerComposeFile: (composeFile: string) => Promise<void>;
-export declare const startDockerComposeStack: (dockerComposeFilePath: string, serviceKey: string, logger: Logger) => Promise<void>;
-export declare const determineComposeFlags: (dockerComposeFilePath: string, serviceKey: string, logger: Logger) => Promise<string[]>;
-export declare const stopDockerComposeStack: (configFile: ConfigFile, logger: Logger, composeFiles?: Record<string, string>) => Promise<void>;
+export declare const startDockerComposeStack: (dockerComposeFilePath: string, serviceKey: string) => Promise<void>;
+export declare const stopDockerComposeStack: (configFile: ConfigFile, composeFiles?: Record<string, string>) => Promise<void>;
 export declare const processDockerAuthentication: (childProcess: ChildProcess) => Promise<void>;
 //# sourceMappingURL=docker-compose-lifecycle.d.ts.map
\ No newline at end of file
File too large for inline diff
Index: package/out/ui/text.d.ts
===================================================================
--- package/out/ui/text.d.ts
+++ package/out/ui/text.d.ts
@@ -840,9 +840,8 @@
         invalidDebugStartingPortNumber: (port: string) => string;
         unableToAuthenticateDocker: (errCode: string) => string;
         unableToPullProxySidecarImage: (errMessage: string) => string;
         unableToStartDockerComposeStack: (errMessage: string) => string;
-        UnableToParseDockerComposeFileError: (serviceKey: string, errMessage: string) => string;
         unableToStopDockerComposeStack: (serviceKey: string, errMessage: string) => string;
         missingImageOrBuildContext: (containerKey: string) => string;
         cannotUseBothImageAndBuildContext: (containerKey: string) => string;
         invoke: (requestId: string, handler: string) => string;
Index: package/out/tunnel/tunnel-options.d.ts
===================================================================
--- package/out/tunnel/tunnel-options.d.ts
+++ package/out/tunnel/tunnel-options.d.ts
@@ -16,8 +16,6 @@
 export declare const defaultDebugStartingPort = 9229;
 export declare const TUNNEL_BUNDLE_DIRECTORY: string;
 export declare const defaultNoDebugTunnelOptions: TunnelOptions;
 export declare const DEFAULT_PROXY_INGRESS_PORT = 7071;
-export declare const DEFAULT_PROXY_HEALTHCHECK_PORT = 7073;
-export declare const DEFAULT_PROXY_HEALTHCHECK_PORT_HOST_MACHINE = 7011;
 export declare function getServicePort(services?: Services, serviceKey?: string): Promise<number | undefined>;
 //# sourceMappingURL=tunnel-options.d.ts.map
\ No newline at end of file