Socket
Socket
Sign inDemoInstall

electron-updater

Package Overview
Dependencies
Maintainers
3
Versions
290
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

electron-updater - npm Package Compare versions

Comparing version 1.6.3 to 1.6.4

36

out/api.js

@@ -1,2 +0,11 @@

export class Provider {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getDefaultChannelName = getDefaultChannelName;
exports.getCustomChannelName = getCustomChannelName;
exports.getCurrentPlatform = getCurrentPlatform;
exports.getChannelFilename = getChannelFilename;
class Provider {
setRequestHeaders(value) {

@@ -6,4 +15,5 @@ this.requestHeaders = value;

}
// due to historical reasons for windows we use channel name without platform specifier
export function getDefaultChannelName() {
exports.Provider = Provider; // due to historical reasons for windows we use channel name without platform specifier
function getDefaultChannelName() {
return `latest${getChannelFilePrefix()}`;

@@ -14,13 +24,13 @@ }

}
export function getCustomChannelName(channel) {
function getCustomChannelName(channel) {
return `${channel}${getChannelFilePrefix()}`;
}
export function getCurrentPlatform() {
function getCurrentPlatform() {
return process.env.TEST_UPDATER_PLATFORM || process.platform;
}
export function getChannelFilename(channel) {
function getChannelFilename(channel) {
return `${channel}.${getCurrentPlatform() === "darwin" ? "json" : "yml"}`;
}
export const DOWNLOAD_PROGRESS = "download-progress";
export class UpdaterSignal {
const DOWNLOAD_PROGRESS = exports.DOWNLOAD_PROGRESS = "download-progress";
class UpdaterSignal {
constructor(emitter) {

@@ -36,11 +46,15 @@ this.emitter = emitter;

}
exports.UpdaterSignal = UpdaterSignal;
const isLogEvent = false;
function addHandler(emitter, event, handler) {
if (isLogEvent) {
emitter.on(event, function (...args) {
emitter.on(event, function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
console.log("%s %s", event, args);
handler.apply(null, args);
});
}
else {
} else {
emitter.on(event, handler);

@@ -47,0 +61,0 @@ }

@@ -1,16 +0,95 @@

import { EventEmitter } from "events";
import * as path from "path";
import { gt as isVersionGreaterThan, valid as parseVersion } from "semver";
import { executorHolder } from "electron-builder-http";
import { UpdaterSignal } from "./api";
import { BintrayProvider } from "./BintrayProvider";
import BluebirdPromise from "bluebird-lst-c";
import { s3Url } from "electron-builder-http/out/publishOptions";
import { readFile } from "fs-extra-p";
import { safeLoad } from "js-yaml";
import { GenericProvider } from "./GenericProvider";
import { GitHubProvider } from "./GitHubProvider";
import { ElectronHttpExecutor } from "./electronHttpExecutor";
import "source-map-support/register";
export class AppUpdater extends EventEmitter {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.AppUpdater = undefined;
var _bluebirdLstC;
function _load_bluebirdLstC() {
return _bluebirdLstC = require("bluebird-lst-c");
}
var _bluebirdLstC2;
function _load_bluebirdLstC2() {
return _bluebirdLstC2 = _interopRequireDefault(require("bluebird-lst-c"));
}
var _events;
function _load_events() {
return _events = require("events");
}
var _path = _interopRequireWildcard(require("path"));
var _semver;
function _load_semver() {
return _semver = require("semver");
}
var _electronBuilderHttp;
function _load_electronBuilderHttp() {
return _electronBuilderHttp = require("electron-builder-http");
}
var _api;
function _load_api() {
return _api = require("./api");
}
var _BintrayProvider;
function _load_BintrayProvider() {
return _BintrayProvider = require("./BintrayProvider");
}
var _publishOptions;
function _load_publishOptions() {
return _publishOptions = require("electron-builder-http/out/publishOptions");
}
var _fsExtraP;
function _load_fsExtraP() {
return _fsExtraP = require("fs-extra-p");
}
var _jsYaml;
function _load_jsYaml() {
return _jsYaml = require("js-yaml");
}
var _GenericProvider;
function _load_GenericProvider() {
return _GenericProvider = require("./GenericProvider");
}
var _GitHubProvider;
function _load_GitHubProvider() {
return _GitHubProvider = require("./GitHubProvider");
}
var _electronHttpExecutor;
function _load_electronHttpExecutor() {
return _electronHttpExecutor = require("./electronHttpExecutor");
}
require("source-map-support/register");
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class AppUpdater extends (_events || _load_events()).EventEmitter {
constructor(options) {

@@ -27,5 +106,5 @@ super();

this.logger = global.__test_app ? null : console;
this.signals = new UpdaterSignal(this);
this.signals = new (_api || _load_api()).UpdaterSignal(this);
this.updateAvailable = false;
this.on("error", (error) => {
this.on("error", error => {
if (this.logger != null) {

@@ -37,8 +116,7 @@ this.logger.error(`Error: ${error.stack || error.message}`);

this.app = global.__test_app;
this.untilAppReady = BluebirdPromise.resolve();
}
else {
this.untilAppReady = (_bluebirdLstC2 || _load_bluebirdLstC2()).default.resolve();
} else {
this.app = require("electron").app;
executorHolder.httpExecutor = new ElectronHttpExecutor();
this.untilAppReady = new BluebirdPromise(resolve => {
(_electronBuilderHttp || _load_electronBuilderHttp()).executorHolder.httpExecutor = new (_electronHttpExecutor || _load_electronHttpExecutor()).ElectronHttpExecutor();
this.untilAppReady = new (_bluebirdLstC2 || _load_bluebirdLstC2()).default(resolve => {
if (this.app.isReady()) {

@@ -49,4 +127,3 @@ if (this.logger != null) {

resolve();
}
else {
} else {
if (this.logger != null) {

@@ -75,8 +152,7 @@ this.logger.info("Wait for app ready");

if (typeof value === "string") {
client = new GenericProvider({ provider: "generic", url: value });
}
else {
client = new (_GenericProvider || _load_GenericProvider()).GenericProvider({ provider: "generic", url: value });
} else {
client = createClient(value);
}
this.clientPromise = BluebirdPromise.resolve(client);
this.clientPromise = (_bluebirdLstC2 || _load_bluebirdLstC2()).default.resolve(client);
}

@@ -91,58 +167,65 @@ checkForUpdates() {

const nullizePromise = () => this.checkForUpdatesPromise = null;
checkForUpdatesPromise
.then(nullizePromise)
.catch(nullizePromise);
checkForUpdatesPromise.then(nullizePromise).catch(nullizePromise);
return checkForUpdatesPromise;
}
async _checkForUpdates() {
await this.untilAppReady;
if (this.logger != null) {
this.logger.info("Checking for update");
}
this.emit("checking-for-update");
try {
return await this.doCheckForUpdates();
}
catch (e) {
this.emit("error", e, `Cannot check for updates: ${(e.stack || e).toString()}`);
throw e;
}
_checkForUpdates() {
var _this = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
yield _this.untilAppReady;
if (_this.logger != null) {
_this.logger.info("Checking for update");
}
_this.emit("checking-for-update");
try {
return yield _this.doCheckForUpdates();
} catch (e) {
_this.emit("error", e, `Cannot check for updates: ${(e.stack || e).toString()}`);
throw e;
}
})();
}
async doCheckForUpdates() {
if (this.clientPromise == null) {
this.clientPromise = this.loadUpdateConfig().then(it => createClient(it));
}
const client = await this.clientPromise;
client.setRequestHeaders(this.requestHeaders);
const versionInfo = await client.getLatestVersion();
const latestVersion = parseVersion(versionInfo.version);
if (latestVersion == null) {
throw new Error(`Latest version (from update server) is not valid semver version: "${latestVersion}`);
}
const currentVersionString = this.app.getVersion();
const currentVersion = parseVersion(currentVersionString);
if (currentVersion == null) {
throw new Error(`App version is not valid semver version: "${currentVersion}`);
}
if (!isVersionGreaterThan(latestVersion, currentVersion)) {
this.updateAvailable = false;
if (this.logger != null) {
this.logger.info(`Update for version ${currentVersionString} is not available (latest version: ${versionInfo.version})`);
doCheckForUpdates() {
var _this2 = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
if (_this2.clientPromise == null) {
_this2.clientPromise = _this2.loadUpdateConfig().then(function (it) {
return createClient(it);
});
}
this.emit("update-not-available", versionInfo);
const client = yield _this2.clientPromise;
client.setRequestHeaders(_this2.requestHeaders);
const versionInfo = yield client.getLatestVersion();
const latestVersion = (0, (_semver || _load_semver()).valid)(versionInfo.version);
if (latestVersion == null) {
throw new Error(`Latest version (from update server) is not valid semver version: "${latestVersion}`);
}
const currentVersionString = _this2.app.getVersion();
const currentVersion = (0, (_semver || _load_semver()).valid)(currentVersionString);
if (currentVersion == null) {
throw new Error(`App version is not valid semver version: "${currentVersion}`);
}
if (!(0, (_semver || _load_semver()).gt)(latestVersion, currentVersion)) {
_this2.updateAvailable = false;
if (_this2.logger != null) {
_this2.logger.info(`Update for version ${currentVersionString} is not available (latest version: ${versionInfo.version})`);
}
_this2.emit("update-not-available", versionInfo);
return {
versionInfo: versionInfo
};
}
const fileInfo = yield client.getUpdateFile(versionInfo);
_this2.updateAvailable = true;
_this2.versionInfo = versionInfo;
_this2.fileInfo = fileInfo;
_this2.onUpdateAvailable(versionInfo, fileInfo);
//noinspection ES6MissingAwait
return {
versionInfo: versionInfo,
fileInfo: fileInfo,
downloadPromise: _this2.autoDownload ? _this2.downloadUpdate() : null
};
}
const fileInfo = await client.getUpdateFile(versionInfo);
this.updateAvailable = true;
this.versionInfo = versionInfo;
this.fileInfo = fileInfo;
this.onUpdateAvailable(versionInfo, fileInfo);
//noinspection ES6MissingAwait
return {
versionInfo: versionInfo,
fileInfo: fileInfo,
downloadPromise: this.autoDownload ? this.downloadUpdate() : null,
};
})();
}

@@ -159,21 +242,24 @@ onUpdateAvailable(versionInfo, fileInfo) {

*/
async downloadUpdate() {
const versionInfo = this.versionInfo;
const fileInfo = this.fileInfo;
if (versionInfo == null || fileInfo == null) {
const message = "Please check update first";
const error = new Error(message);
this.emit("error", error, message);
throw error;
}
if (this.logger != null) {
this.logger.info(`Downloading update from ${fileInfo.url}`);
}
try {
return await this.doDownloadUpdate(versionInfo, fileInfo);
}
catch (e) {
this.dispatchError(e);
throw e;
}
downloadUpdate() {
var _this3 = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
const versionInfo = _this3.versionInfo;
const fileInfo = _this3.fileInfo;
if (versionInfo == null || fileInfo == null) {
const message = "Please check update first";
const error = new Error(message);
_this3.emit("error", error, message);
throw error;
}
if (_this3.logger != null) {
_this3.logger.info(`Downloading update from ${fileInfo.url}`);
}
try {
return yield _this3.doDownloadUpdate(versionInfo, fileInfo);
} catch (e) {
_this3.dispatchError(e);
throw e;
}
})();
}

@@ -183,9 +269,14 @@ dispatchError(e) {

}
async loadUpdateConfig() {
if (this._appUpdateConfigPath == null) {
this._appUpdateConfigPath = path.join(process.resourcesPath, "app-update.yml");
}
return safeLoad(await readFile(this._appUpdateConfigPath, "utf-8"));
loadUpdateConfig() {
var _this4 = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
if (_this4._appUpdateConfigPath == null) {
_this4._appUpdateConfigPath = _path.join(process.resourcesPath, "app-update.yml");
}
return (0, (_jsYaml || _load_jsYaml()).safeLoad)((yield (0, (_fsExtraP || _load_fsExtraP()).readFile)(_this4._appUpdateConfigPath, "utf-8")));
})();
}
}
exports.AppUpdater = AppUpdater;
function createClient(data) {

@@ -198,15 +289,16 @@ if (typeof data === "string") {

case "github":
return new GitHubProvider(data);
case "s3": {
const s3 = data;
return new GenericProvider({
provider: "generic",
url: s3Url(s3),
channel: s3.channel || ""
});
}
return new (_GitHubProvider || _load_GitHubProvider()).GitHubProvider(data);
case "s3":
{
const s3 = data;
return new (_GenericProvider || _load_GenericProvider()).GenericProvider({
provider: "generic",
url: (0, (_publishOptions || _load_publishOptions()).s3Url)(s3),
channel: s3.channel || ""
});
}
case "generic":
return new GenericProvider(data);
return new (_GenericProvider || _load_GenericProvider()).GenericProvider(data);
case "bintray":
return new BintrayProvider(data);
return new (_BintrayProvider || _load_BintrayProvider()).BintrayProvider(data);
default:

@@ -213,0 +305,0 @@ throw new Error(`Unsupported provider: ${provider}`);

@@ -1,48 +0,87 @@

import { Provider } from "./api";
import { BintrayClient } from "electron-builder-http/out/bintray";
import { HttpError } from "electron-builder-http";
import { CancellationToken } from "electron-builder-http/out/CancellationToken";
export class BintrayProvider extends Provider {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.BintrayProvider = undefined;
var _bluebirdLstC;
function _load_bluebirdLstC() {
return _bluebirdLstC = require("bluebird-lst-c");
}
var _api;
function _load_api() {
return _api = require("./api");
}
var _bintray;
function _load_bintray() {
return _bintray = require("electron-builder-http/out/bintray");
}
var _electronBuilderHttp;
function _load_electronBuilderHttp() {
return _electronBuilderHttp = require("electron-builder-http");
}
var _CancellationToken;
function _load_CancellationToken() {
return _CancellationToken = require("electron-builder-http/out/CancellationToken");
}
class BintrayProvider extends (_api || _load_api()).Provider {
constructor(configuration) {
super();
this.client = new BintrayClient(configuration, new CancellationToken());
this.client = new (_bintray || _load_bintray()).BintrayClient(configuration, new (_CancellationToken || _load_CancellationToken()).CancellationToken());
}
async getLatestVersion() {
try {
const data = await this.client.getVersion("_latest");
return {
version: data.name,
};
}
catch (e) {
if ("response" in e && e.response.statusCode === 404) {
throw new Error(`No latest version, please ensure that user, package and repository correctly configured. Or at least one version is published. ${e.stack || e.message}`);
getLatestVersion() {
var _this = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
try {
const data = yield _this.client.getVersion("_latest");
return {
version: data.name
};
} catch (e) {
if ("response" in e && e.response.statusCode === 404) {
throw new Error(`No latest version, please ensure that user, package and repository correctly configured. Or at least one version is published. ${e.stack || e.message}`);
}
throw e;
}
throw e;
}
})();
}
async getUpdateFile(versionInfo) {
try {
const files = await this.client.getVersionFiles(versionInfo.version);
const suffix = `${versionInfo.version}.exe`;
for (const file of files) {
if (file.name.endsWith(suffix) && file.name.includes("Setup")) {
return {
name: file.name,
url: `https://dl.bintray.com/${this.client.owner}/${this.client.repo}/${file.name}`,
sha2: file.sha256,
};
getUpdateFile(versionInfo) {
var _this2 = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
try {
const files = yield _this2.client.getVersionFiles(versionInfo.version);
const suffix = `${versionInfo.version}.exe`;
for (const file of files) {
if (file.name.endsWith(suffix) && file.name.indexOf("Setup") !== -1) {
return {
name: file.name,
url: `https://dl.bintray.com/${_this2.client.owner}/${_this2.client.repo}/${file.name}`,
sha2: file.sha256
};
}
}
//noinspection ExceptionCaughtLocallyJS
throw new Error(`Cannot find suitable file for version ${versionInfo.version} in: ${JSON.stringify(files, null, 2)}`);
} catch (e) {
if (e instanceof (_electronBuilderHttp || _load_electronBuilderHttp()).HttpError && e.response.statusCode === 404) {
throw new Error(`No latest version, please ensure that user, package and repository correctly configured. Or at least one version is published. ${e.stack || e.message}`);
}
throw e;
}
//noinspection ExceptionCaughtLocallyJS
throw new Error(`Cannot find suitable file for version ${versionInfo.version} in: ${JSON.stringify(files, null, 2)}`);
}
catch (e) {
if (e instanceof HttpError && e.response.statusCode === 404) {
throw new Error(`No latest version, please ensure that user, package and repository correctly configured. Or at least one version is published. ${e.stack || e.message}`);
}
throw e;
}
})();
}
}
//# sourceMappingURL=BintrayProvider.js.map
exports.BintrayProvider = BintrayProvider; //# sourceMappingURL=BintrayProvider.js.map

@@ -1,41 +0,93 @@

import { net } from "electron";
import { ensureDir } from "fs-extra-p";
import BluebirdPromise from "bluebird-lst-c";
import * as path from "path";
import { HttpExecutor, dumpRequestOptions, configureRequestOptions } from "electron-builder-http";
import { parse as parseUrl } from "url";
import { CancellationToken } from "electron-builder-http/out/CancellationToken";
export class ElectronHttpExecutor extends HttpExecutor {
async download(url, destination, options) {
if (options == null || !options.skipDirCreation) {
await ensureDir(path.dirname(destination));
}
return await new BluebirdPromise((resolve, reject) => {
const parsedUrl = parseUrl(url);
this.doDownload(configureRequestOptions({
protocol: parsedUrl.protocol,
hostname: parsedUrl.hostname,
path: parsedUrl.path,
port: parsedUrl.port ? parseInt(parsedUrl.port, 10) : undefined,
headers: (options == null ? null : options.headers) || undefined,
}), destination, 0, options || { cancellationToken: new CancellationToken() }, (error) => {
if (error == null) {
resolve(destination);
}
else {
reject(error);
}
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ElectronHttpExecutor = undefined;
var _bluebirdLstC;
function _load_bluebirdLstC() {
return _bluebirdLstC = require("bluebird-lst-c");
}
var _bluebirdLstC2;
function _load_bluebirdLstC2() {
return _bluebirdLstC2 = _interopRequireDefault(require("bluebird-lst-c"));
}
var _electron;
function _load_electron() {
return _electron = require("electron");
}
var _fsExtraP;
function _load_fsExtraP() {
return _fsExtraP = require("fs-extra-p");
}
var _path = _interopRequireWildcard(require("path"));
var _electronBuilderHttp;
function _load_electronBuilderHttp() {
return _electronBuilderHttp = require("electron-builder-http");
}
var _url;
function _load_url() {
return _url = require("url");
}
var _CancellationToken;
function _load_CancellationToken() {
return _CancellationToken = require("electron-builder-http/out/CancellationToken");
}
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class ElectronHttpExecutor extends (_electronBuilderHttp || _load_electronBuilderHttp()).HttpExecutor {
download(url, destination, options) {
var _this = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
if (options == null || !options.skipDirCreation) {
yield (0, (_fsExtraP || _load_fsExtraP()).ensureDir)(_path.dirname(destination));
}
return yield new (_bluebirdLstC2 || _load_bluebirdLstC2()).default(function (resolve, reject) {
const parsedUrl = (0, (_url || _load_url()).parse)(url);
_this.doDownload((0, (_electronBuilderHttp || _load_electronBuilderHttp()).configureRequestOptions)({
protocol: parsedUrl.protocol,
hostname: parsedUrl.hostname,
path: parsedUrl.path,
port: parsedUrl.port ? parseInt(parsedUrl.port, 10) : undefined,
headers: (options == null ? null : options.headers) || undefined
}), destination, 0, options || { cancellationToken: new (_CancellationToken || _load_CancellationToken()).CancellationToken() }, function (error) {
if (error == null) {
resolve(destination);
} else {
reject(error);
}
});
});
});
})();
}
doApiRequest(options, cancellationToken, requestProcessor, redirectCount = 0) {
doApiRequest(options, cancellationToken, requestProcessor) {
let redirectCount = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
if (this.debug.enabled) {
this.debug(`request: ${dumpRequestOptions(options)}`);
this.debug(`request: ${(0, (_electronBuilderHttp || _load_electronBuilderHttp()).dumpRequestOptions)(options)}`);
}
return cancellationToken.trackPromise(new BluebirdPromise((resolve, reject, onCancel) => {
const request = net.request(options, response => {
return cancellationToken.trackPromise(new (_bluebirdLstC2 || _load_bluebirdLstC2()).default((resolve, reject, onCancel) => {
const request = (_electron || _load_electron()).net.request(options, response => {
try {
this.handleResponse(response, options, cancellationToken, resolve, reject, redirectCount, requestProcessor);
}
catch (e) {
} catch (e) {
reject(e);

@@ -51,5 +103,5 @@ }

doRequest(options, callback) {
return net.request(options, callback);
return (_electron || _load_electron()).net.request(options, callback);
}
}
//# sourceMappingURL=electronHttpExecutor.js.map
exports.ElectronHttpExecutor = ElectronHttpExecutor; //# sourceMappingURL=electronHttpExecutor.js.map

@@ -1,55 +0,101 @@

import { Provider, getDefaultChannelName, getCustomChannelName, getChannelFilename, getCurrentPlatform } from "./api";
import * as url from "url";
import * as path from "path";
import { HttpError, request } from "electron-builder-http";
import { CancellationToken } from "electron-builder-http/out/CancellationToken";
export class GenericProvider extends Provider {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GenericProvider = undefined;
var _bluebirdLstC;
function _load_bluebirdLstC() {
return _bluebirdLstC = require("bluebird-lst-c");
}
exports.validateUpdateInfo = validateUpdateInfo;
var _api;
function _load_api() {
return _api = require("./api");
}
var _url;
function _load_url() {
return _url = _interopRequireWildcard(require("url"));
}
var _path = _interopRequireWildcard(require("path"));
var _electronBuilderHttp;
function _load_electronBuilderHttp() {
return _electronBuilderHttp = require("electron-builder-http");
}
var _CancellationToken;
function _load_CancellationToken() {
return _CancellationToken = require("electron-builder-http/out/CancellationToken");
}
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
class GenericProvider extends (_api || _load_api()).Provider {
constructor(configuration) {
super();
this.configuration = configuration;
this.baseUrl = url.parse(this.configuration.url);
this.channel = this.configuration.channel ? getCustomChannelName(this.configuration.channel) : getDefaultChannelName();
this.baseUrl = (_url || _load_url()).parse(this.configuration.url);
this.channel = this.configuration.channel ? (0, (_api || _load_api()).getCustomChannelName)(this.configuration.channel) : (0, (_api || _load_api()).getDefaultChannelName)();
}
async getLatestVersion() {
let result = null;
const channelFile = getChannelFilename(this.channel);
const pathname = path.posix.resolve(this.baseUrl.pathname || "/", channelFile);
try {
const options = {
hostname: this.baseUrl.hostname,
path: `${pathname}${this.baseUrl.search || ""}`,
protocol: this.baseUrl.protocol,
headers: this.requestHeaders || undefined
};
if (this.baseUrl.port != null) {
options.port = parseInt(this.baseUrl.port, 10);
getLatestVersion() {
var _this = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
let result = null;
const channelFile = (0, (_api || _load_api()).getChannelFilename)(_this.channel);
const pathname = _path.posix.resolve(_this.baseUrl.pathname || "/", channelFile);
try {
const options = {
hostname: _this.baseUrl.hostname,
path: `${pathname}${_this.baseUrl.search || ""}`,
protocol: _this.baseUrl.protocol,
headers: _this.requestHeaders || undefined
};
if (_this.baseUrl.port != null) {
options.port = parseInt(_this.baseUrl.port, 10);
}
result = yield (0, (_electronBuilderHttp || _load_electronBuilderHttp()).request)(options, new (_CancellationToken || _load_CancellationToken()).CancellationToken());
} catch (e) {
if (e instanceof (_electronBuilderHttp || _load_electronBuilderHttp()).HttpError && e.response.statusCode === 404) {
throw new Error(`Cannot find channel "${channelFile}" update info: ${e.stack || e.message}`);
}
throw e;
}
result = await request(options, new CancellationToken());
}
catch (e) {
if (e instanceof HttpError && e.response.statusCode === 404) {
throw new Error(`Cannot find channel "${channelFile}" update info: ${e.stack || e.message}`);
validateUpdateInfo(result);
if ((0, (_api || _load_api()).getCurrentPlatform)() === "darwin") {
result.releaseJsonUrl = (_url || _load_url()).format(Object.assign({}, _this.baseUrl, { pathname: pathname }));
}
throw e;
}
validateUpdateInfo(result);
if (getCurrentPlatform() === "darwin") {
result.releaseJsonUrl = url.format(Object.assign({}, this.baseUrl, { pathname: pathname }));
}
return result;
return result;
})();
}
async getUpdateFile(versionInfo) {
if (getCurrentPlatform() === "darwin") {
return versionInfo;
}
return {
name: path.posix.basename(versionInfo.path),
url: url.format(Object.assign({}, this.baseUrl, { pathname: path.posix.resolve(this.baseUrl.pathname || "/", versionInfo.path) })),
sha2: versionInfo.sha2,
};
getUpdateFile(versionInfo) {
var _this2 = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
if ((0, (_api || _load_api()).getCurrentPlatform)() === "darwin") {
return versionInfo;
}
return {
name: _path.posix.basename(versionInfo.path),
url: (_url || _load_url()).format(Object.assign({}, _this2.baseUrl, { pathname: _path.posix.resolve(_this2.baseUrl.pathname || "/", versionInfo.path) })),
sha2: versionInfo.sha2
};
})();
}
}
// sha2 is required only for windows because on macOS update is verified by Squirrel.Mac
export function validateUpdateInfo(info) {
if (getCurrentPlatform() === "darwin") {
exports.GenericProvider = GenericProvider; // sha2 is required only for windows because on macOS update is verified by Squirrel.Mac
function validateUpdateInfo(info) {
if ((0, (_api || _load_api()).getCurrentPlatform)() === "darwin") {
if (info.url == null) {

@@ -56,0 +102,0 @@ throw new Error("Update info doesn't contain url");

@@ -1,54 +0,106 @@

import { Provider, getDefaultChannelName, getChannelFilename, getCurrentPlatform } from "./api";
import { githubUrl } from "electron-builder-http/out/publishOptions";
import { validateUpdateInfo } from "./GenericProvider";
import * as path from "path";
import { HttpError, request } from "electron-builder-http";
import { CancellationToken } from "electron-builder-http/out/CancellationToken";
import { parse as parseUrl, format as buggyFormat } from "url";
export class GitHubProvider extends Provider {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GitHubProvider = undefined;
var _bluebirdLstC;
function _load_bluebirdLstC() {
return _bluebirdLstC = require("bluebird-lst-c");
}
var _api;
function _load_api() {
return _api = require("./api");
}
var _publishOptions;
function _load_publishOptions() {
return _publishOptions = require("electron-builder-http/out/publishOptions");
}
var _GenericProvider;
function _load_GenericProvider() {
return _GenericProvider = require("./GenericProvider");
}
var _path = _interopRequireWildcard(require("path"));
var _electronBuilderHttp;
function _load_electronBuilderHttp() {
return _electronBuilderHttp = require("electron-builder-http");
}
var _CancellationToken;
function _load_CancellationToken() {
return _CancellationToken = require("electron-builder-http/out/CancellationToken");
}
var _url;
function _load_url() {
return _url = require("url");
}
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
class GitHubProvider extends (_api || _load_api()).Provider {
constructor(options) {
super();
this.options = options;
const baseUrl = parseUrl(`${options.protocol || "https"}://${options.host || "github.com"}`);
const baseUrl = (0, (_url || _load_url()).parse)(`${options.protocol || "https"}://${options.host || "github.com"}`);
this.baseUrl = {
protocol: baseUrl.protocol,
hostname: baseUrl.hostname,
port: baseUrl.port,
port: baseUrl.port
};
}
async getLatestVersion() {
const basePath = this.getBasePath();
const cancellationToken = new CancellationToken();
const version = await this.getLatestVersionString(basePath, cancellationToken);
let result;
const channelFile = getChannelFilename(getDefaultChannelName());
const requestOptions = Object.assign({ path: `${basePath}/download/v${version}/${channelFile}`, headers: this.requestHeaders || undefined }, this.baseUrl);
try {
result = await request(requestOptions, cancellationToken);
}
catch (e) {
if (e instanceof HttpError && e.response.statusCode === 404) {
throw new Error(`Cannot find ${channelFile} in the latest release artifacts (${formatUrl(requestOptions)}): ${e.stack || e.message}`);
getLatestVersion() {
var _this = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
const basePath = _this.getBasePath();
const cancellationToken = new (_CancellationToken || _load_CancellationToken()).CancellationToken();
const version = yield _this.getLatestVersionString(basePath, cancellationToken);
let result;
const channelFile = (0, (_api || _load_api()).getChannelFilename)((0, (_api || _load_api()).getDefaultChannelName)());
const requestOptions = Object.assign({ path: `${basePath}/download/v${version}/${channelFile}`, headers: _this.requestHeaders || undefined }, _this.baseUrl);
try {
result = yield (0, (_electronBuilderHttp || _load_electronBuilderHttp()).request)(requestOptions, cancellationToken);
} catch (e) {
if (e instanceof (_electronBuilderHttp || _load_electronBuilderHttp()).HttpError && e.response.statusCode === 404) {
throw new Error(`Cannot find ${channelFile} in the latest release artifacts (${formatUrl(requestOptions)}): ${e.stack || e.message}`);
}
throw e;
}
throw e;
}
validateUpdateInfo(result);
if (getCurrentPlatform() === "darwin") {
result.releaseJsonUrl = `${githubUrl(this.options)}/${requestOptions.path}`;
}
return result;
(0, (_GenericProvider || _load_GenericProvider()).validateUpdateInfo)(result);
if ((0, (_api || _load_api()).getCurrentPlatform)() === "darwin") {
result.releaseJsonUrl = `${(0, (_publishOptions || _load_publishOptions()).githubUrl)(_this.options)}/${requestOptions.path}`;
}
return result;
})();
}
async getLatestVersionString(basePath, cancellationToken) {
const requestOptions = Object.assign({
path: `${basePath}/latest`,
headers: Object.assign({ Accept: "application/json" }, this.requestHeaders)
}, this.baseUrl);
try {
// do not use API to avoid limit
const releaseInfo = (await request(requestOptions, cancellationToken));
return (releaseInfo.tag_name.startsWith("v")) ? releaseInfo.tag_name.substring(1) : releaseInfo.tag_name;
}
catch (e) {
throw new Error(`Unable to find latest version on GitHub (${formatUrl(requestOptions)}), please ensure a production release exists: ${e.stack || e.message}`);
}
getLatestVersionString(basePath, cancellationToken) {
var _this2 = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
const requestOptions = Object.assign({
path: `${basePath}/latest`,
headers: Object.assign({ Accept: "application/json" }, _this2.requestHeaders)
}, _this2.baseUrl);
try {
// do not use API to avoid limit
const releaseInfo = yield (0, (_electronBuilderHttp || _load_electronBuilderHttp()).request)(requestOptions, cancellationToken);
return releaseInfo.tag_name.startsWith("v") ? releaseInfo.tag_name.substring(1) : releaseInfo.tag_name;
} catch (e) {
throw new Error(`Unable to find latest version on GitHub (${formatUrl(requestOptions)}), please ensure a production release exists: ${e.stack || e.message}`);
}
})();
}

@@ -58,17 +110,22 @@ getBasePath() {

}
async getUpdateFile(versionInfo) {
if (getCurrentPlatform() === "darwin") {
return versionInfo;
}
const basePath = this.getBasePath();
// space is not supported on GitHub
const name = versionInfo.githubArtifactName || path.posix.basename(versionInfo.path).replace(/ /g, "-");
return {
name: name,
url: formatUrl(Object.assign({ path: `${basePath}/download/v${versionInfo.version}/${name}` }, this.baseUrl)),
sha2: versionInfo.sha2,
};
getUpdateFile(versionInfo) {
var _this3 = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
if ((0, (_api || _load_api()).getCurrentPlatform)() === "darwin") {
return versionInfo;
}
const basePath = _this3.getBasePath();
// space is not supported on GitHub
const name = versionInfo.githubArtifactName || _path.posix.basename(versionInfo.path).replace(/ /g, "-");
return {
name: name,
url: formatUrl(Object.assign({ path: `${basePath}/download/v${versionInfo.version}/${name}` }, _this3.baseUrl)),
sha2: versionInfo.sha2
};
})();
}
}
// url.format doesn't correctly use path and requires explicit pathname
exports.GitHubProvider = GitHubProvider; // url.format doesn't correctly use path and requires explicit pathname
function formatUrl(url) {

@@ -78,4 +135,4 @@ if (url.path != null && url.pathname == null) {

}
return buggyFormat(url);
return (0, (_url || _load_url()).format)(url);
}
//# sourceMappingURL=GitHubProvider.js.map

@@ -1,4 +0,23 @@

import { AppUpdater } from "./AppUpdater";
import BluebirdPromise from "bluebird-lst-c";
export class MacUpdater extends AppUpdater {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MacUpdater = undefined;
var _AppUpdater;
function _load_AppUpdater() {
return _AppUpdater = require("./AppUpdater");
}
var _bluebirdLstC;
function _load_bluebirdLstC() {
return _bluebirdLstC = _interopRequireDefault(require("bluebird-lst-c"));
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class MacUpdater extends (_AppUpdater || _load_AppUpdater()).AppUpdater {
constructor(options) {

@@ -26,3 +45,3 @@ super(options);

this.nativeUpdater.checkForUpdates();
return BluebirdPromise.resolve();
return (_bluebirdLstC || _load_bluebirdLstC()).default.resolve();
}

@@ -33,2 +52,2 @@ quitAndInstall() {

}
//# sourceMappingURL=MacUpdater.js.map
exports.MacUpdater = MacUpdater; //# sourceMappingURL=MacUpdater.js.map

@@ -0,12 +1,15 @@

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
let impl;
if (process.platform === "win32") {
impl = new (require("./NsisUpdater").NsisUpdater)();
}
else if (process.platform === "darwin") {
} else if (process.platform === "darwin") {
impl = new (require("./MacUpdater").MacUpdater)();
}
else {
} else {
impl = require("electron").autoUpdater;
}
export const autoUpdater = impl;
const autoUpdater = exports.autoUpdater = impl;
//# sourceMappingURL=main.js.map

@@ -1,11 +0,63 @@

import { spawn } from "child_process";
import * as path from "path";
import { tmpdir } from "os";
import { download } from "electron-builder-http";
import { DOWNLOAD_PROGRESS } from "./api";
import { mkdtemp, remove } from "fs-extra-p";
import "source-map-support/register";
import { AppUpdater } from "./AppUpdater";
import { CancellationToken } from "electron-builder-http/out/CancellationToken";
export class NsisUpdater extends AppUpdater {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.NsisUpdater = undefined;
var _bluebirdLstC;
function _load_bluebirdLstC() {
return _bluebirdLstC = require("bluebird-lst-c");
}
var _child_process;
function _load_child_process() {
return _child_process = require("child_process");
}
var _path = _interopRequireWildcard(require("path"));
var _os;
function _load_os() {
return _os = require("os");
}
var _electronBuilderHttp;
function _load_electronBuilderHttp() {
return _electronBuilderHttp = require("electron-builder-http");
}
var _api;
function _load_api() {
return _api = require("./api");
}
var _fsExtraP;
function _load_fsExtraP() {
return _fsExtraP = require("fs-extra-p");
}
require("source-map-support/register");
var _AppUpdater;
function _load_AppUpdater() {
return _AppUpdater = require("./AppUpdater");
}
var _CancellationToken;
function _load_CancellationToken() {
return _CancellationToken = require("electron-builder-http/out/CancellationToken");
}
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
class NsisUpdater extends (_AppUpdater || _load_AppUpdater()).AppUpdater {
constructor(options) {

@@ -20,33 +72,36 @@ super(options);

*/
async doDownloadUpdate(versionInfo, fileInfo) {
const downloadOptions = {
skipDirCreation: true,
headers: this.requestHeaders || undefined,
cancellationToken: new CancellationToken(),
sha2: fileInfo == null ? null : fileInfo.sha2,
};
if (this.listenerCount(DOWNLOAD_PROGRESS) > 0) {
downloadOptions.onProgress = it => this.emit(DOWNLOAD_PROGRESS, it);
}
const logger = this.logger;
const tempDir = await mkdtemp(`${path.join(tmpdir(), "up")}-`);
const tempFile = path.join(tempDir, fileInfo.name);
try {
await download(fileInfo.url, tempFile, downloadOptions);
}
catch (e) {
doDownloadUpdate(versionInfo, fileInfo) {
var _this = this;
return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () {
const downloadOptions = {
skipDirCreation: true,
headers: _this.requestHeaders || undefined,
cancellationToken: new (_CancellationToken || _load_CancellationToken()).CancellationToken(),
sha2: fileInfo == null ? null : fileInfo.sha2
};
if (_this.listenerCount((_api || _load_api()).DOWNLOAD_PROGRESS) > 0) {
downloadOptions.onProgress = function (it) {
return _this.emit((_api || _load_api()).DOWNLOAD_PROGRESS, it);
};
}
const logger = _this.logger;
const tempDir = yield (0, (_fsExtraP || _load_fsExtraP()).mkdtemp)(`${_path.join((0, (_os || _load_os()).tmpdir)(), "up")}-`);
const tempFile = _path.join(tempDir, fileInfo.name);
try {
await remove(tempDir);
yield (0, (_electronBuilderHttp || _load_electronBuilderHttp()).download)(fileInfo.url, tempFile, downloadOptions);
} catch (e) {
try {
yield (0, (_fsExtraP || _load_fsExtraP()).remove)(tempDir);
} catch (ignored) {}
throw e;
}
catch (ignored) {
if (logger != null) {
logger.info(`New version ${_this.versionInfo.version} has been downloaded to ${tempFile}`);
}
throw e;
}
if (logger != null) {
logger.info(`New version ${this.versionInfo.version} has been downloaded to ${tempFile}`);
}
this.setupPath = tempFile;
this.addQuitHandler();
this.emit("update-downloaded", this.versionInfo);
return tempFile;
_this.setupPath = tempFile;
_this.addQuitHandler();
_this.emit("update-downloaded", _this.versionInfo);
return tempFile;
})();
}

@@ -88,9 +143,7 @@ addQuitHandler() {

detached: true,
stdio: "ignore",
stdio: "ignore"
};
try {
spawn(setupPath, args, spawnOptions)
.unref();
}
catch (e) {
(0, (_child_process || _load_child_process()).spawn)(setupPath, args, spawnOptions).unref();
} catch (e) {
// yes, such errors dispatched not as error event

@@ -103,10 +156,7 @@ // https://github.com/electron-userland/electron-builder/issues/1129

try {
spawn(path.join(process.resourcesPath, "elevate.exe"), [setupPath].concat(args), spawnOptions)
.unref();
}
catch (e) {
(0, (_child_process || _load_child_process()).spawn)(_path.join(process.resourcesPath, "elevate.exe"), [setupPath].concat(args), spawnOptions).unref();
} catch (e) {
this.dispatchError(e);
}
}
else {
} else {
this.dispatchError(e);

@@ -118,2 +168,2 @@ }

}
//# sourceMappingURL=NsisUpdater.js.map
exports.NsisUpdater = NsisUpdater; //# sourceMappingURL=NsisUpdater.js.map
{
"name": "electron-updater",
"version": "1.6.3",
"version": "1.6.4",
"description": "Cross platform updater for electron applications",

@@ -5,0 +5,0 @@ "main": "out/main.js",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc