Utility for downloading artifacts from different versions of Electron
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Complete configuration system for customizing download behavior, caching, mirrors, and proxy settings. All download functions accept these options for fine-grained control.
Main configuration interface for all download operations.
interface ElectronDownloadRequestOptions {
/** When set to `true`, disables checking that the artifact download completed successfully with the correct payload. */
unsafelyDisableChecksums?: boolean;
/** Provides checksums for the artifact as strings. Can be used if you already know the checksums. */
checksums?: Record<string, string>;
/** The directory that caches Electron artifact downloads. */
cacheRoot?: string;
/** Options passed to the downloader module. */
downloadOptions?: DownloadOptions;
/** Options related to specifying an artifact mirror. */
mirrorOptions?: MirrorOptions;
/** A custom Downloader class used to download artifacts. Defaults to the built-in GotDownloader. */
downloader?: Downloader<DownloadOptions>;
/** A temporary directory for downloads. */
tempDirectory?: string;
/** Controls the cache read and write behavior. */
cacheMode?: ElectronDownloadCacheMode;
}Usage Examples:
import { download, ElectronDownloadCacheMode } from "@electron/get";
// Custom cache directory
await download('31.0.0', {
cacheRoot: '/custom/cache/path'
});
// Disable checksum validation (not recommended)
await download('31.0.0', {
unsafelyDisableChecksums: true
});
// Provide known checksums to skip checksum file download
await download('31.0.0', {
checksums: {
'electron-v31.0.0-linux-x64.zip': '877617029f4c0f2b24f3805a1c3554ba166fda65c4e88df9480ae7b6ffa26a22'
}
});
// Force cache bypass
await download('31.0.0', {
cacheMode: ElectronDownloadCacheMode.Bypass
});Options for specifying alternative download mirrors and custom URLs.
interface MirrorOptions {
/** The mirror URL for electron-nightly, which lives in a separate npm package. */
nightlyMirror?: string;
/** The base URL of the mirror to download from. */
mirror?: string;
/** The name of the directory to download from, often scoped by version number. */
customDir?: string;
/** The name of the asset to download. */
customFilename?: string;
/** The version of the asset to download. */
customVersion?: string;
/** A function allowing customization of the url returned from getArtifactRemoteURL(). */
resolveAssetURL?: (opts: DownloadOptions) => Promise<string>;
}Mirror URL Anatomy:
https://github.com/electron/electron/releases/download/v4.0.4/electron-v4.0.4-linux-x64.zip
| | | |
------------------------------------------------------- -----------------------------
| |
mirror / nightlyMirror | | customFilename
------
||
customDirUsage Examples:
// Custom mirror
await download('31.0.0', {
mirrorOptions: {
mirror: 'https://mirror.example.com/electron/',
customDir: 'custom',
customFilename: 'unofficial-electron-linux.zip'
}
});
// Downloads from: https://mirror.example.com/electron/custom/unofficial-electron-linux.zip
// Nightly mirror
await download('8.0.0-nightly.20190901', {
mirrorOptions: {
nightlyMirror: 'https://nightly.example.com/',
customDir: 'nightlies',
customFilename: 'nightly-linux.zip'
}
});
// Downloads from: https://nightly.example.com/nightlies/nightly-linux.zip
// Version placeholder in directory
await download('31.0.0', {
mirrorOptions: {
mirror: 'https://mirror.example.com/electron/',
customDir: 'version-{{ version }}' // Becomes 'version-31.0.0'
}
});
// Custom URL resolution
await download('31.0.0', {
mirrorOptions: {
resolveAssetURL: async (opts) => {
return `https://custom-cdn.com/electron-builds/${opts.version}/electron.zip`;
}
}
});Controls cache read and write behavior for downloads.
enum ElectronDownloadCacheMode {
/** Reads from the cache if present, writes to the cache after fetch if not present */
ReadWrite,
/** Reads from the cache if present, will not write back to the cache after fetching missing artifact */
ReadOnly,
/** Skips reading from the cache, will write back into the cache, overwriting anything currently in the cache after fetch */
WriteOnly,
/** Bypasses the cache completely, neither reads from nor writes to the cache */
Bypass,
}Cache Mode Behavior:
// Default: ReadWrite - normal caching
await download('31.0.0', {
cacheMode: ElectronDownloadCacheMode.ReadWrite
});
// ReadOnly - read from cache but don't update it
// Caller owns the returned file and must clean it up
await download('31.0.0', {
cacheMode: ElectronDownloadCacheMode.ReadOnly
});
// WriteOnly - ignore cache, but update it after download
await download('31.0.0', {
cacheMode: ElectronDownloadCacheMode.WriteOnly
});
// Bypass - don't use cache at all
// Caller owns the returned file and must clean it up
await download('31.0.0', {
cacheMode: ElectronDownloadCacheMode.Bypass
});Options passed to the underlying downloader (typically got options).
type DownloadOptions = any; // Custom downloaders can implement any set of options
interface GotDownloaderOptions extends GotOptions {
isStream?: true;
/** Progress callback triggered on download progress events */
getProgressCallback?: (progress: GotProgress) => Promise<void>;
/** If true, disables the console progress bar */
quiet?: boolean;
}Usage Examples:
// Custom timeout and retry options (got options)
await download('31.0.0', {
downloadOptions: {
timeout: { response: 30000 },
retry: { limit: 3 },
headers: { 'User-Agent': 'MyApp/1.0' }
}
});
// Progress tracking
await download('31.0.0', {
downloadOptions: {
getProgressCallback: async (progress) => {
console.log(`Download progress: ${Math.round(progress.percent * 100)}%`);
}
}
});
// Disable progress bar
await download('31.0.0', {
downloadOptions: {
quiet: true
}
});Mirror and version options can be set via environment variables:
ELECTRON_CUSTOM_DIR - Custom directoryELECTRON_CUSTOM_FILENAME - Custom filenameELECTRON_CUSTOM_VERSION - Version overrideELECTRON_MIRROR - Mirror URL for stable releasesELECTRON_NIGHTLY_MIRROR - Mirror URL for nightly releasesELECTRON_GET_NO_PROGRESS - Disable progress barELECTRON_GET_USE_PROXY - Auto-initialize proxy supportExample:
export ELECTRON_MIRROR="https://internal-mirror.company.com/electron/"
export ELECTRON_CUSTOM_DIR="releases/{{ version }}"
export ELECTRON_GET_NO_PROGRESS=1Default cache locations by platform:
$XDG_CACHE_HOME or ~/.cache/electron/~/Library/Caches/electron/%LOCALAPPDATA%/electron/Cache or ~/AppData/Local/electron/Cache/Install with Tessl CLI
npx tessl i tessl/npm-electron--get