electron-incremental-update 3.0.0-beta.6 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -288
- package/dist/{zip-D1dbBzw4.cjs → crypto-BSky88mL.cjs} +39 -34
- package/dist/{zip-DUK3opmV.mjs → crypto-DZzMmoz2.mjs} +27 -22
- package/dist/{download-BjWmHHAu.d.cts → download-BVmLiAvB.d.cts} +2 -2
- package/dist/{download-BGaAyi1Z.mjs → download-BdX4fZYM.mjs} +13 -15
- package/dist/{download-DVWJfV3S.d.mts → download-GONr15zK.d.mts} +2 -2
- package/dist/{download-BYnkme_X.cjs → download-KySXUyWC.cjs} +14 -16
- package/dist/{electron-BInvFJ-W.mjs → electron-BrIF1urZ.mjs} +1 -1
- package/dist/{electron-D_8AbLQ5.cjs → electron-CaS0I3S2.cjs} +4 -4
- package/dist/index.cjs +8 -8
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +5 -5
- package/dist/{local-s1cw_vwb.mjs → local-C5jw-7o5.mjs} +7 -7
- package/dist/{local-Daf8naRn.cjs → local-DbXBG1D9.cjs} +11 -11
- package/dist/provider.cjs +5 -5
- package/dist/provider.d.cts +9 -15
- package/dist/provider.d.mts +9 -15
- package/dist/provider.mjs +5 -5
- package/dist/{types-BOqQ_r5Q.d.mts → types-q78spjKB.d.cts} +17 -2
- package/dist/{types-BOqQ_r5Q.d.cts → types-q78spjKB.d.mts} +17 -2
- package/dist/utils.cjs +14 -14
- package/dist/utils.d.cts +6 -6
- package/dist/utils.d.mts +6 -6
- package/dist/utils.mjs +4 -4
- package/dist/vite.d.mts +14 -14
- package/dist/vite.mjs +38 -36
- package/package.json +6 -6
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { u as isUpdateJSON } from "./
|
|
1
|
+
import { u as isUpdateJSON } from "./crypto-DZzMmoz2.mjs";
|
|
2
2
|
import { app, net } from "electron";
|
|
3
3
|
//#region src/utils/download.ts
|
|
4
4
|
/**
|
|
@@ -11,7 +11,7 @@ function getHeader(headers, key) {
|
|
|
11
11
|
if (Array.isArray(value)) return value.length === 0 ? null : value[value.length - 1];
|
|
12
12
|
else return value;
|
|
13
13
|
}
|
|
14
|
-
async function downloadUtil(url, headers, onResponse) {
|
|
14
|
+
async function downloadUtil(url, headers, onResponse, signal) {
|
|
15
15
|
await app.whenReady();
|
|
16
16
|
return new Promise((resolve, reject) => {
|
|
17
17
|
const rejectUnexpectedStatus = (resp) => {
|
|
@@ -34,6 +34,13 @@ async function downloadUtil(url, headers, onResponse) {
|
|
|
34
34
|
redirect: "follow",
|
|
35
35
|
url
|
|
36
36
|
});
|
|
37
|
+
if (signal) {
|
|
38
|
+
if (signal.aborted) {
|
|
39
|
+
reject(/* @__PURE__ */ new Error("Aborted"));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
signal.addEventListener("abort", () => request.abort(), { once: true });
|
|
43
|
+
}
|
|
37
44
|
request.on("response", (resp) => {
|
|
38
45
|
resp.on("aborted", () => reject(/* @__PURE__ */ new Error("Aborted")));
|
|
39
46
|
resp.on("error", reject);
|
|
@@ -69,11 +76,7 @@ async function defaultDownloadText(url, headers, signal, resolveData) {
|
|
|
69
76
|
let data = "";
|
|
70
77
|
resp.on("data", (chunk) => data += chunk);
|
|
71
78
|
resp.on("end", () => resolveData(data, resolve, reject));
|
|
72
|
-
|
|
73
|
-
request.abort();
|
|
74
|
-
data = null;
|
|
75
|
-
}, { once: true });
|
|
76
|
-
});
|
|
79
|
+
}, signal);
|
|
77
80
|
}
|
|
78
81
|
/**
|
|
79
82
|
* Default function to download json and parse to UpdateJson
|
|
@@ -103,7 +106,7 @@ async function defaultDownloadUpdateJSON(url, headers, signal) {
|
|
|
103
106
|
async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
104
107
|
let transferred = 0;
|
|
105
108
|
let time = Date.now();
|
|
106
|
-
return await downloadUtil(url, headers, (
|
|
109
|
+
return await downloadUtil(url, headers, (_request, resp, resolve) => {
|
|
107
110
|
const total = +getHeader(resp.headers, "content-length") || -1;
|
|
108
111
|
let data = [];
|
|
109
112
|
resp.on("data", (chunk) => {
|
|
@@ -111,7 +114,7 @@ async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
|
111
114
|
transferred += delta;
|
|
112
115
|
const current = Date.now();
|
|
113
116
|
onDownloading?.({
|
|
114
|
-
bps: delta / (current - time),
|
|
117
|
+
bps: delta / Math.max(current - time, 1) * 1e3,
|
|
115
118
|
delta,
|
|
116
119
|
percent: total > 0 ? +(transferred / total).toFixed(2) * 100 : -1,
|
|
117
120
|
total,
|
|
@@ -121,12 +124,7 @@ async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
|
121
124
|
data.push(chunk);
|
|
122
125
|
});
|
|
123
126
|
resp.on("end", () => resolve(Buffer.concat(data)));
|
|
124
|
-
|
|
125
|
-
request.abort();
|
|
126
|
-
data.length = 0;
|
|
127
|
-
data = null;
|
|
128
|
-
}, { once: true });
|
|
129
|
-
});
|
|
127
|
+
}, signal);
|
|
130
128
|
}
|
|
131
129
|
//#endregion
|
|
132
130
|
export { getHeader as a, downloadUtil as i, defaultDownloadText as n, resolveJson as o, defaultDownloadUpdateJSON as r, defaultDownloadAsar as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { p as Arrayable, s as UpdateJSON, t as DownloadingInfo } from "./types-
|
|
1
|
+
import { p as Arrayable, s as UpdateJSON, t as DownloadingInfo } from "./types-q78spjKB.mjs";
|
|
2
2
|
import { ClientRequest, IncomingMessage } from "electron";
|
|
3
3
|
|
|
4
4
|
//#region src/utils/download.d.ts
|
|
@@ -8,7 +8,7 @@ import { ClientRequest, IncomingMessage } from "electron";
|
|
|
8
8
|
* @param key target header key
|
|
9
9
|
*/
|
|
10
10
|
declare function getHeader(headers: Record<string, Arrayable<string>>, key: any): any;
|
|
11
|
-
declare function downloadUtil<T>(url: string, headers: Record<string, any>, onResponse: (req: ClientRequest, resp: IncomingMessage, resolve: (data: T) => void, reject: (e: any) => void) => void): Promise<T>;
|
|
11
|
+
declare function downloadUtil<T>(url: string, headers: Record<string, any>, onResponse: (req: ClientRequest, resp: IncomingMessage, resolve: (data: T) => void, reject: (e: any) => void) => void, signal?: AbortSignal): Promise<T>;
|
|
12
12
|
type ResolveDataFn = (data: string, resolve: (data: any) => void, reject: (e: any) => void) => void;
|
|
13
13
|
declare const resolveJson: ResolveDataFn;
|
|
14
14
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_crypto = require("./crypto-BSky88mL.cjs");
|
|
2
2
|
let electron = require("electron");
|
|
3
3
|
//#region src/utils/download.ts
|
|
4
4
|
/**
|
|
@@ -11,7 +11,7 @@ function getHeader(headers, key) {
|
|
|
11
11
|
if (Array.isArray(value)) return value.length === 0 ? null : value[value.length - 1];
|
|
12
12
|
else return value;
|
|
13
13
|
}
|
|
14
|
-
async function downloadUtil(url, headers, onResponse) {
|
|
14
|
+
async function downloadUtil(url, headers, onResponse, signal) {
|
|
15
15
|
await electron.app.whenReady();
|
|
16
16
|
return new Promise((resolve, reject) => {
|
|
17
17
|
const rejectUnexpectedStatus = (resp) => {
|
|
@@ -34,6 +34,13 @@ async function downloadUtil(url, headers, onResponse) {
|
|
|
34
34
|
redirect: "follow",
|
|
35
35
|
url
|
|
36
36
|
});
|
|
37
|
+
if (signal) {
|
|
38
|
+
if (signal.aborted) {
|
|
39
|
+
reject(/* @__PURE__ */ new Error("Aborted"));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
signal.addEventListener("abort", () => request.abort(), { once: true });
|
|
43
|
+
}
|
|
37
44
|
request.on("response", (resp) => {
|
|
38
45
|
resp.on("aborted", () => reject(/* @__PURE__ */ new Error("Aborted")));
|
|
39
46
|
resp.on("error", reject);
|
|
@@ -69,11 +76,7 @@ async function defaultDownloadText(url, headers, signal, resolveData) {
|
|
|
69
76
|
let data = "";
|
|
70
77
|
resp.on("data", (chunk) => data += chunk);
|
|
71
78
|
resp.on("end", () => resolveData(data, resolve, reject));
|
|
72
|
-
|
|
73
|
-
request.abort();
|
|
74
|
-
data = null;
|
|
75
|
-
}, { once: true });
|
|
76
|
-
});
|
|
79
|
+
}, signal);
|
|
77
80
|
}
|
|
78
81
|
/**
|
|
79
82
|
* Default function to download json and parse to UpdateJson
|
|
@@ -85,7 +88,7 @@ async function defaultDownloadUpdateJSON(url, headers, signal) {
|
|
|
85
88
|
return await defaultDownloadText(url, headers, signal, (data, resolve, reject) => {
|
|
86
89
|
try {
|
|
87
90
|
const json = JSON.parse(data);
|
|
88
|
-
if (
|
|
91
|
+
if (require_crypto.isUpdateJSON(json)) resolve(json);
|
|
89
92
|
else throw Error;
|
|
90
93
|
} catch {
|
|
91
94
|
reject(/* @__PURE__ */ new Error(`Invalid update json, "${trimData(data)}"`));
|
|
@@ -103,7 +106,7 @@ async function defaultDownloadUpdateJSON(url, headers, signal) {
|
|
|
103
106
|
async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
104
107
|
let transferred = 0;
|
|
105
108
|
let time = Date.now();
|
|
106
|
-
return await downloadUtil(url, headers, (
|
|
109
|
+
return await downloadUtil(url, headers, (_request, resp, resolve) => {
|
|
107
110
|
const total = +getHeader(resp.headers, "content-length") || -1;
|
|
108
111
|
let data = [];
|
|
109
112
|
resp.on("data", (chunk) => {
|
|
@@ -111,7 +114,7 @@ async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
|
111
114
|
transferred += delta;
|
|
112
115
|
const current = Date.now();
|
|
113
116
|
onDownloading?.({
|
|
114
|
-
bps: delta / (current - time),
|
|
117
|
+
bps: delta / Math.max(current - time, 1) * 1e3,
|
|
115
118
|
delta,
|
|
116
119
|
percent: total > 0 ? +(transferred / total).toFixed(2) * 100 : -1,
|
|
117
120
|
total,
|
|
@@ -121,12 +124,7 @@ async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
|
121
124
|
data.push(chunk);
|
|
122
125
|
});
|
|
123
126
|
resp.on("end", () => resolve(Buffer.concat(data)));
|
|
124
|
-
|
|
125
|
-
request.abort();
|
|
126
|
-
data.length = 0;
|
|
127
|
-
data = null;
|
|
128
|
-
}, { once: true });
|
|
129
|
-
});
|
|
127
|
+
}, signal);
|
|
130
128
|
}
|
|
131
129
|
//#endregion
|
|
132
130
|
Object.defineProperty(exports, "defaultDownloadAsar", {
|
|
@@ -6,7 +6,7 @@ import { pathToFileURL } from "node:url";
|
|
|
6
6
|
var font_default = ":root,body{--source-code-font-family:var(--mono)!important;--source-code-font-size:12px!important;--monospace-font-family:var(--mono)!important;--monospace-font-size:12px!important;--default-font-family:var(--sans), sans-serif!important;--default-font-size:12px!important}button,input,select,.undisplayable-text,.expandable-inline-button{font-family:var(--sans)!important}\n";
|
|
7
7
|
//#endregion
|
|
8
8
|
//#region src/utils/devtools/js.ts?inject
|
|
9
|
-
var js_default = "
|
|
9
|
+
var js_default = "function e(e){let t=document.createElement(`style`);t.innerHTML=e,document.body.append(t),[`platform-windows`,`platform-mac`,`platform-linux`].forEach(e=>document.querySelectorAll(`.${e}`).forEach(t=>t.classList.remove(e))),r();let n=new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e=0;e<t.addedNodes.length;e++)t.addedNodes[e].classList.contains(`editor-tooltip-host`)&&r()});n.observe(document.body,{childList:!0});function r(){document.querySelectorAll(`.editor-tooltip-host`).forEach(t=>{if(t?.shadowRoot?.querySelectorAll(`[data-key=\"overridden-dev-tools-font\"]`).length===0){let n=document.createElement(`style`);n.dataset.key=`overridden-dev-tools-font`,n.innerHTML=`${e}.cm-tooltip-autocomplete ul[role=listbox]{font-family:var(--mono)!important;}`,t.shadowRoot.append(n)}})}window.onbeforeunload=()=>n.disconnect()}e(__CSS__);";
|
|
10
10
|
//#endregion
|
|
11
11
|
//#region src/utils/devtools/scrollbar.css?inline
|
|
12
12
|
var scrollbar_default = ":root{--scrollbar-width:max(.85vw, 10px)}@media (prefers-color-scheme:light){:root{--scrollbar-color-rgb:0, 0, 0}}@media (prefers-color-scheme:dark){:root{--scrollbar-color-rgb:255, 255, 255}}::-webkit-scrollbar{width:var(--scrollbar-width)!important;height:var(--scrollbar-width)!important}::-webkit-scrollbar-track{border-radius:var(--scrollbar-width)!important;box-shadow:none!important;background-color:#0000!important}::-webkit-scrollbar-thumb{background-clip:content-box;box-shadow:inset 0 0 0 var(--scrollbar-width)!important;border-radius:var(--scrollbar-width)!important;border:calc(var(--scrollbar-width) * 2 / 9) solid transparent!important;color:rgba(var(--scrollbar-color-rgb), 30%)!important;background-color:#0000!important}::-webkit-scrollbar-thumb:hover{color:rgba(var(--scrollbar-color-rgb), 45%)!important}::-webkit-scrollbar-thumb:active{color:rgba(var(--scrollbar-color-rgb), 60%)!important}@supports not selector(::-webkit-scrollbar){html{scrollbar-color:rgb(var(--scrollbar-color-rgb));scrollbar-width:thin}}\n";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_crypto = require("./crypto-BSky88mL.cjs");
|
|
2
2
|
let node_fs = require("node:fs");
|
|
3
|
-
node_fs =
|
|
3
|
+
node_fs = require_crypto.__toESM(node_fs, 1);
|
|
4
4
|
let node_path = require("node:path");
|
|
5
|
-
node_path =
|
|
5
|
+
node_path = require_crypto.__toESM(node_path, 1);
|
|
6
6
|
let electron = require("electron");
|
|
7
7
|
let node_url = require("node:url");
|
|
8
8
|
//#region src/utils/devtools/font.css?inline
|
|
9
9
|
var font_default = ":root,body{--source-code-font-family:var(--mono)!important;--source-code-font-size:12px!important;--monospace-font-family:var(--mono)!important;--monospace-font-size:12px!important;--default-font-family:var(--sans), sans-serif!important;--default-font-size:12px!important}button,input,select,.undisplayable-text,.expandable-inline-button{font-family:var(--sans)!important}\n";
|
|
10
10
|
//#endregion
|
|
11
11
|
//#region src/utils/devtools/js.ts?inject
|
|
12
|
-
var js_default = "
|
|
12
|
+
var js_default = "function e(e){let t=document.createElement(`style`);t.innerHTML=e,document.body.append(t),[`platform-windows`,`platform-mac`,`platform-linux`].forEach(e=>document.querySelectorAll(`.${e}`).forEach(t=>t.classList.remove(e))),r();let n=new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e=0;e<t.addedNodes.length;e++)t.addedNodes[e].classList.contains(`editor-tooltip-host`)&&r()});n.observe(document.body,{childList:!0});function r(){document.querySelectorAll(`.editor-tooltip-host`).forEach(t=>{if(t?.shadowRoot?.querySelectorAll(`[data-key=\"overridden-dev-tools-font\"]`).length===0){let n=document.createElement(`style`);n.dataset.key=`overridden-dev-tools-font`,n.innerHTML=`${e}.cm-tooltip-autocomplete ul[role=listbox]{font-family:var(--mono)!important;}`,t.shadowRoot.append(n)}})}window.onbeforeunload=()=>n.disconnect()}e(__CSS__);";
|
|
13
13
|
//#endregion
|
|
14
14
|
//#region src/utils/devtools/scrollbar.css?inline
|
|
15
15
|
var scrollbar_default = ":root{--scrollbar-width:max(.85vw, 10px)}@media (prefers-color-scheme:light){:root{--scrollbar-color-rgb:0, 0, 0}}@media (prefers-color-scheme:dark){:root{--scrollbar-color-rgb:255, 255, 255}}::-webkit-scrollbar{width:var(--scrollbar-width)!important;height:var(--scrollbar-width)!important}::-webkit-scrollbar-track{border-radius:var(--scrollbar-width)!important;box-shadow:none!important;background-color:#0000!important}::-webkit-scrollbar-thumb{background-clip:content-box;box-shadow:inset 0 0 0 var(--scrollbar-width)!important;border-radius:var(--scrollbar-width)!important;border:calc(var(--scrollbar-width) * 2 / 9) solid transparent!important;color:rgba(var(--scrollbar-color-rgb), 30%)!important;background-color:#0000!important}::-webkit-scrollbar-thumb:hover{color:rgba(var(--scrollbar-color-rgb), 45%)!important}::-webkit-scrollbar-thumb:active{color:rgba(var(--scrollbar-color-rgb), 60%)!important}@supports not selector(::-webkit-scrollbar){html{scrollbar-color:rgb(var(--scrollbar-color-rgb));scrollbar-width:thin}}\n";
|
package/dist/index.cjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const
|
|
3
|
-
const require_local = require("./local-
|
|
4
|
-
const require_electron = require("./electron-
|
|
2
|
+
const require_crypto = require("./crypto-BSky88mL.cjs");
|
|
3
|
+
const require_local = require("./local-DbXBG1D9.cjs");
|
|
4
|
+
const require_electron = require("./electron-CaS0I3S2.cjs");
|
|
5
5
|
let node_fs = require("node:fs");
|
|
6
|
-
node_fs =
|
|
6
|
+
node_fs = require_crypto.__toESM(node_fs, 1);
|
|
7
7
|
let node_path = require("node:path");
|
|
8
|
-
node_path =
|
|
8
|
+
node_path = require_crypto.__toESM(node_path, 1);
|
|
9
9
|
let electron = require("electron");
|
|
10
10
|
let node_events = require("node:events");
|
|
11
11
|
//#region src/entry/types.ts
|
|
@@ -61,7 +61,7 @@ var Updater = class extends node_events.EventEmitter {
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
async fetch(format, data) {
|
|
64
|
-
if (typeof data === "object") if (format === "json" &&
|
|
64
|
+
if (typeof data === "object") if (format === "json" && require_crypto.isUpdateJSON(data) || format === "buffer" && Buffer.isBuffer(data)) return data;
|
|
65
65
|
else {
|
|
66
66
|
this.err("Invalid type", "ERR_PARAM", `Invalid type at format '${format}': ${JSON.stringify(data)}`);
|
|
67
67
|
return;
|
|
@@ -178,12 +178,12 @@ var Updater = class extends node_events.EventEmitter {
|
|
|
178
178
|
return false;
|
|
179
179
|
}
|
|
180
180
|
this.logger?.debug("Validation start");
|
|
181
|
-
if (!await this.provider.
|
|
181
|
+
if (!await this.provider.verifySignature(buffer, _version, _sig, this.CERT)) return emitError("ERR_VALIDATE", "Invalid update asar file");
|
|
182
182
|
this.logger?.debug("Validation end");
|
|
183
183
|
try {
|
|
184
184
|
this.tmpFilePath = `${require_electron.getPathFromAppNameAsar()}.tmp`;
|
|
185
185
|
this.logger?.debug(`Install to ${this.tmpFilePath}`);
|
|
186
|
-
node_fs.default.writeFileSync(this.tmpFilePath, await this.provider.
|
|
186
|
+
node_fs.default.writeFileSync(this.tmpFilePath, await this.provider.decompressFile(buffer));
|
|
187
187
|
this.logger?.info(`Download success, version: ${_version}`);
|
|
188
188
|
this.info = void 0;
|
|
189
189
|
this.emit("update-downloaded");
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as Promisable, n as IProvider, o as UpdateInfo, t as DownloadingInfo } from "./types-
|
|
1
|
+
import { m as Promisable, n as IProvider, o as UpdateInfo, t as DownloadingInfo } from "./types-q78spjKB.cjs";
|
|
2
2
|
import { EventEmitter } from "node:events";
|
|
3
3
|
|
|
4
4
|
//#region src/entry/types.d.ts
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as Promisable, n as IProvider, o as UpdateInfo, t as DownloadingInfo } from "./types-
|
|
1
|
+
import { m as Promisable, n as IProvider, o as UpdateInfo, t as DownloadingInfo } from "./types-q78spjKB.mjs";
|
|
2
2
|
import { EventEmitter } from "node:events";
|
|
3
3
|
|
|
4
4
|
//#region src/entry/types.d.ts
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { u as isUpdateJSON } from "./
|
|
2
|
-
import { t as LocalDevProvider } from "./local-
|
|
3
|
-
import { a as getPathFromAppNameAsar, f as isDev, i as getEntryVersion, r as getAppVersion, y as restartApp } from "./electron-
|
|
1
|
+
import { u as isUpdateJSON } from "./crypto-DZzMmoz2.mjs";
|
|
2
|
+
import { t as LocalDevProvider } from "./local-C5jw-7o5.mjs";
|
|
3
|
+
import { a as getPathFromAppNameAsar, f as isDev, i as getEntryVersion, r as getAppVersion, y as restartApp } from "./electron-BrIF1urZ.mjs";
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { BrowserWindow, app } from "electron";
|
|
@@ -175,12 +175,12 @@ var Updater = class extends EventEmitter {
|
|
|
175
175
|
return false;
|
|
176
176
|
}
|
|
177
177
|
this.logger?.debug("Validation start");
|
|
178
|
-
if (!await this.provider.
|
|
178
|
+
if (!await this.provider.verifySignature(buffer, _version, _sig, this.CERT)) return emitError("ERR_VALIDATE", "Invalid update asar file");
|
|
179
179
|
this.logger?.debug("Validation end");
|
|
180
180
|
try {
|
|
181
181
|
this.tmpFilePath = `${getPathFromAppNameAsar()}.tmp`;
|
|
182
182
|
this.logger?.debug(`Install to ${this.tmpFilePath}`);
|
|
183
|
-
fs.writeFileSync(this.tmpFilePath, await this.provider.
|
|
183
|
+
fs.writeFileSync(this.tmpFilePath, await this.provider.decompressFile(buffer));
|
|
184
184
|
this.logger?.info(`Download success, version: ${_version}`);
|
|
185
185
|
this.info = void 0;
|
|
186
186
|
this.emit("update-downloaded");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as defaultIsLowerVersion,
|
|
1
|
+
import { c as defaultIsLowerVersion, i as defaultVerifySignature, s as defaultDecompressFile, u as isUpdateJSON } from "./crypto-DZzMmoz2.mjs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import fs from "node:fs/promises";
|
|
4
4
|
//#region src/provider/base.ts
|
|
@@ -11,18 +11,18 @@ var BaseProvider = class {
|
|
|
11
11
|
/**
|
|
12
12
|
* @inheritdoc
|
|
13
13
|
*/
|
|
14
|
-
|
|
14
|
+
verifySignature = defaultVerifySignature;
|
|
15
15
|
/**
|
|
16
16
|
* @inheritdoc
|
|
17
17
|
*/
|
|
18
|
-
|
|
18
|
+
decompressFile = defaultDecompressFile;
|
|
19
19
|
};
|
|
20
20
|
//#endregion
|
|
21
21
|
//#region src/provider/local.ts
|
|
22
22
|
/**
|
|
23
23
|
* Update Provider for local development
|
|
24
24
|
* - download update json from `{baseDir}/{versionPath}`
|
|
25
|
-
* - download update asar from `{baseDir}/{name}-{version}.asar.
|
|
25
|
+
* - download update asar from `{baseDir}/{name}-{version}.asar.br`
|
|
26
26
|
*
|
|
27
27
|
* This provider is useful for testing updates during development without
|
|
28
28
|
* needing to deploy to a remote server.
|
|
@@ -30,7 +30,7 @@ var BaseProvider = class {
|
|
|
30
30
|
*/
|
|
31
31
|
var LocalDevProvider = class extends BaseProvider {
|
|
32
32
|
name = "LocalDevProvider";
|
|
33
|
-
|
|
33
|
+
verifySignature;
|
|
34
34
|
options;
|
|
35
35
|
constructor(options) {
|
|
36
36
|
super();
|
|
@@ -42,7 +42,7 @@ var LocalDevProvider = class extends BaseProvider {
|
|
|
42
42
|
if (resolvedOptions.chunkSize <= 0) throw new Error("localDevUpdate.chunkSize must be greater than 0");
|
|
43
43
|
if (resolvedOptions.chunkDelay < 0) throw new Error("localDevUpdate.chunkDelay must be greater than or equal to 0");
|
|
44
44
|
this.options = resolvedOptions;
|
|
45
|
-
this.
|
|
45
|
+
this.verifySignature = async function verifySignature() {
|
|
46
46
|
return true;
|
|
47
47
|
};
|
|
48
48
|
}
|
|
@@ -52,7 +52,7 @@ var LocalDevProvider = class extends BaseProvider {
|
|
|
52
52
|
async downloadJSON(name, versionPath, signal) {
|
|
53
53
|
signal.throwIfAborted();
|
|
54
54
|
const { beta, version, ...info } = await this.readJSON(versionPath);
|
|
55
|
-
const getURL = (ver) => path.join(this.options.baseDir, `${name}-${ver}.asar.
|
|
55
|
+
const getURL = (ver) => path.join(this.options.baseDir, `${name}-${ver}.asar.br`);
|
|
56
56
|
return {
|
|
57
57
|
...info,
|
|
58
58
|
version,
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_crypto = require("./crypto-BSky88mL.cjs");
|
|
2
2
|
let node_path = require("node:path");
|
|
3
|
-
node_path =
|
|
3
|
+
node_path = require_crypto.__toESM(node_path, 1);
|
|
4
4
|
let node_fs_promises = require("node:fs/promises");
|
|
5
|
-
node_fs_promises =
|
|
5
|
+
node_fs_promises = require_crypto.__toESM(node_fs_promises, 1);
|
|
6
6
|
//#region src/provider/base.ts
|
|
7
7
|
var BaseProvider = class {
|
|
8
8
|
name = "BaseProvider";
|
|
9
9
|
/**
|
|
10
10
|
* @inheritdoc
|
|
11
11
|
*/
|
|
12
|
-
isLowerVersion =
|
|
12
|
+
isLowerVersion = require_crypto.defaultIsLowerVersion;
|
|
13
13
|
/**
|
|
14
14
|
* @inheritdoc
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
verifySignature = require_crypto.defaultVerifySignature;
|
|
17
17
|
/**
|
|
18
18
|
* @inheritdoc
|
|
19
19
|
*/
|
|
20
|
-
|
|
20
|
+
decompressFile = require_crypto.defaultDecompressFile;
|
|
21
21
|
};
|
|
22
22
|
//#endregion
|
|
23
23
|
//#region src/provider/local.ts
|
|
24
24
|
/**
|
|
25
25
|
* Update Provider for local development
|
|
26
26
|
* - download update json from `{baseDir}/{versionPath}`
|
|
27
|
-
* - download update asar from `{baseDir}/{name}-{version}.asar.
|
|
27
|
+
* - download update asar from `{baseDir}/{name}-{version}.asar.br`
|
|
28
28
|
*
|
|
29
29
|
* This provider is useful for testing updates during development without
|
|
30
30
|
* needing to deploy to a remote server.
|
|
@@ -32,7 +32,7 @@ var BaseProvider = class {
|
|
|
32
32
|
*/
|
|
33
33
|
var LocalDevProvider = class extends BaseProvider {
|
|
34
34
|
name = "LocalDevProvider";
|
|
35
|
-
|
|
35
|
+
verifySignature;
|
|
36
36
|
options;
|
|
37
37
|
constructor(options) {
|
|
38
38
|
super();
|
|
@@ -44,7 +44,7 @@ var LocalDevProvider = class extends BaseProvider {
|
|
|
44
44
|
if (resolvedOptions.chunkSize <= 0) throw new Error("localDevUpdate.chunkSize must be greater than 0");
|
|
45
45
|
if (resolvedOptions.chunkDelay < 0) throw new Error("localDevUpdate.chunkDelay must be greater than or equal to 0");
|
|
46
46
|
this.options = resolvedOptions;
|
|
47
|
-
this.
|
|
47
|
+
this.verifySignature = async function verifySignature() {
|
|
48
48
|
return true;
|
|
49
49
|
};
|
|
50
50
|
}
|
|
@@ -54,7 +54,7 @@ var LocalDevProvider = class extends BaseProvider {
|
|
|
54
54
|
async downloadJSON(name, versionPath, signal) {
|
|
55
55
|
signal.throwIfAborted();
|
|
56
56
|
const { beta, version, ...info } = await this.readJSON(versionPath);
|
|
57
|
-
const getURL = (ver) => node_path.default.join(this.options.baseDir, `${name}-${ver}.asar.
|
|
57
|
+
const getURL = (ver) => node_path.default.join(this.options.baseDir, `${name}-${ver}.asar.br`);
|
|
58
58
|
return {
|
|
59
59
|
...info,
|
|
60
60
|
version,
|
|
@@ -78,7 +78,7 @@ var LocalDevProvider = class extends BaseProvider {
|
|
|
78
78
|
const fullPath = node_path.default.join(this.options.baseDir, versionPath);
|
|
79
79
|
const content = await node_fs_promises.default.readFile(fullPath, "utf-8");
|
|
80
80
|
const json = JSON.parse(content);
|
|
81
|
-
if (!
|
|
81
|
+
if (!require_crypto.isUpdateJSON(json)) throw new Error(`Invalid update json: ${content}`);
|
|
82
82
|
return json;
|
|
83
83
|
}
|
|
84
84
|
async emitProgress(fileBuffer, signal, onDownloading) {
|
package/dist/provider.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_local = require("./local-
|
|
3
|
-
const require_download = require("./download-
|
|
2
|
+
const require_local = require("./local-DbXBG1D9.cjs");
|
|
3
|
+
const require_download = require("./download-KySXUyWC.cjs");
|
|
4
4
|
let node_url = require("node:url");
|
|
5
5
|
//#region src/provider/github/base.ts
|
|
6
6
|
var BaseGitHubProvider = class extends require_local.BaseProvider {
|
|
@@ -21,7 +21,7 @@ var BaseGitHubProvider = class extends require_local.BaseProvider {
|
|
|
21
21
|
}
|
|
22
22
|
async downloadJSON(name, versionPath, signal) {
|
|
23
23
|
const { beta, version, ...info } = await require_download.defaultDownloadUpdateJSON(await this.parseURL(await this.getVersionURL(versionPath, signal)), this.getHeaders("json"), signal);
|
|
24
|
-
const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.
|
|
24
|
+
const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.br`);
|
|
25
25
|
return {
|
|
26
26
|
...info,
|
|
27
27
|
version,
|
|
@@ -77,7 +77,7 @@ var GitHubApiProvider = class extends BaseGitHubProvider {
|
|
|
77
77
|
* Update Provider for Github repo
|
|
78
78
|
* - check update from `https://github.com/{user}/{repo}/releases.atom`
|
|
79
79
|
* - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
|
|
80
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
80
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
81
81
|
*
|
|
82
82
|
* you can setup `urlHandler` in options to modify url before request
|
|
83
83
|
* @param options provider options
|
|
@@ -107,7 +107,7 @@ var GitHubAtomProvider = class extends BaseGitHubProvider {
|
|
|
107
107
|
/**
|
|
108
108
|
* Update Provider for Github repo
|
|
109
109
|
* - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
|
|
110
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
110
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
111
111
|
*
|
|
112
112
|
* you can setup `urlHandler` in options to modify url before request
|
|
113
113
|
* @param options provider options
|
package/dist/provider.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as VersionJSON, i as UpdateInfoWithURL, m as Promisable, n as IProvider, r as URLHandler, t as DownloadingInfo } from "./types-
|
|
2
|
-
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-
|
|
1
|
+
import { a as VersionJSON, i as UpdateInfoWithURL, m as Promisable, n as IProvider, r as URLHandler, t as DownloadingInfo } from "./types-q78spjKB.cjs";
|
|
2
|
+
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-BVmLiAvB.cjs";
|
|
3
3
|
import { Buffer as Buffer$1 } from "node:buffer";
|
|
4
4
|
|
|
5
5
|
//#region src/provider/base.d.ts
|
|
@@ -12,11 +12,11 @@ declare abstract class BaseProvider implements IProvider {
|
|
|
12
12
|
/**
|
|
13
13
|
* @inheritdoc
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
verifySignature: IProvider["verifySignature"];
|
|
16
16
|
/**
|
|
17
17
|
* @inheritdoc
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
decompressFile: IProvider["decompressFile"];
|
|
20
20
|
/**
|
|
21
21
|
* @inheritdoc
|
|
22
22
|
*/
|
|
@@ -42,13 +42,7 @@ interface BaseGitHubProviderOptions {
|
|
|
42
42
|
*/
|
|
43
43
|
extraHeaders?: Record<string, string>;
|
|
44
44
|
/**
|
|
45
|
-
* Custom url handler (
|
|
46
|
-
* @example
|
|
47
|
-
* (url) => {
|
|
48
|
-
* url.hostname = 'mirror.ghproxy.com'
|
|
49
|
-
* url.pathname = 'https://github.com' + url.pathname
|
|
50
|
-
* return url
|
|
51
|
-
* }
|
|
45
|
+
* Custom url handler ([some public CDN links](https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#L40)). See {@link URLHandler} for details.
|
|
52
46
|
*/
|
|
53
47
|
urlHandler?: URLHandler;
|
|
54
48
|
}
|
|
@@ -94,7 +88,7 @@ declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOpti
|
|
|
94
88
|
* Update Provider for Github repo
|
|
95
89
|
* - check update from `https://github.com/{user}/{repo}/releases.atom`
|
|
96
90
|
* - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
|
|
97
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
91
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
98
92
|
*
|
|
99
93
|
* you can setup `urlHandler` in options to modify url before request
|
|
100
94
|
* @param options provider options
|
|
@@ -119,7 +113,7 @@ interface GitHubProviderOptions extends BaseGitHubProviderOptions {
|
|
|
119
113
|
/**
|
|
120
114
|
* Update Provider for Github repo
|
|
121
115
|
* - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
|
|
122
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
116
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
123
117
|
*
|
|
124
118
|
* you can setup `urlHandler` in options to modify url before request
|
|
125
119
|
* @param options provider options
|
|
@@ -151,7 +145,7 @@ interface LocalDevProviderOptions {
|
|
|
151
145
|
/**
|
|
152
146
|
* Update Provider for local development
|
|
153
147
|
* - download update json from `{baseDir}/{versionPath}`
|
|
154
|
-
* - download update asar from `{baseDir}/{name}-{version}.asar.
|
|
148
|
+
* - download update asar from `{baseDir}/{name}-{version}.asar.br`
|
|
155
149
|
*
|
|
156
150
|
* This provider is useful for testing updates during development without
|
|
157
151
|
* needing to deploy to a remote server.
|
|
@@ -159,7 +153,7 @@ interface LocalDevProviderOptions {
|
|
|
159
153
|
*/
|
|
160
154
|
declare class LocalDevProvider extends BaseProvider {
|
|
161
155
|
override name: string;
|
|
162
|
-
override
|
|
156
|
+
override verifySignature: IProvider["verifySignature"];
|
|
163
157
|
private readonly options;
|
|
164
158
|
constructor(options: LocalDevProviderOptions);
|
|
165
159
|
/**
|
package/dist/provider.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as VersionJSON, i as UpdateInfoWithURL, m as Promisable, n as IProvider, r as URLHandler, t as DownloadingInfo } from "./types-
|
|
2
|
-
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-
|
|
1
|
+
import { a as VersionJSON, i as UpdateInfoWithURL, m as Promisable, n as IProvider, r as URLHandler, t as DownloadingInfo } from "./types-q78spjKB.mjs";
|
|
2
|
+
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-GONr15zK.mjs";
|
|
3
3
|
import { Buffer as Buffer$1 } from "node:buffer";
|
|
4
4
|
|
|
5
5
|
//#region src/provider/base.d.ts
|
|
@@ -12,11 +12,11 @@ declare abstract class BaseProvider implements IProvider {
|
|
|
12
12
|
/**
|
|
13
13
|
* @inheritdoc
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
verifySignature: IProvider["verifySignature"];
|
|
16
16
|
/**
|
|
17
17
|
* @inheritdoc
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
decompressFile: IProvider["decompressFile"];
|
|
20
20
|
/**
|
|
21
21
|
* @inheritdoc
|
|
22
22
|
*/
|
|
@@ -42,13 +42,7 @@ interface BaseGitHubProviderOptions {
|
|
|
42
42
|
*/
|
|
43
43
|
extraHeaders?: Record<string, string>;
|
|
44
44
|
/**
|
|
45
|
-
* Custom url handler (
|
|
46
|
-
* @example
|
|
47
|
-
* (url) => {
|
|
48
|
-
* url.hostname = 'mirror.ghproxy.com'
|
|
49
|
-
* url.pathname = 'https://github.com' + url.pathname
|
|
50
|
-
* return url
|
|
51
|
-
* }
|
|
45
|
+
* Custom url handler ([some public CDN links](https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#L40)). See {@link URLHandler} for details.
|
|
52
46
|
*/
|
|
53
47
|
urlHandler?: URLHandler;
|
|
54
48
|
}
|
|
@@ -94,7 +88,7 @@ declare class GitHubApiProvider extends BaseGitHubProvider<GitHubApiProviderOpti
|
|
|
94
88
|
* Update Provider for Github repo
|
|
95
89
|
* - check update from `https://github.com/{user}/{repo}/releases.atom`
|
|
96
90
|
* - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
|
|
97
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
91
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
98
92
|
*
|
|
99
93
|
* you can setup `urlHandler` in options to modify url before request
|
|
100
94
|
* @param options provider options
|
|
@@ -119,7 +113,7 @@ interface GitHubProviderOptions extends BaseGitHubProviderOptions {
|
|
|
119
113
|
/**
|
|
120
114
|
* Update Provider for Github repo
|
|
121
115
|
* - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
|
|
122
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
116
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
123
117
|
*
|
|
124
118
|
* you can setup `urlHandler` in options to modify url before request
|
|
125
119
|
* @param options provider options
|
|
@@ -151,7 +145,7 @@ interface LocalDevProviderOptions {
|
|
|
151
145
|
/**
|
|
152
146
|
* Update Provider for local development
|
|
153
147
|
* - download update json from `{baseDir}/{versionPath}`
|
|
154
|
-
* - download update asar from `{baseDir}/{name}-{version}.asar.
|
|
148
|
+
* - download update asar from `{baseDir}/{name}-{version}.asar.br`
|
|
155
149
|
*
|
|
156
150
|
* This provider is useful for testing updates during development without
|
|
157
151
|
* needing to deploy to a remote server.
|
|
@@ -159,7 +153,7 @@ interface LocalDevProviderOptions {
|
|
|
159
153
|
*/
|
|
160
154
|
declare class LocalDevProvider extends BaseProvider {
|
|
161
155
|
override name: string;
|
|
162
|
-
override
|
|
156
|
+
override verifySignature: IProvider["verifySignature"];
|
|
163
157
|
private readonly options;
|
|
164
158
|
constructor(options: LocalDevProviderOptions);
|
|
165
159
|
/**
|
package/dist/provider.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as BaseProvider, t as LocalDevProvider } from "./local-
|
|
2
|
-
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-
|
|
1
|
+
import { n as BaseProvider, t as LocalDevProvider } from "./local-C5jw-7o5.mjs";
|
|
2
|
+
import { a as getHeader, i as downloadUtil, n as defaultDownloadText, o as resolveJson, r as defaultDownloadUpdateJSON, t as defaultDownloadAsar } from "./download-BdX4fZYM.mjs";
|
|
3
3
|
import { URL } from "node:url";
|
|
4
4
|
//#region src/provider/github/base.ts
|
|
5
5
|
var BaseGitHubProvider = class extends BaseProvider {
|
|
@@ -20,7 +20,7 @@ var BaseGitHubProvider = class extends BaseProvider {
|
|
|
20
20
|
}
|
|
21
21
|
async downloadJSON(name, versionPath, signal) {
|
|
22
22
|
const { beta, version, ...info } = await defaultDownloadUpdateJSON(await this.parseURL(await this.getVersionURL(versionPath, signal)), this.getHeaders("json"), signal);
|
|
23
|
-
const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.
|
|
23
|
+
const getURL = (ver) => this.parseURL(`releases/download/v${ver}/${name}-${ver}.asar.br`);
|
|
24
24
|
return {
|
|
25
25
|
...info,
|
|
26
26
|
version,
|
|
@@ -76,7 +76,7 @@ var GitHubApiProvider = class extends BaseGitHubProvider {
|
|
|
76
76
|
* Update Provider for Github repo
|
|
77
77
|
* - check update from `https://github.com/{user}/{repo}/releases.atom`
|
|
78
78
|
* - download update json from `https://github.com/{user}/{repo}/releases/download/v{version}/{versionPath}`
|
|
79
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
79
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
80
80
|
*
|
|
81
81
|
* you can setup `urlHandler` in options to modify url before request
|
|
82
82
|
* @param options provider options
|
|
@@ -106,7 +106,7 @@ var GitHubAtomProvider = class extends BaseGitHubProvider {
|
|
|
106
106
|
/**
|
|
107
107
|
* Update Provider for Github repo
|
|
108
108
|
* - download update json from `https://github.com/{user}/{repo}/raw/HEAD/{versionPath}`
|
|
109
|
-
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.
|
|
109
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.br`
|
|
110
110
|
*
|
|
111
111
|
* you can setup `urlHandler` in options to modify url before request
|
|
112
112
|
* @param options provider options
|