| { | ||
| "permissions": { | ||
| "allow": [ | ||
| "Bash(gh issue view:*)", | ||
| "WebFetch(domain:github.com)" | ||
| ] | ||
| } | ||
| } |
+242
| var protobuf = require("protobufjs"); | ||
| var path = require("path"); | ||
| // Constants | ||
| var BUILDKIT_TRACE_ID = "moby.buildkit.trace"; | ||
| var BUILDKIT_IMAGE_ID = "moby.image.id"; | ||
| var PROTO_TYPE = "moby.buildkit.v1.StatusResponse"; | ||
| var ENCODING_UTF8 = "utf8"; | ||
| var ENCODING_BASE64 = "base64"; | ||
| var StatusResponse; | ||
| // Load the protobuf schema | ||
| function loadProto() { | ||
| if (StatusResponse) return StatusResponse; | ||
| var root = protobuf.loadSync( | ||
| path.resolve(__dirname, "proto", "buildkit_status.proto") | ||
| ); | ||
| StatusResponse = root.lookupType(PROTO_TYPE); | ||
| return StatusResponse; | ||
| } | ||
| /** | ||
| * Decodes a BuildKit trace message | ||
| * @param {string} base64Data - Base64-encoded protobuf data from aux field | ||
| * @returns {Object} Decoded status response with vertexes, logs, etc. | ||
| */ | ||
| function decodeBuildKitStatus(base64Data) { | ||
| var StatusResponse = loadProto(); | ||
| // Handle empty messages | ||
| if (!base64Data || base64Data.length === 0) { | ||
| return { | ||
| vertexes: [], | ||
| statuses: [], | ||
| logs: [], | ||
| warnings: [] | ||
| }; | ||
| } | ||
| var buffer = Buffer.from(base64Data, ENCODING_BASE64); | ||
| var message = StatusResponse.decode(buffer); | ||
| return StatusResponse.toObject(message, { | ||
| longs: String, | ||
| enums: String, | ||
| bytes: String, | ||
| defaults: true | ||
| }); | ||
| } | ||
| /** | ||
| * Formats BuildKit status into human-readable text | ||
| * @param {Object} status - Decoded status response | ||
| * @returns {string[]} Array of human-readable log lines | ||
| */ | ||
| function formatBuildKitStatus(status) { | ||
| var lines = []; | ||
| // Process vertexes (build steps) | ||
| if (status.vertexes && status.vertexes.length > 0) { | ||
| status.vertexes.forEach(function(vertex) { | ||
| if (vertex.name && vertex.started && !vertex.completed) { | ||
| lines.push("[" + vertex.digest.substring(0, 12) + "] " + vertex.name); | ||
| } | ||
| if (vertex.error) { | ||
| lines.push("ERROR: " + vertex.error); | ||
| } | ||
| if (vertex.completed && vertex.cached) { | ||
| lines.push("CACHED: " + vertex.name); | ||
| } | ||
| }); | ||
| } | ||
| // Process logs (command output) | ||
| if (status.logs && status.logs.length > 0) { | ||
| status.logs.forEach(function(log) { | ||
| var msg = Buffer.from(log.msg).toString(ENCODING_UTF8); | ||
| if (msg.trim()) { | ||
| lines.push(msg.trimEnd()); | ||
| } | ||
| }); | ||
| } | ||
| // Process status updates (progress) | ||
| if (status.statuses && status.statuses.length > 0) { | ||
| status.statuses.forEach(function(s) { | ||
| if (s.name && s.total > 0) { | ||
| var percent = Math.floor((s.current / s.total) * 100); | ||
| lines.push(s.name + ": " + percent + "% (" + s.current + "/" + s.total + ")"); | ||
| } | ||
| }); | ||
| } | ||
| // Process warnings | ||
| if (status.warnings && status.warnings.length > 0) { | ||
| status.warnings.forEach(function(warning) { | ||
| var msg = Buffer.from(warning.short).toString(ENCODING_UTF8); | ||
| lines.push("WARNING: " + msg); | ||
| }); | ||
| } | ||
| return lines; | ||
| } | ||
| /** | ||
| * Parse a BuildKit stream line and extract human-readable logs | ||
| * @param {string} line - JSON line from build stream | ||
| * @returns {Object} { isBuildKit: boolean, logs: string[], raw: Object } | ||
| */ | ||
| function parseBuildKitLine(line) { | ||
| try { | ||
| var json = JSON.parse(line); | ||
| // Check if it's a BuildKit trace message | ||
| if (json.id === BUILDKIT_TRACE_ID && json.aux !== undefined) { | ||
| var status = decodeBuildKitStatus(json.aux); | ||
| var logs = formatBuildKitStatus(status); | ||
| return { | ||
| isBuildKit: true, | ||
| logs: logs, | ||
| raw: status | ||
| }; | ||
| } | ||
| // Check if it's the final image ID | ||
| if (json.id === BUILDKIT_IMAGE_ID && json.aux && json.aux.ID) { | ||
| return { | ||
| isBuildKit: true, | ||
| logs: ["Built image: " + json.aux.ID], | ||
| raw: json.aux | ||
| }; | ||
| } | ||
| // Not a BuildKit message | ||
| return { | ||
| isBuildKit: false, | ||
| logs: [], | ||
| raw: json | ||
| }; | ||
| } catch (e) { | ||
| return { | ||
| isBuildKit: false, | ||
| logs: [], | ||
| raw: null, | ||
| error: e.message | ||
| }; | ||
| } | ||
| } | ||
| /** | ||
| * Follow progress of a stream, automatically handling both BuildKit and regular output. | ||
| * This provides the same ergonomics as modem.followProgress but decodes BuildKit logs. | ||
| * | ||
| * @param {Stream} stream - Stream from buildImage(), pull(), push(), etc. | ||
| * @param {Function} onFinished - Called when stream ends: (err, output) => void | ||
| * @param {Function} onProgress - Called for each log event: (event) => void | ||
| * @returns {void} | ||
| */ | ||
| function followProgress(stream, onFinished, onProgress) { | ||
| var buffer = ''; | ||
| var output = []; | ||
| var finished = false; | ||
| stream.on('data', onStreamEvent); | ||
| stream.on('error', onStreamError); | ||
| stream.on('end', onStreamEnd); | ||
| stream.on('close', onStreamEnd); | ||
| function onStreamEvent(data) { | ||
| buffer += data.toString(); | ||
| // Process complete lines | ||
| var lines = buffer.split('\n'); | ||
| buffer = lines.pop(); // Save incomplete line | ||
| lines.forEach(function(line) { | ||
| if (!line.trim()) return; | ||
| processLine(line); | ||
| }); | ||
| } | ||
| function processLine(line) { | ||
| try { | ||
| // Try to parse as BuildKit or regular Docker output | ||
| var result = parseBuildKitLine(line); | ||
| if (result.isBuildKit) { | ||
| // BuildKit message - create events from decoded logs | ||
| result.logs.forEach(function(log) { | ||
| var event = { stream: log + '\n' }; | ||
| output.push(event); | ||
| if (onProgress) onProgress(event); | ||
| }); | ||
| } else if (result.raw) { | ||
| // Regular Docker message | ||
| output.push(result.raw); | ||
| if (onProgress) onProgress(result.raw); | ||
| } | ||
| } catch (e) { | ||
| // If parsing fails, try plain JSON | ||
| try { | ||
| var json = JSON.parse(line); | ||
| output.push(json); | ||
| if (onProgress) onProgress(json); | ||
| } catch (e2) { | ||
| // Ignore parse errors | ||
| } | ||
| } | ||
| } | ||
| function onStreamError(err) { | ||
| finished = true; | ||
| stream.removeListener('data', onStreamEvent); | ||
| stream.removeListener('error', onStreamError); | ||
| stream.removeListener('end', onStreamEnd); | ||
| stream.removeListener('close', onStreamEnd); | ||
| if (onFinished) onFinished(err, output); | ||
| } | ||
| function onStreamEnd() { | ||
| if (finished) return; | ||
| finished = true; | ||
| // Process any remaining data in buffer | ||
| if (buffer.trim()) { | ||
| processLine(buffer); | ||
| } | ||
| stream.removeListener('data', onStreamEvent); | ||
| stream.removeListener('error', onStreamError); | ||
| stream.removeListener('end', onStreamEnd); | ||
| stream.removeListener('close', onStreamEnd); | ||
| if (onFinished) onFinished(null, output); | ||
| } | ||
| } | ||
| module.exports = { | ||
| followProgress: followProgress | ||
| }; |
| syntax = "proto3"; | ||
| package moby.buildkit.v1; | ||
| // Minimal definitions for decoding BuildKit status messages | ||
| // Based on https://github.com/moby/buildkit/blob/master/api/services/control/control.proto | ||
| // Related to https://github.com/moby/buildkit/blob/master/solver/pb/ops.proto (vertices map to the solver op DAG) | ||
| message StatusResponse { | ||
| repeated Vertex vertexes = 1; | ||
| repeated VertexStatus statuses = 2; | ||
| repeated VertexLog logs = 3; | ||
| repeated VertexWarning warnings = 4; | ||
| } | ||
| message Vertex { | ||
| string digest = 1; | ||
| repeated string inputs = 2; | ||
| string name = 3; | ||
| bool cached = 4; | ||
| Timestamp started = 5; | ||
| Timestamp completed = 6; | ||
| string error = 7; | ||
| ProgressGroup progressGroup = 8; | ||
| } | ||
| message VertexStatus { | ||
| string ID = 1; | ||
| string vertex = 2; | ||
| string name = 3; | ||
| int64 current = 4; | ||
| int64 total = 5; | ||
| Timestamp timestamp = 6; | ||
| Timestamp started = 7; | ||
| Timestamp completed = 8; | ||
| } | ||
| message VertexLog { | ||
| string vertex = 1; | ||
| Timestamp timestamp = 2; | ||
| int64 stream = 3; | ||
| bytes msg = 4; | ||
| } | ||
| message VertexWarning { | ||
| string vertex = 1; | ||
| int64 level = 2; | ||
| bytes short = 3; | ||
| repeated bytes detail = 4; | ||
| string url = 5; | ||
| SourceInfo info = 6; | ||
| repeated Range ranges = 7; | ||
| } | ||
| message ProgressGroup { | ||
| string id = 1; | ||
| string name = 2; | ||
| bool weak = 3; | ||
| } | ||
| // Simplified Timestamp to match google.protobuf.Timestamp wire format | ||
| message Timestamp { | ||
| int64 seconds = 1; | ||
| int32 nanos = 2; | ||
| } | ||
| message SourceInfo { | ||
| string filename = 1; | ||
| bytes data = 2; | ||
| // definition and language fields omitted - not needed for log decoding | ||
| } | ||
| message Range { | ||
| Position start = 1; | ||
| Position end = 2; | ||
| } | ||
| message Position { | ||
| int32 line = 1; | ||
| int32 character = 2; | ||
| } |
+24
-0
@@ -339,2 +339,26 @@ var EventEmitter = require('events').EventEmitter, | ||
| /** | ||
| * Follow progress of a stream operation (build, pull, push, etc.) with automatic | ||
| * BuildKit decoding. | ||
| * | ||
| * This method works identically to docker.modem.followProgress() but additionally | ||
| * decodes BuildKit v2 build output. BuildKit emits base64-encoded protobuf messages | ||
| * which this method transparently decodes into human-readable log events. | ||
| * | ||
| * Use this instead of docker.modem.followProgress() when: | ||
| * - You're using BuildKit builds (version: "2") | ||
| * - You want a single API that handles both regular and BuildKit output | ||
| * | ||
| * For non-BuildKit streams (pull, push, regular builds), behavior is identical | ||
| * to docker.modem.followProgress(). | ||
| * | ||
| * @param {Stream} stream - Stream from buildImage(), pull(), push(), etc. | ||
| * @param {Function} onFinished - Called when stream ends: (err, output) => void | ||
| * @param {Function} onProgress - Optional callback for each event: (event) => void | ||
| */ | ||
| Docker.prototype.followProgress = function(stream, onFinished, onProgress) { | ||
| var buildkit = require('./buildkit'); | ||
| return buildkit.followProgress(stream, onFinished, onProgress); | ||
| }; | ||
| /** | ||
| * Fetches a Container by ID | ||
@@ -341,0 +365,0 @@ * @param {String} id Container's ID |
+2
-2
| { | ||
| "name": "dockerode", | ||
| "description": "Docker Remote API module.", | ||
| "version": "4.0.9", | ||
| "version": "4.0.10", | ||
| "author": "Pedro Dias <petermdias@gmail.com>", | ||
@@ -21,3 +21,3 @@ "maintainers": [ | ||
| "@grpc/proto-loader": "^0.7.13", | ||
| "docker-modem": "^5.0.6", | ||
| "docker-modem": "^5.0.7", | ||
| "protobufjs": "^7.3.2", | ||
@@ -24,0 +24,0 @@ "tar-fs": "^2.1.4", |
+98
-98
@@ -235,4 +235,4 @@ # dockerode | ||
| * `stream` - stream(s) which will be used for execution output. | ||
| * `create_options` - (optional) Options used for container creation. Refer to the [DockerEngine ContainerCreate documentation](https://docs.docker.com/engine/api/v1.37/#operation/ContainerCreate) for the possible values | ||
| * `start_options` - (optional) Options used for container start. Refer to the [DockerEngine ContainerStart documentation](https://docs.docker.com/engine/api/v1.37/#operation/ContainerStart) for the possible values | ||
| * `create_options` - (optional) Options used for container creation. Refer to the [DockerEngine ContainerCreate documentation](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerCreate) for the possible values | ||
| * `start_options` - (optional) Options used for container start. Refer to the [DockerEngine ContainerStart documentation](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerStart) for the possible values | ||
| * `callback` - callback called when execution ends (optional, promise will be returned if not used). | ||
@@ -370,8 +370,8 @@ | ||
| - docker.createContainer(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerCreate) | ||
| - docker.createImage([auth], options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImageCreate) | ||
| - docker.loadImage(file, options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImageLoad) | ||
| - docker.importImage(file, options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImageCreate) | ||
| - docker.buildImage(file, options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImageBuild) | ||
| - docker.checkAuth(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SystemAuth) | ||
| - docker.createContainer(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Container/operation/ContainerCreate) | ||
| - docker.createImage([auth], options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Image/operation/ImageCreate) | ||
| - docker.loadImage(file, options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Image/operation/ImageLoad) | ||
| - docker.importImage(file, options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Image/operation/ImageCreate) | ||
| - docker.buildImage(file, options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Image/operation/ImageBuild) | ||
| - docker.checkAuth(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/System/operation/SystemAuth) | ||
| - docker.getContainer(id) - Returns a Container object. | ||
@@ -388,34 +388,34 @@ - docker.getImage(name) - Returns an Image object. | ||
| - docker.getExec(id) - Returns a Exec object. | ||
| - docker.listContainers(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerList) | ||
| - docker.listImages(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImageList) | ||
| - docker.listServices(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ServiceList) | ||
| - docker.listNodes(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/NodeList) | ||
| - docker.listTasks(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/TaskList) | ||
| - docker.listSecrets(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SecretList) | ||
| - docker.listConfigs(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ConfigList) | ||
| - docker.listPlugins(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/PluginList) | ||
| - docker.listVolumes(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/VolumeList) | ||
| - docker.listNetworks(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/NetworkList) | ||
| - docker.createSecret(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SecretCreate) | ||
| - docker.createConfig(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ConfigCreate) | ||
| - docker.createPlugin(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/PluginCreate) | ||
| - docker.createVolume(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/VolumeCreate) | ||
| - docker.createService(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ServiceCreate) | ||
| - docker.createNetwork(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/NetworkCreate) | ||
| - docker.pruneImages(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImagePrune) | ||
| - docker.pruneBuilder() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/BuildPrune) | ||
| - docker.pruneContainers(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerPrune) | ||
| - docker.pruneVolumes(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/VolumePrune) | ||
| - docker.pruneNetworks(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/NetworkPrune) | ||
| - docker.searchImages(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImageSearch) | ||
| - docker.info() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SystemInfo) | ||
| - docker.version() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SystemVersion) | ||
| - docker.ping() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SystemPing) | ||
| - docker.df() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SystemDataUsage) | ||
| - docker.getEvents(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SystemEvents) | ||
| - docker.swarmInit(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SwarmInit) | ||
| - docker.swarmJoin(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SwarmJoin) | ||
| - docker.swarmLeave(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SwarmLeave) | ||
| - docker.swarmUpdate(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SwarmUpdate) | ||
| - docker.swarmInspect() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SwarmInspect) | ||
| - docker.listContainers(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Container/operation/ContainerList) | ||
| - docker.listImages(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Image/operation/ImageList) | ||
| - docker.listServices(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Service/operation/ServiceList) | ||
| - docker.listNodes(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Node/operation/NodeList) | ||
| - docker.listTasks(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Task/operation/TaskList) | ||
| - docker.listSecrets(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Secret/operation/SecretList) | ||
| - docker.listConfigs(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Config/operation/ConfigList) | ||
| - docker.listPlugins(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Plugin/operation/PluginList) | ||
| - docker.listVolumes(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Volume/operation/VolumeList) | ||
| - docker.listNetworks(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Network/operation/NetworkList) | ||
| - docker.createSecret(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Secret/operation/SecretCreate) | ||
| - docker.createConfig(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Config/operation/ConfigCreate) | ||
| - docker.createPlugin(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Plugin/operation/PluginCreate) | ||
| - docker.createVolume(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#tag/Volume/operation/VolumeCreate) | ||
| - docker.createService(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ServiceCreate) | ||
| - docker.createNetwork(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/NetworkCreate) | ||
| - docker.pruneImages(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ImagePrune) | ||
| - docker.pruneBuilder() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/BuildPrune) | ||
| - docker.pruneContainers(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerPrune) | ||
| - docker.pruneVolumes(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/VolumePrune) | ||
| - docker.pruneNetworks(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/NetworkPrune) | ||
| - docker.searchImages(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ImageSearch) | ||
| - docker.info() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SystemInfo) | ||
| - docker.version() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SystemVersion) | ||
| - docker.ping() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SystemPing) | ||
| - docker.df() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SystemDataUsage) | ||
| - docker.getEvents(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SystemEvents) | ||
| - docker.swarmInit(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SwarmInit) | ||
| - docker.swarmJoin(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SwarmJoin) | ||
| - docker.swarmLeave(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SwarmLeave) | ||
| - docker.swarmUpdate(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SwarmUpdate) | ||
| - docker.swarmInspect() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SwarmInspect) | ||
| - docker.pull(repoTag, options, callback, auth) - Like Docker's CLI pull | ||
@@ -428,31 +428,31 @@ - docker.pullAll(repoTag, options, callback, auth) - Like Docker's CLI pull with "-a" | ||
| - container.inspect(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerInspect) | ||
| - container.rename(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerRename) | ||
| - container.update(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerUpdate) | ||
| - container.top(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerTop) | ||
| - container.changes() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerChanges) | ||
| - container.export() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerExport) | ||
| - container.start(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerStart) | ||
| - container.stop(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerStop) | ||
| - container.pause(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerPause) | ||
| - container.unpause(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerUnpause) | ||
| - container.exec(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerExec) | ||
| - container.commit(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImageCommit) | ||
| - container.restart(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerRestart) | ||
| - container.kill(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerKill) | ||
| - container.resize(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerResize) | ||
| - container.attach(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerAttach) | ||
| - container.wait(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerWait) | ||
| - container.remove(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerDelete) | ||
| - container.getArchive(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerArchive) | ||
| - container.infoArchive(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerArchiveInfo) | ||
| - container.putArchive(file, options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/PutContainerArchive) | ||
| - container.logs(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerLogs) | ||
| - container.stats(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ContainerStats) | ||
| - container.inspect(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerInspect) | ||
| - container.rename(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerRename) | ||
| - container.update(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerUpdate) | ||
| - container.top(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerTop) | ||
| - container.changes() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerChanges) | ||
| - container.export() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerExport) | ||
| - container.start(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerStart) | ||
| - container.stop(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerStop) | ||
| - container.pause(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerPause) | ||
| - container.unpause(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerUnpause) | ||
| - container.exec(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerExec) | ||
| - container.commit(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ImageCommit) | ||
| - container.restart(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerRestart) | ||
| - container.kill(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerKill) | ||
| - container.resize(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerResize) | ||
| - container.attach(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerAttach) | ||
| - container.wait(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerWait) | ||
| - container.remove(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerDelete) | ||
| - container.getArchive(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerArchive) | ||
| - container.infoArchive(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerArchiveInfo) | ||
| - container.putArchive(file, options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/PutContainerArchive) | ||
| - container.logs(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerLogs) | ||
| - container.stats(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ContainerStats) | ||
| ### Exec | ||
| - exec.start(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ExecStart) | ||
| - exec.resize(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ExecResize) | ||
| - exec.inspect() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ExecInspect) | ||
| - exec.start(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ExecStart) | ||
| - exec.resize(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ExecResize) | ||
| - exec.inspect() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ExecInspect) | ||
@@ -462,55 +462,55 @@ ### Image | ||
| - image.inspect(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.48/#tag/Image/operation/ImageInspect) | ||
| - image.history() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImageHistory) | ||
| - image.push(options, callback, auth) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImagePush) | ||
| - image.tag(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImageTag) | ||
| - image.remove(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImageDelete) | ||
| - image.get() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ImageGet) | ||
| - image.history() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ImageHistory) | ||
| - image.push(options, callback, auth) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ImagePush) | ||
| - image.tag(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ImageTag) | ||
| - image.remove(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ImageDelete) | ||
| - image.get() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ImageGet) | ||
| ### Network | ||
| - network.inspect() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/NetworkInspect) | ||
| - network.remove(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/NetworkDelete) | ||
| - network.connect(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/NetworkConnect) | ||
| - network.disconnect(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/NetworkDisconnect) | ||
| - network.inspect() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/NetworkInspect) | ||
| - network.remove(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/NetworkDelete) | ||
| - network.connect(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/NetworkConnect) | ||
| - network.disconnect(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/NetworkDisconnect) | ||
| ### Node | ||
| - node.inspect() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/NodeInspect) | ||
| - node.remove(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/NodeDelete) | ||
| - node.update(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/NodeUpdate) | ||
| - node.inspect() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/NodeInspect) | ||
| - node.remove(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/NodeDelete) | ||
| - node.update(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/NodeUpdate) | ||
| ### Plugin | ||
| - plugin.privileges() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/GetPluginPrivileges) | ||
| - plugin.pull(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/PluginPull) | ||
| - plugin.inspect() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/PluginInspect) | ||
| - plugin.remove(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/PluginDelete) | ||
| - plugin.enable(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/PluginEnable) | ||
| - plugin.disable(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/PluginDisable) | ||
| - plugin.update([auth], options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/PluginUpgrade) | ||
| - plugin.push(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/PluginPush) | ||
| - plugin.configure(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/PluginSet) | ||
| - plugin.privileges() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/GetPluginPrivileges) | ||
| - plugin.pull(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/PluginPull) | ||
| - plugin.inspect() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/PluginInspect) | ||
| - plugin.remove(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/PluginDelete) | ||
| - plugin.enable(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/PluginEnable) | ||
| - plugin.disable(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/PluginDisable) | ||
| - plugin.update([auth], options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/PluginUpgrade) | ||
| - plugin.push(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/PluginPush) | ||
| - plugin.configure(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/PluginSet) | ||
| ### Secret | ||
| - secret.inspect() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SecretInspect) | ||
| - secret.remove() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SecretDelete) | ||
| - secret.update(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/SecretUpdate) | ||
| - secret.inspect() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SecretInspect) | ||
| - secret.remove() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SecretDelete) | ||
| - secret.update(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/SecretUpdate) | ||
| ### Service | ||
| - service.inspect() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ServiceInspect) | ||
| - service.remove(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ServiceDelete) | ||
| - service.update(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ServiceUpdate) | ||
| - service.logs(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/ServiceLogs) | ||
| - service.inspect() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ServiceInspect) | ||
| - service.remove(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ServiceDelete) | ||
| - service.update(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ServiceUpdate) | ||
| - service.logs(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/ServiceLogs) | ||
| ### Task | ||
| - task.inspect() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/TaskInspect) | ||
| - task.logs(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/Session) | ||
| - task.inspect() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/TaskInspect) | ||
| - task.logs(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/Session) | ||
| ### Volume | ||
| - volume.inspect() - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/VolumeInspect) | ||
| - volume.remove(options) - [Docker API Endpoint](https://docs.docker.com/engine/api/v1.37/#operation/VolumeDelete) | ||
| - volume.inspect() - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/VolumeInspect) | ||
| - volume.remove(options) - [Docker API Endpoint](https://docs.docker.com/reference/api/engine/version/v1.52/#operation/VolumeDelete) | ||
@@ -517,0 +517,0 @@ |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
165151
7.42%28
12%4667
5.47%Updated