| "use strict"; |
| var __importDefault = (this && this.__importDefault) || function (mod) { |
| return (mod && mod.__esModule) ? mod : { "default": mod }; |
| }; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| exports.getDockerSocketCandidates = getDockerSocketCandidates; |
| exports.createDockerClient = createDockerClient; |
| exports.resolveDockerClient = resolveDockerClient; |
| exports.probeDockerAvailability = probeDockerAvailability; |
| const dockerode_1 = __importDefault(require("dockerode")); |
| const DEFAULT_DOCKER_PROBE_TIMEOUT_MS = 4000; |
| const WINDOWS_DOCKER_SOCKET_CANDIDATES = [ |
| "//./pipe/docker_engine", |
| "//./pipe/dockerDesktopLinuxEngine", |
| ]; |
| const POSIX_DOCKER_SOCKET_CANDIDATES = [ |
| "/var/run/docker.sock", |
| ]; |
| function getConfiguredSocketPath() { |
| var _a; |
| const configuredSocketPath = (_a = process.env.DOCKER_SOCKET_PATH) === null || _a === void 0 ? void 0 : _a.trim(); |
| return configuredSocketPath ? configuredSocketPath : null; |
| } |
| function getDockerSocketCandidates() { |
| const configuredSocketPath = getConfiguredSocketPath(); |
| const platformCandidates = process.platform === "win32" |
| ? [...WINDOWS_DOCKER_SOCKET_CANDIDATES] |
| : [...POSIX_DOCKER_SOCKET_CANDIDATES]; |
| return configuredSocketPath |
| ? [configuredSocketPath, ...platformCandidates.filter((candidate) => candidate !== configuredSocketPath)] |
| : platformCandidates; |
| } |
| function createDockerClient(socketPath) { |
| const resolvedSocketPath = socketPath !== null && socketPath !== void 0 ? socketPath : getDockerSocketCandidates()[0]; |
| return new dockerode_1.default({ socketPath: resolvedSocketPath }); |
| } |
| async function pingDockerClient(docker, timeoutMs) { |
| let timeoutId = null; |
| try { |
| await Promise.race([ |
| docker.ping().then(() => undefined), |
| new Promise((_, reject) => { |
| timeoutId = setTimeout(() => reject(new Error(`Docker ping timed out after ${timeoutMs}ms`)), timeoutMs); |
| }), |
| ]); |
| } |
| finally { |
| if (timeoutId) { |
| clearTimeout(timeoutId); |
| } |
| } |
| } |
| async function resolveDockerClient(timeoutMs = DEFAULT_DOCKER_PROBE_TIMEOUT_MS) { |
| for (const socketPath of getDockerSocketCandidates()) { |
| const docker = createDockerClient(socketPath); |
| try { |
| await pingDockerClient(docker, timeoutMs); |
| return { docker, socketPath }; |
| } |
| catch (_a) { |
| continue; |
| } |
| } |
| return null; |
| } |
| async function probeDockerAvailability(timeoutMs = DEFAULT_DOCKER_PROBE_TIMEOUT_MS) { |
| const resolution = await resolveDockerClient(timeoutMs); |
| if (!resolution) { |
| return { |
| available: false, |
| reason: "Docker daemon unreachable", |
| }; |
| } |
| return { |
| available: true, |
| docker: resolution.docker, |
| socketPath: resolution.socketPath, |
| }; |
| } |
|
|