electron-incremental-update 2.4.3 → 3.0.0-beta.3
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 +48 -40
- package/dist/download-BN4uMS4_.d.mts +39 -0
- package/dist/download-DO7iuxEJ.d.cts +39 -0
- package/dist/electron-DH-Uyikp.cjs +321 -0
- package/dist/electron-OKQIYbcw.mjs +181 -0
- package/dist/index.cjs +261 -331
- package/dist/index.d.cts +179 -169
- package/dist/index.d.mts +204 -0
- package/dist/index.mjs +273 -0
- package/dist/provider.cjs +142 -330
- package/dist/provider.d.cts +113 -114
- package/dist/provider.d.mts +133 -0
- package/dist/provider.mjs +152 -0
- package/dist/types-BM9Jfu7q.d.cts +154 -0
- package/dist/types-DASqEPXE.d.mts +154 -0
- package/dist/utils.cjs +43 -381
- package/dist/utils.d.cts +120 -85
- package/dist/utils.d.mts +164 -0
- package/dist/utils.mjs +5 -0
- package/dist/version--eVB2A7n.mjs +72 -0
- package/dist/version-aPrLuz_-.cjs +129 -0
- package/dist/vite.d.mts +521 -0
- package/dist/vite.mjs +1094 -0
- package/dist/zip-BCC7FAQ_.cjs +264 -0
- package/dist/zip-Dwm7s1C9.mjs +185 -0
- package/package.json +66 -64
- package/dist/chunk-AAAM44NW.js +0 -70
- package/dist/chunk-IVHNGRZY.js +0 -122
- package/dist/chunk-PD4EV4MM.js +0 -147
- package/dist/index.d.ts +0 -194
- package/dist/index.js +0 -309
- package/dist/provider.d.ts +0 -134
- package/dist/provider.js +0 -152
- package/dist/types-CU7GyVez.d.cts +0 -151
- package/dist/types-CU7GyVez.d.ts +0 -151
- package/dist/utils.d.ts +0 -129
- package/dist/utils.js +0 -3
- package/dist/vite.d.ts +0 -533
- package/dist/vite.js +0 -945
- package/dist/zip-Blmn2vzE.d.cts +0 -71
- package/dist/zip-CnSv_Njj.d.ts +0 -71
- package/provider.d.ts +0 -1
- package/provider.js +0 -1
- package/utils.d.ts +0 -1
- package/utils.js +0 -1
- package/vite.d.ts +0 -1
- package/vite.js +0 -1
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
const require_version = require('./version-aPrLuz_-.cjs');
|
|
2
|
+
let electron = require("electron");
|
|
3
|
+
let node_crypto = require("node:crypto");
|
|
4
|
+
node_crypto = require_version.__toESM(node_crypto);
|
|
5
|
+
let node_zlib = require("node:zlib");
|
|
6
|
+
node_zlib = require_version.__toESM(node_zlib);
|
|
7
|
+
|
|
8
|
+
//#region src/utils/crypto.ts
|
|
9
|
+
function hashBuffer(data, length) {
|
|
10
|
+
const hash = node_crypto.default.createHash("SHA256").update(data).digest("binary");
|
|
11
|
+
return Buffer.from(hash).subarray(0, length);
|
|
12
|
+
}
|
|
13
|
+
function aesEncrypt(plainText, key, iv) {
|
|
14
|
+
const cipher = node_crypto.default.createCipheriv("aes-256-cbc", key, iv);
|
|
15
|
+
return cipher.update(plainText, "utf8", "base64url") + cipher.final("base64url");
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Default function to generate asar signature, returns generated signature
|
|
19
|
+
* @param buffer file buffer
|
|
20
|
+
* @param privateKey primary key
|
|
21
|
+
* @param cert certificate
|
|
22
|
+
* @param version target version
|
|
23
|
+
*/
|
|
24
|
+
function defaultSignature(buffer, privateKey, cert, version) {
|
|
25
|
+
return aesEncrypt(`${node_crypto.default.createSign("RSA-SHA256").update(buffer).sign(node_crypto.default.createPrivateKey(privateKey), "base64")}%${version}`, hashBuffer(cert, 32), hashBuffer(buffer, 16));
|
|
26
|
+
}
|
|
27
|
+
function aesDecrypt(encryptedText, key, iv) {
|
|
28
|
+
const decipher = node_crypto.default.createDecipheriv("aes-256-cbc", key, iv);
|
|
29
|
+
return decipher.update(encryptedText, "base64url", "utf8") + decipher.final("utf8");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Default function to verify asar signature,
|
|
33
|
+
* if signature is valid, returns the version, otherwise returns `undefined`
|
|
34
|
+
* @param buffer file buffer
|
|
35
|
+
* @param version target version
|
|
36
|
+
* @param signature signature
|
|
37
|
+
* @param cert certificate
|
|
38
|
+
*/
|
|
39
|
+
function defaultVerifySignature(buffer, version, signature, cert) {
|
|
40
|
+
try {
|
|
41
|
+
const [sig, ver] = aesDecrypt(signature, hashBuffer(cert, 32), hashBuffer(buffer, 16)).split("%");
|
|
42
|
+
if (ver !== version) return false;
|
|
43
|
+
return node_crypto.default.createVerify("RSA-SHA256").update(buffer).verify(cert, sig, "base64");
|
|
44
|
+
} catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region src/utils/download.ts
|
|
51
|
+
/**
|
|
52
|
+
* Safe get value from header
|
|
53
|
+
* @param headers response header
|
|
54
|
+
* @param key target header key
|
|
55
|
+
*/
|
|
56
|
+
function getHeader(headers, key) {
|
|
57
|
+
const value = headers[key];
|
|
58
|
+
if (Array.isArray(value)) return value.length === 0 ? null : value[value.length - 1];
|
|
59
|
+
else return value;
|
|
60
|
+
}
|
|
61
|
+
async function downloadUtil(url, headers, onResponse) {
|
|
62
|
+
await electron.app.whenReady();
|
|
63
|
+
return new Promise((resolve, reject) => {
|
|
64
|
+
const request = electron.net.request({
|
|
65
|
+
cache: "no-cache",
|
|
66
|
+
headers,
|
|
67
|
+
method: "GET",
|
|
68
|
+
redirect: "follow",
|
|
69
|
+
url
|
|
70
|
+
});
|
|
71
|
+
request.on("response", (resp) => {
|
|
72
|
+
resp.on("aborted", () => reject(/* @__PURE__ */ new Error("Aborted")));
|
|
73
|
+
resp.on("error", reject);
|
|
74
|
+
onResponse(request, resp, resolve, reject);
|
|
75
|
+
});
|
|
76
|
+
request.on("error", reject);
|
|
77
|
+
request.end();
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* trim length to 5000
|
|
82
|
+
*/
|
|
83
|
+
function trimData(data) {
|
|
84
|
+
return data.trim().slice(0, 5e3).replace(/\s+/g, " ");
|
|
85
|
+
}
|
|
86
|
+
const resolveJson = (data, resolve, reject) => {
|
|
87
|
+
try {
|
|
88
|
+
resolve(JSON.parse(data));
|
|
89
|
+
} catch {
|
|
90
|
+
reject(/* @__PURE__ */ new Error(`Invalid json, "${trimData(data)}"`));
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Default function to download json and parse to UpdateJson
|
|
95
|
+
* @param url target url
|
|
96
|
+
* @param headers extra headers
|
|
97
|
+
* @param signal abort signal
|
|
98
|
+
* @param resolveData on resolve
|
|
99
|
+
*/
|
|
100
|
+
async function defaultDownloadText(url, headers, signal, resolveData) {
|
|
101
|
+
return await downloadUtil(url, headers, (request, resp, resolve, reject) => {
|
|
102
|
+
let data = "";
|
|
103
|
+
resp.on("data", (chunk) => data += chunk);
|
|
104
|
+
resp.on("end", () => resolveData(data, resolve, reject));
|
|
105
|
+
signal.addEventListener("abort", () => {
|
|
106
|
+
request.abort();
|
|
107
|
+
data = null;
|
|
108
|
+
}, { once: true });
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Default function to download json and parse to UpdateJson
|
|
113
|
+
* @param url target url
|
|
114
|
+
* @param headers extra headers
|
|
115
|
+
* @param signal abort signal
|
|
116
|
+
*/
|
|
117
|
+
async function defaultDownloadUpdateJSON(url, headers, signal) {
|
|
118
|
+
return await defaultDownloadText(url, headers, signal, (data, resolve, reject) => {
|
|
119
|
+
try {
|
|
120
|
+
const json = JSON.parse(data);
|
|
121
|
+
if (require_version.isUpdateJSON(json)) resolve(json);
|
|
122
|
+
else throw Error;
|
|
123
|
+
} catch {
|
|
124
|
+
reject(/* @__PURE__ */ new Error(`Invalid update json, "${trimData(data)}"`));
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Default function to download asar buffer,
|
|
130
|
+
* get total size from `Content-Length` header
|
|
131
|
+
* @param url target url
|
|
132
|
+
* @param headers extra headers
|
|
133
|
+
* @param signal abort signal
|
|
134
|
+
* @param onDownloading on downloading callback
|
|
135
|
+
*/
|
|
136
|
+
async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
137
|
+
let transferred = 0;
|
|
138
|
+
let time = Date.now();
|
|
139
|
+
return await downloadUtil(url, headers, (request, resp, resolve) => {
|
|
140
|
+
const total = +getHeader(resp.headers, "content-length") || -1;
|
|
141
|
+
let data = [];
|
|
142
|
+
resp.on("data", (chunk) => {
|
|
143
|
+
const delta = chunk.length;
|
|
144
|
+
transferred += delta;
|
|
145
|
+
const current = Date.now();
|
|
146
|
+
onDownloading?.({
|
|
147
|
+
bps: delta / (current - time),
|
|
148
|
+
delta,
|
|
149
|
+
percent: total > 0 ? +(transferred / total).toFixed(2) * 100 : -1,
|
|
150
|
+
total,
|
|
151
|
+
transferred
|
|
152
|
+
});
|
|
153
|
+
time = current;
|
|
154
|
+
data.push(chunk);
|
|
155
|
+
});
|
|
156
|
+
resp.on("end", () => resolve(Buffer.concat(data)));
|
|
157
|
+
signal.addEventListener("abort", () => {
|
|
158
|
+
request.abort();
|
|
159
|
+
data.length = 0;
|
|
160
|
+
data = null;
|
|
161
|
+
}, { once: true });
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
//#endregion
|
|
166
|
+
//#region src/utils/zip.ts
|
|
167
|
+
/**
|
|
168
|
+
* Default function to compress file using brotli
|
|
169
|
+
* @param buffer uncompressed file buffer
|
|
170
|
+
*/
|
|
171
|
+
async function defaultZipFile(buffer) {
|
|
172
|
+
return new Promise((resolve, reject) => {
|
|
173
|
+
node_zlib.default.brotliCompress(buffer, (err, buffer) => err ? reject(err) : resolve(buffer));
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Default function to decompress file using brotli
|
|
178
|
+
* @param buffer compressed file buffer
|
|
179
|
+
*/
|
|
180
|
+
async function defaultUnzipFile(buffer) {
|
|
181
|
+
return new Promise((resolve, reject) => {
|
|
182
|
+
node_zlib.default.brotliDecompress(buffer, (err, buffer) => err ? reject(err) : resolve(buffer));
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
//#endregion
|
|
187
|
+
Object.defineProperty(exports, 'aesDecrypt', {
|
|
188
|
+
enumerable: true,
|
|
189
|
+
get: function () {
|
|
190
|
+
return aesDecrypt;
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
Object.defineProperty(exports, 'aesEncrypt', {
|
|
194
|
+
enumerable: true,
|
|
195
|
+
get: function () {
|
|
196
|
+
return aesEncrypt;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
Object.defineProperty(exports, 'defaultDownloadAsar', {
|
|
200
|
+
enumerable: true,
|
|
201
|
+
get: function () {
|
|
202
|
+
return defaultDownloadAsar;
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
Object.defineProperty(exports, 'defaultDownloadText', {
|
|
206
|
+
enumerable: true,
|
|
207
|
+
get: function () {
|
|
208
|
+
return defaultDownloadText;
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
Object.defineProperty(exports, 'defaultDownloadUpdateJSON', {
|
|
212
|
+
enumerable: true,
|
|
213
|
+
get: function () {
|
|
214
|
+
return defaultDownloadUpdateJSON;
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
Object.defineProperty(exports, 'defaultSignature', {
|
|
218
|
+
enumerable: true,
|
|
219
|
+
get: function () {
|
|
220
|
+
return defaultSignature;
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
Object.defineProperty(exports, 'defaultUnzipFile', {
|
|
224
|
+
enumerable: true,
|
|
225
|
+
get: function () {
|
|
226
|
+
return defaultUnzipFile;
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
Object.defineProperty(exports, 'defaultVerifySignature', {
|
|
230
|
+
enumerable: true,
|
|
231
|
+
get: function () {
|
|
232
|
+
return defaultVerifySignature;
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
Object.defineProperty(exports, 'defaultZipFile', {
|
|
236
|
+
enumerable: true,
|
|
237
|
+
get: function () {
|
|
238
|
+
return defaultZipFile;
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
Object.defineProperty(exports, 'downloadUtil', {
|
|
242
|
+
enumerable: true,
|
|
243
|
+
get: function () {
|
|
244
|
+
return downloadUtil;
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
Object.defineProperty(exports, 'getHeader', {
|
|
248
|
+
enumerable: true,
|
|
249
|
+
get: function () {
|
|
250
|
+
return getHeader;
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
Object.defineProperty(exports, 'hashBuffer', {
|
|
254
|
+
enumerable: true,
|
|
255
|
+
get: function () {
|
|
256
|
+
return hashBuffer;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
Object.defineProperty(exports, 'resolveJson', {
|
|
260
|
+
enumerable: true,
|
|
261
|
+
get: function () {
|
|
262
|
+
return resolveJson;
|
|
263
|
+
}
|
|
264
|
+
});
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { r as isUpdateJSON } from "./version--eVB2A7n.mjs";
|
|
2
|
+
import { app, net } from "electron";
|
|
3
|
+
import crypto from "node:crypto";
|
|
4
|
+
import zlib from "node:zlib";
|
|
5
|
+
|
|
6
|
+
//#region src/utils/crypto.ts
|
|
7
|
+
function hashBuffer(data, length) {
|
|
8
|
+
const hash = crypto.createHash("SHA256").update(data).digest("binary");
|
|
9
|
+
return Buffer.from(hash).subarray(0, length);
|
|
10
|
+
}
|
|
11
|
+
function aesEncrypt(plainText, key, iv) {
|
|
12
|
+
const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
|
|
13
|
+
return cipher.update(plainText, "utf8", "base64url") + cipher.final("base64url");
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Default function to generate asar signature, returns generated signature
|
|
17
|
+
* @param buffer file buffer
|
|
18
|
+
* @param privateKey primary key
|
|
19
|
+
* @param cert certificate
|
|
20
|
+
* @param version target version
|
|
21
|
+
*/
|
|
22
|
+
function defaultSignature(buffer, privateKey, cert, version) {
|
|
23
|
+
return aesEncrypt(`${crypto.createSign("RSA-SHA256").update(buffer).sign(crypto.createPrivateKey(privateKey), "base64")}%${version}`, hashBuffer(cert, 32), hashBuffer(buffer, 16));
|
|
24
|
+
}
|
|
25
|
+
function aesDecrypt(encryptedText, key, iv) {
|
|
26
|
+
const decipher = crypto.createDecipheriv("aes-256-cbc", key, iv);
|
|
27
|
+
return decipher.update(encryptedText, "base64url", "utf8") + decipher.final("utf8");
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Default function to verify asar signature,
|
|
31
|
+
* if signature is valid, returns the version, otherwise returns `undefined`
|
|
32
|
+
* @param buffer file buffer
|
|
33
|
+
* @param version target version
|
|
34
|
+
* @param signature signature
|
|
35
|
+
* @param cert certificate
|
|
36
|
+
*/
|
|
37
|
+
function defaultVerifySignature(buffer, version, signature, cert) {
|
|
38
|
+
try {
|
|
39
|
+
const [sig, ver] = aesDecrypt(signature, hashBuffer(cert, 32), hashBuffer(buffer, 16)).split("%");
|
|
40
|
+
if (ver !== version) return false;
|
|
41
|
+
return crypto.createVerify("RSA-SHA256").update(buffer).verify(cert, sig, "base64");
|
|
42
|
+
} catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src/utils/download.ts
|
|
49
|
+
/**
|
|
50
|
+
* Safe get value from header
|
|
51
|
+
* @param headers response header
|
|
52
|
+
* @param key target header key
|
|
53
|
+
*/
|
|
54
|
+
function getHeader(headers, key) {
|
|
55
|
+
const value = headers[key];
|
|
56
|
+
if (Array.isArray(value)) return value.length === 0 ? null : value[value.length - 1];
|
|
57
|
+
else return value;
|
|
58
|
+
}
|
|
59
|
+
async function downloadUtil(url, headers, onResponse) {
|
|
60
|
+
await app.whenReady();
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
const request = net.request({
|
|
63
|
+
cache: "no-cache",
|
|
64
|
+
headers,
|
|
65
|
+
method: "GET",
|
|
66
|
+
redirect: "follow",
|
|
67
|
+
url
|
|
68
|
+
});
|
|
69
|
+
request.on("response", (resp) => {
|
|
70
|
+
resp.on("aborted", () => reject(/* @__PURE__ */ new Error("Aborted")));
|
|
71
|
+
resp.on("error", reject);
|
|
72
|
+
onResponse(request, resp, resolve, reject);
|
|
73
|
+
});
|
|
74
|
+
request.on("error", reject);
|
|
75
|
+
request.end();
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* trim length to 5000
|
|
80
|
+
*/
|
|
81
|
+
function trimData(data) {
|
|
82
|
+
return data.trim().slice(0, 5e3).replace(/\s+/g, " ");
|
|
83
|
+
}
|
|
84
|
+
const resolveJson = (data, resolve, reject) => {
|
|
85
|
+
try {
|
|
86
|
+
resolve(JSON.parse(data));
|
|
87
|
+
} catch {
|
|
88
|
+
reject(/* @__PURE__ */ new Error(`Invalid json, "${trimData(data)}"`));
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Default function to download json and parse to UpdateJson
|
|
93
|
+
* @param url target url
|
|
94
|
+
* @param headers extra headers
|
|
95
|
+
* @param signal abort signal
|
|
96
|
+
* @param resolveData on resolve
|
|
97
|
+
*/
|
|
98
|
+
async function defaultDownloadText(url, headers, signal, resolveData) {
|
|
99
|
+
return await downloadUtil(url, headers, (request, resp, resolve, reject) => {
|
|
100
|
+
let data = "";
|
|
101
|
+
resp.on("data", (chunk) => data += chunk);
|
|
102
|
+
resp.on("end", () => resolveData(data, resolve, reject));
|
|
103
|
+
signal.addEventListener("abort", () => {
|
|
104
|
+
request.abort();
|
|
105
|
+
data = null;
|
|
106
|
+
}, { once: true });
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Default function to download json and parse to UpdateJson
|
|
111
|
+
* @param url target url
|
|
112
|
+
* @param headers extra headers
|
|
113
|
+
* @param signal abort signal
|
|
114
|
+
*/
|
|
115
|
+
async function defaultDownloadUpdateJSON(url, headers, signal) {
|
|
116
|
+
return await defaultDownloadText(url, headers, signal, (data, resolve, reject) => {
|
|
117
|
+
try {
|
|
118
|
+
const json = JSON.parse(data);
|
|
119
|
+
if (isUpdateJSON(json)) resolve(json);
|
|
120
|
+
else throw Error;
|
|
121
|
+
} catch {
|
|
122
|
+
reject(/* @__PURE__ */ new Error(`Invalid update json, "${trimData(data)}"`));
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Default function to download asar buffer,
|
|
128
|
+
* get total size from `Content-Length` header
|
|
129
|
+
* @param url target url
|
|
130
|
+
* @param headers extra headers
|
|
131
|
+
* @param signal abort signal
|
|
132
|
+
* @param onDownloading on downloading callback
|
|
133
|
+
*/
|
|
134
|
+
async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
135
|
+
let transferred = 0;
|
|
136
|
+
let time = Date.now();
|
|
137
|
+
return await downloadUtil(url, headers, (request, resp, resolve) => {
|
|
138
|
+
const total = +getHeader(resp.headers, "content-length") || -1;
|
|
139
|
+
let data = [];
|
|
140
|
+
resp.on("data", (chunk) => {
|
|
141
|
+
const delta = chunk.length;
|
|
142
|
+
transferred += delta;
|
|
143
|
+
const current = Date.now();
|
|
144
|
+
onDownloading?.({
|
|
145
|
+
bps: delta / (current - time),
|
|
146
|
+
delta,
|
|
147
|
+
percent: total > 0 ? +(transferred / total).toFixed(2) * 100 : -1,
|
|
148
|
+
total,
|
|
149
|
+
transferred
|
|
150
|
+
});
|
|
151
|
+
time = current;
|
|
152
|
+
data.push(chunk);
|
|
153
|
+
});
|
|
154
|
+
resp.on("end", () => resolve(Buffer.concat(data)));
|
|
155
|
+
signal.addEventListener("abort", () => {
|
|
156
|
+
request.abort();
|
|
157
|
+
data.length = 0;
|
|
158
|
+
data = null;
|
|
159
|
+
}, { once: true });
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
//#endregion
|
|
164
|
+
//#region src/utils/zip.ts
|
|
165
|
+
/**
|
|
166
|
+
* Default function to compress file using brotli
|
|
167
|
+
* @param buffer uncompressed file buffer
|
|
168
|
+
*/
|
|
169
|
+
async function defaultZipFile(buffer) {
|
|
170
|
+
return new Promise((resolve, reject) => {
|
|
171
|
+
zlib.brotliCompress(buffer, (err, buffer) => err ? reject(err) : resolve(buffer));
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Default function to decompress file using brotli
|
|
176
|
+
* @param buffer compressed file buffer
|
|
177
|
+
*/
|
|
178
|
+
async function defaultUnzipFile(buffer) {
|
|
179
|
+
return new Promise((resolve, reject) => {
|
|
180
|
+
zlib.brotliDecompress(buffer, (err, buffer) => err ? reject(err) : resolve(buffer));
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
//#endregion
|
|
185
|
+
export { defaultDownloadUpdateJSON as a, resolveJson as c, defaultSignature as d, defaultVerifySignature as f, defaultDownloadText as i, aesDecrypt as l, defaultZipFile as n, downloadUtil as o, hashBuffer as p, defaultDownloadAsar as r, getHeader as s, defaultUnzipFile as t, aesEncrypt as u };
|
package/package.json
CHANGED
|
@@ -1,39 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "electron-incremental-update",
|
|
3
|
-
"
|
|
4
|
-
"version": "2.4.3",
|
|
3
|
+
"version": "3.0.0-beta.3",
|
|
5
4
|
"description": "Electron incremental update tools with Vite plugin, support bytecode protection",
|
|
6
|
-
"author": "subframe7536",
|
|
7
|
-
"license": "MIT",
|
|
8
|
-
"repository": {
|
|
9
|
-
"type": "git",
|
|
10
|
-
"url": "git+https://github.com/subframe7536/electron-incremental-update.git"
|
|
11
|
-
},
|
|
12
5
|
"keywords": [
|
|
6
|
+
"bytecode",
|
|
13
7
|
"electron",
|
|
14
8
|
"incremental update",
|
|
15
|
-
"updater"
|
|
16
|
-
"bytecode"
|
|
9
|
+
"updater"
|
|
17
10
|
],
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"./vite": {
|
|
24
|
-
"import": "./dist/vite.js"
|
|
25
|
-
},
|
|
26
|
-
"./utils": {
|
|
27
|
-
"import": "./dist/utils.js",
|
|
28
|
-
"require": "./dist/utils.cjs"
|
|
29
|
-
},
|
|
30
|
-
"./provider": {
|
|
31
|
-
"import": "./dist/provider.js",
|
|
32
|
-
"require": "./dist/provider.cjs"
|
|
33
|
-
}
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"author": "subframe7536",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/subframe7536/electron-incremental-update.git"
|
|
34
16
|
},
|
|
35
|
-
"main": "dist/index.cjs",
|
|
36
|
-
"module": "dist/index.js",
|
|
37
17
|
"files": [
|
|
38
18
|
"dist",
|
|
39
19
|
"provider.d.ts",
|
|
@@ -43,54 +23,76 @@
|
|
|
43
23
|
"vite.d.ts",
|
|
44
24
|
"vite.js"
|
|
45
25
|
],
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
|
|
26
|
+
"type": "module",
|
|
27
|
+
"main": "./dist/index.cjs",
|
|
28
|
+
"module": "./dist/index.mjs",
|
|
29
|
+
"types": "./dist/index.d.cts",
|
|
30
|
+
"typesVersions": {
|
|
31
|
+
"*": {
|
|
32
|
+
"provider": [
|
|
33
|
+
"./dist/provider.d.mts"
|
|
34
|
+
],
|
|
35
|
+
"utils": [
|
|
36
|
+
"./dist/utils.d.mts"
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"exports": {
|
|
41
|
+
".": {
|
|
42
|
+
"require": "./dist/index.cjs",
|
|
43
|
+
"import": "./dist/index.mjs"
|
|
44
|
+
},
|
|
45
|
+
"./provider": {
|
|
46
|
+
"require": "./dist/provider.cjs",
|
|
47
|
+
"import": "./dist/provider.mjs"
|
|
48
|
+
},
|
|
49
|
+
"./utils": {
|
|
50
|
+
"require": "./dist/utils.cjs",
|
|
51
|
+
"import": "./dist/utils.mjs"
|
|
52
|
+
},
|
|
53
|
+
"./vite": "./dist/vite.mjs",
|
|
54
|
+
"./package.json": "./package.json"
|
|
53
55
|
},
|
|
54
56
|
"publishConfig": {
|
|
55
57
|
"access": "public",
|
|
56
58
|
"registry": "https://registry.npmjs.org/"
|
|
57
59
|
},
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
+
"scripts": {
|
|
61
|
+
"dev": "tsdown --watch",
|
|
62
|
+
"build": "tsdown",
|
|
63
|
+
"play": "cd ./playground && vite",
|
|
64
|
+
"release": "bun run format && bun run lint && bun run test && bun run build && bumpp --all",
|
|
65
|
+
"test": "bun test",
|
|
66
|
+
"test:dev": "bun test --watch",
|
|
67
|
+
"format": "oxfmt",
|
|
68
|
+
"lint": "oxlint --fix",
|
|
69
|
+
"qa": "oxlint --fix && oxfmt && tsc --noEmit"
|
|
60
70
|
},
|
|
61
71
|
"dependencies": {
|
|
62
|
-
"@babel/core": "^7.28.0",
|
|
63
72
|
"@babel/plugin-transform-arrow-functions": "^7.27.1",
|
|
64
73
|
"@babel/plugin-transform-template-literals": "^7.27.1",
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"selfsigned": "^3.0.1",
|
|
70
|
-
"vite-plugin-electron": "^0.29.0"
|
|
74
|
+
"ci-info": "^4.3.1",
|
|
75
|
+
"local-pkg": "^1.1.2",
|
|
76
|
+
"magic-string": "^0.30.21",
|
|
77
|
+
"selfsigned": "^5.5.0"
|
|
71
78
|
},
|
|
72
79
|
"devDependencies": {
|
|
73
|
-
"@subframe7536/
|
|
80
|
+
"@subframe7536/type-utils": "^0.2.0",
|
|
74
81
|
"@types/babel__core": "^7.20.5",
|
|
75
|
-
"@types/
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"vite": "^6.3.5",
|
|
84
|
-
"vite-plugin-electron": "^0.29.0",
|
|
85
|
-
"vitest": "^3.2.2"
|
|
82
|
+
"@types/bun": "^1.3.6",
|
|
83
|
+
"bumpp": "^10.4.0",
|
|
84
|
+
"electron": "39.2.7",
|
|
85
|
+
"oxfmt": "^0.26.0",
|
|
86
|
+
"oxlint": "^1.41.0",
|
|
87
|
+
"tsdown": "^0.20.0",
|
|
88
|
+
"typescript": "^5.9.3",
|
|
89
|
+
"vite": "^8.0.0-beta.9"
|
|
86
90
|
},
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
"esbuild"
|
|
94
|
-
]
|
|
91
|
+
"peerDependencies": {
|
|
92
|
+
"@babel/core": "^7",
|
|
93
|
+
"@electron/asar": "*"
|
|
94
|
+
},
|
|
95
|
+
"overrides": {
|
|
96
|
+
"vite": "^8.0.0-beta.9"
|
|
95
97
|
}
|
|
96
98
|
}
|
package/dist/chunk-AAAM44NW.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
-
}) : x)(function(x) {
|
|
4
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
5
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
6
|
-
});
|
|
7
|
-
|
|
8
|
-
// src/utils/version.ts
|
|
9
|
-
function parseVersion(version) {
|
|
10
|
-
const match = /^(\d+)\.(\d+)\.(\d+)(?:-([a-z0-9.-]+))?/i.exec(version);
|
|
11
|
-
if (!match) {
|
|
12
|
-
throw new TypeError(`invalid version: ${version}`);
|
|
13
|
-
}
|
|
14
|
-
const [major, minor, patch] = match.slice(1, 4).map(Number);
|
|
15
|
-
const ret = {
|
|
16
|
-
major,
|
|
17
|
-
minor,
|
|
18
|
-
patch,
|
|
19
|
-
stage: "",
|
|
20
|
-
stageVersion: -1
|
|
21
|
-
};
|
|
22
|
-
if (match[4]) {
|
|
23
|
-
let [stage, _v] = match[4].split(".");
|
|
24
|
-
ret.stage = stage;
|
|
25
|
-
ret.stageVersion = Number(_v) || -1;
|
|
26
|
-
}
|
|
27
|
-
if (Number.isNaN(major) || Number.isNaN(minor) || Number.isNaN(patch) || Number.isNaN(ret.stageVersion)) {
|
|
28
|
-
throw new TypeError(`Invalid version: ${version}`);
|
|
29
|
-
}
|
|
30
|
-
return ret;
|
|
31
|
-
}
|
|
32
|
-
function compareStrings(str1, str2) {
|
|
33
|
-
if (str1 === "") {
|
|
34
|
-
return str2 !== "";
|
|
35
|
-
} else if (str2 === "") {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
return str1 < str2;
|
|
39
|
-
}
|
|
40
|
-
function defaultIsLowerVersion(oldVer, newVer) {
|
|
41
|
-
const oldV = parseVersion(oldVer);
|
|
42
|
-
const newV = parseVersion(newVer);
|
|
43
|
-
for (let key of Object.keys(oldV)) {
|
|
44
|
-
if (key === "stage" && compareStrings(oldV[key], newV[key])) {
|
|
45
|
-
return true;
|
|
46
|
-
} else if (oldV[key] !== newV[key]) {
|
|
47
|
-
return oldV[key] < newV[key];
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
var is = (j) => !!(j && j.minimumVersion && j.signature && j.version);
|
|
53
|
-
function isUpdateJSON(json) {
|
|
54
|
-
return is(json) && is(json?.beta);
|
|
55
|
-
}
|
|
56
|
-
function defaultVersionJsonGenerator(existingJson, signature, version, minimumVersion) {
|
|
57
|
-
existingJson.beta = {
|
|
58
|
-
version,
|
|
59
|
-
minimumVersion,
|
|
60
|
-
signature
|
|
61
|
-
};
|
|
62
|
-
if (!parseVersion(version).stage) {
|
|
63
|
-
existingJson.version = version;
|
|
64
|
-
existingJson.minimumVersion = minimumVersion;
|
|
65
|
-
existingJson.signature = signature;
|
|
66
|
-
}
|
|
67
|
-
return existingJson;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export { __require, defaultIsLowerVersion, defaultVersionJsonGenerator, isUpdateJSON, parseVersion };
|