electron-incremental-update 2.2.0 → 2.2.2
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 +39 -21
- package/dist/{bytecode-Z5ZF4YGN.js → bytecode-R2B4KTMV.js} +4 -5
- package/dist/{chunk-I2EHKJU4.js → chunk-LR7LR5WG.js} +48 -5
- package/dist/chunk-TPTWE33H.js +23 -0
- package/dist/{chunk-PUVBFHOK.js → chunk-XGWQQVIZ.js} +12 -12
- package/dist/{esm-5YR6V7VN.js → esm-4S4XCVEW.js} +1 -2
- package/dist/index.cjs +16 -16
- package/dist/index.d.cts +55 -9
- package/dist/index.d.ts +55 -9
- package/dist/index.js +12 -8
- package/dist/provider.cjs +45 -49
- package/dist/provider.d.cts +37 -36
- package/dist/provider.d.ts +37 -36
- package/dist/provider.js +20 -23
- package/dist/{types-DQKdsHc_.d.ts → types-CStrrQPl.d.ts} +5 -42
- package/dist/{types-BPH66pNz.d.cts → types-CWtySwqA.d.cts} +5 -42
- package/dist/utils.cjs +37 -37
- package/dist/utils.d.cts +2 -2
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +1 -1
- package/dist/{version-DcFMG3pT.d.ts → version-Bl_0oO5f.d.cts} +13 -1
- package/dist/{version-DcFMG3pT.d.cts → version-Bl_0oO5f.d.ts} +13 -1
- package/dist/vite.d.ts +94 -32
- package/dist/vite.js +64 -36
- package/dist/{zip-rm9ED9nU.d.cts → zip-DQdr8pFv.d.cts} +1 -1
- package/dist/{zip-rm9ED9nU.d.ts → zip-DQdr8pFv.d.ts} +1 -1
- package/package.json +15 -16
- package/dist/chunk-CTUEQCKL.js +0 -43
- package/dist/chunk-WYQ5DRO7.js +0 -12
package/dist/provider.cjs
CHANGED
|
@@ -1,17 +1,36 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var url = require('url');
|
|
4
|
-
var electron = require('electron');
|
|
5
3
|
var crypto = require('crypto');
|
|
6
4
|
var zlib = require('zlib');
|
|
5
|
+
var electron = require('electron');
|
|
6
|
+
var url = require('url');
|
|
7
7
|
|
|
8
8
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
9
|
|
|
10
|
-
var electron__default = /*#__PURE__*/_interopDefault(electron);
|
|
11
10
|
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
|
|
12
11
|
var zlib__default = /*#__PURE__*/_interopDefault(zlib);
|
|
12
|
+
var electron__default = /*#__PURE__*/_interopDefault(electron);
|
|
13
13
|
|
|
14
|
-
// src/
|
|
14
|
+
// src/utils/crypto.ts
|
|
15
|
+
function hashBuffer(data, length) {
|
|
16
|
+
const hash = crypto__default.default.createHash("SHA256").update(data).digest("binary");
|
|
17
|
+
return Buffer.from(hash).subarray(0, length);
|
|
18
|
+
}
|
|
19
|
+
function aesDecrypt(encryptedText, key, iv) {
|
|
20
|
+
const decipher = crypto__default.default.createDecipheriv("aes-256-cbc", key, iv);
|
|
21
|
+
return decipher.update(encryptedText, "base64url", "utf8") + decipher.final("utf8");
|
|
22
|
+
}
|
|
23
|
+
function defaultVerifySignature(buffer, version, signature, cert) {
|
|
24
|
+
try {
|
|
25
|
+
const [sig, ver] = aesDecrypt(signature, hashBuffer(cert, 32), hashBuffer(buffer, 16)).split("%");
|
|
26
|
+
if (ver !== version) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return crypto__default.default.createVerify("RSA-SHA256").update(buffer).verify(cert, sig, "base64");
|
|
30
|
+
} catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
15
34
|
|
|
16
35
|
// src/utils/version.ts
|
|
17
36
|
function parseVersion(version) {
|
|
@@ -61,8 +80,28 @@ var is = (j) => !!(j && j.minimumVersion && j.signature && j.version);
|
|
|
61
80
|
function isUpdateJSON(json) {
|
|
62
81
|
return is(json) && is(json?.beta);
|
|
63
82
|
}
|
|
83
|
+
async function defaultUnzipFile(buffer) {
|
|
84
|
+
return new Promise((resolve, reject) => {
|
|
85
|
+
zlib__default.default.brotliDecompress(buffer, (err, buffer2) => err ? reject(err) : resolve(buffer2));
|
|
86
|
+
});
|
|
87
|
+
}
|
|
64
88
|
|
|
65
|
-
// src/provider/
|
|
89
|
+
// src/provider/base.ts
|
|
90
|
+
var BaseProvider = class {
|
|
91
|
+
name = "BaseProvider";
|
|
92
|
+
/**
|
|
93
|
+
* @inheritdoc
|
|
94
|
+
*/
|
|
95
|
+
isLowerVersion = defaultIsLowerVersion;
|
|
96
|
+
/**
|
|
97
|
+
* @inheritdoc
|
|
98
|
+
*/
|
|
99
|
+
verifySignaure = defaultVerifySignature;
|
|
100
|
+
/**
|
|
101
|
+
* @inheritdoc
|
|
102
|
+
*/
|
|
103
|
+
unzipFile = defaultUnzipFile;
|
|
104
|
+
};
|
|
66
105
|
function getHeader(headers, key) {
|
|
67
106
|
const value = headers[key];
|
|
68
107
|
if (Array.isArray(value)) {
|
|
@@ -141,7 +180,7 @@ async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
|
141
180
|
transferred += delta;
|
|
142
181
|
const current = Date.now();
|
|
143
182
|
onDownloading?.({
|
|
144
|
-
percent: total ? +(transferred / total).toFixed(2) * 100 : -1,
|
|
183
|
+
percent: total > 0 ? +(transferred / total).toFixed(2) * 100 : -1,
|
|
145
184
|
total,
|
|
146
185
|
transferred,
|
|
147
186
|
delta,
|
|
@@ -154,49 +193,6 @@ async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
|
154
193
|
}
|
|
155
194
|
);
|
|
156
195
|
}
|
|
157
|
-
function hashBuffer(data, length) {
|
|
158
|
-
const hash = crypto__default.default.createHash("SHA256").update(data).digest("binary");
|
|
159
|
-
return Buffer.from(hash).subarray(0, length);
|
|
160
|
-
}
|
|
161
|
-
function aesDecrypt(encryptedText, key, iv) {
|
|
162
|
-
const decipher = crypto__default.default.createDecipheriv("aes-256-cbc", key, iv);
|
|
163
|
-
return decipher.update(encryptedText, "base64url", "utf8") + decipher.final("utf8");
|
|
164
|
-
}
|
|
165
|
-
function defaultVerifySignature(buffer, version, signature, cert) {
|
|
166
|
-
try {
|
|
167
|
-
const [sig, ver] = aesDecrypt(signature, hashBuffer(cert, 32), hashBuffer(buffer, 16)).split("%");
|
|
168
|
-
if (ver !== version) {
|
|
169
|
-
return false;
|
|
170
|
-
}
|
|
171
|
-
return crypto__default.default.createVerify("RSA-SHA256").update(buffer).verify(cert, sig, "base64");
|
|
172
|
-
} catch {
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
async function defaultUnzipFile(buffer) {
|
|
177
|
-
return new Promise((resolve, reject) => {
|
|
178
|
-
zlib__default.default.brotliDecompress(buffer, (err, buffer2) => err ? reject(err) : resolve(buffer2));
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// src/provider/base.ts
|
|
183
|
-
var BaseProvider = class {
|
|
184
|
-
name = "BaseProvider";
|
|
185
|
-
/**
|
|
186
|
-
* @inheritdoc
|
|
187
|
-
*/
|
|
188
|
-
isLowerVersion = defaultIsLowerVersion;
|
|
189
|
-
/**
|
|
190
|
-
* @inheritdoc
|
|
191
|
-
*/
|
|
192
|
-
verifySignaure = defaultVerifySignature;
|
|
193
|
-
/**
|
|
194
|
-
* @inheritdoc
|
|
195
|
-
*/
|
|
196
|
-
unzipFile = defaultUnzipFile;
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
// src/provider/github.ts
|
|
200
196
|
var GitHubProvider = class extends BaseProvider {
|
|
201
197
|
name = "GithubProvider";
|
|
202
198
|
options;
|
package/dist/provider.d.cts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { I as IProvider,
|
|
2
|
-
import {
|
|
3
|
-
import { d as defaultIsLowerVersion,
|
|
1
|
+
import { I as IProvider, U as UpdateJSONWithURL, a as UpdateInfoWithURL, D as DownloadingInfo, O as OnDownloading, b as URLHandler } from './types-CWtySwqA.cjs';
|
|
2
|
+
import { c as defaultVerifySignature, f as defaultUnzipFile } from './zip-DQdr8pFv.cjs';
|
|
3
|
+
import { d as defaultIsLowerVersion, a as UpdateJSON } from './version-Bl_0oO5f.cjs';
|
|
4
4
|
import { Arrayable } from '@subframe7536/type-utils';
|
|
5
|
+
import 'node:url';
|
|
5
6
|
|
|
6
7
|
declare abstract class BaseProvider implements IProvider {
|
|
7
8
|
name: string;
|
|
@@ -27,6 +28,38 @@ declare abstract class BaseProvider implements IProvider {
|
|
|
27
28
|
abstract downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
28
29
|
}
|
|
29
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Safe get value from header
|
|
33
|
+
* @param headers response header
|
|
34
|
+
* @param key target header key
|
|
35
|
+
*/
|
|
36
|
+
declare function getHeader(headers: Record<string, Arrayable<string>>, key: any): any;
|
|
37
|
+
type ResolveDataFn = (data: string, resolve: (data: any) => void, reject: (e: any) => void) => void;
|
|
38
|
+
/**
|
|
39
|
+
* Default function to download json and parse to UpdateJson
|
|
40
|
+
* @param url target url
|
|
41
|
+
* @param headers extra headers
|
|
42
|
+
* @param signal abort signal
|
|
43
|
+
* @param resolveData on resolve
|
|
44
|
+
*/
|
|
45
|
+
declare function defaultDownloadJSON<T>(url: string, headers: Record<string, any>, signal: AbortSignal, resolveData?: ResolveDataFn): Promise<T>;
|
|
46
|
+
/**
|
|
47
|
+
* Default function to download json and parse to UpdateJson
|
|
48
|
+
* @param url target url
|
|
49
|
+
* @param headers extra headers
|
|
50
|
+
* @param signal abort signal
|
|
51
|
+
*/
|
|
52
|
+
declare function defaultDownloadUpdateJSON(url: string, headers: Record<string, any>, signal: AbortSignal): Promise<UpdateJSON>;
|
|
53
|
+
/**
|
|
54
|
+
* Default function to download asar buffer,
|
|
55
|
+
* get total size from `Content-Length` header
|
|
56
|
+
* @param url target url
|
|
57
|
+
* @param headers extra headers
|
|
58
|
+
* @param signal abort signal
|
|
59
|
+
* @param onDownloading on downloading callback
|
|
60
|
+
*/
|
|
61
|
+
declare function defaultDownloadAsar(url: string, headers: Record<string, any>, signal: AbortSignal, onDownloading?: OnDownloading): Promise<Buffer>;
|
|
62
|
+
|
|
30
63
|
interface GitHubProviderOptions {
|
|
31
64
|
/**
|
|
32
65
|
* Github user name
|
|
@@ -131,36 +164,4 @@ declare class GitHubApiProvider extends BaseProvider {
|
|
|
131
164
|
downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
132
165
|
}
|
|
133
166
|
|
|
134
|
-
|
|
135
|
-
* Safe get value from header
|
|
136
|
-
* @param headers response header
|
|
137
|
-
* @param key target header key
|
|
138
|
-
*/
|
|
139
|
-
declare function getHeader(headers: Record<string, Arrayable<string>>, key: any): any;
|
|
140
|
-
type ResolveDataFn = (data: string, resolve: (data: any) => void, reject: (e: any) => void) => void;
|
|
141
|
-
/**
|
|
142
|
-
* Default function to download json and parse to UpdateJson
|
|
143
|
-
* @param url target url
|
|
144
|
-
* @param headers extra headers
|
|
145
|
-
* @param signal abort signal
|
|
146
|
-
* @param resolveData on resolve
|
|
147
|
-
*/
|
|
148
|
-
declare function defaultDownloadJSON<T>(url: string, headers: Record<string, any>, signal: AbortSignal, resolveData?: ResolveDataFn): Promise<T>;
|
|
149
|
-
/**
|
|
150
|
-
* Default function to download json and parse to UpdateJson
|
|
151
|
-
* @param url target url
|
|
152
|
-
* @param headers extra headers
|
|
153
|
-
* @param signal abort signal
|
|
154
|
-
*/
|
|
155
|
-
declare function defaultDownloadUpdateJSON(url: string, headers: Record<string, any>, signal: AbortSignal): Promise<UpdateJSON>;
|
|
156
|
-
/**
|
|
157
|
-
* Default function to download asar buffer,
|
|
158
|
-
* get total size from `Content-Length` header
|
|
159
|
-
* @param url target url
|
|
160
|
-
* @param headers extra headers
|
|
161
|
-
* @param signal abort signal
|
|
162
|
-
* @param onDownloading on downloading callback
|
|
163
|
-
*/
|
|
164
|
-
declare function defaultDownloadAsar(url: string, headers: Record<string, any>, signal: AbortSignal, onDownloading?: OnDownloading): Promise<Buffer>;
|
|
165
|
-
|
|
166
|
-
export { BaseProvider, DownloadingInfo, GitHubApiProvider, type GitHubApiProviderOptions, GitHubProvider, type GitHubProviderOptions, IProvider, OnDownloading, URLHandler, UpdateJSONWithURL, defaultDownloadAsar, defaultDownloadJSON, defaultDownloadUpdateJSON, getHeader };
|
|
167
|
+
export { BaseProvider, DownloadingInfo, GitHubApiProvider, type GitHubApiProviderOptions, GitHubProvider, type GitHubProviderOptions, IProvider, OnDownloading, URLHandler, UpdateInfoWithURL, UpdateJSONWithURL, defaultDownloadAsar, defaultDownloadJSON, defaultDownloadUpdateJSON, getHeader };
|
package/dist/provider.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { I as IProvider,
|
|
2
|
-
import {
|
|
3
|
-
import { d as defaultIsLowerVersion,
|
|
1
|
+
import { I as IProvider, U as UpdateJSONWithURL, a as UpdateInfoWithURL, D as DownloadingInfo, O as OnDownloading, b as URLHandler } from './types-CStrrQPl.js';
|
|
2
|
+
import { c as defaultVerifySignature, f as defaultUnzipFile } from './zip-DQdr8pFv.js';
|
|
3
|
+
import { d as defaultIsLowerVersion, a as UpdateJSON } from './version-Bl_0oO5f.js';
|
|
4
4
|
import { Arrayable } from '@subframe7536/type-utils';
|
|
5
|
+
import 'node:url';
|
|
5
6
|
|
|
6
7
|
declare abstract class BaseProvider implements IProvider {
|
|
7
8
|
name: string;
|
|
@@ -27,6 +28,38 @@ declare abstract class BaseProvider implements IProvider {
|
|
|
27
28
|
abstract downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
28
29
|
}
|
|
29
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Safe get value from header
|
|
33
|
+
* @param headers response header
|
|
34
|
+
* @param key target header key
|
|
35
|
+
*/
|
|
36
|
+
declare function getHeader(headers: Record<string, Arrayable<string>>, key: any): any;
|
|
37
|
+
type ResolveDataFn = (data: string, resolve: (data: any) => void, reject: (e: any) => void) => void;
|
|
38
|
+
/**
|
|
39
|
+
* Default function to download json and parse to UpdateJson
|
|
40
|
+
* @param url target url
|
|
41
|
+
* @param headers extra headers
|
|
42
|
+
* @param signal abort signal
|
|
43
|
+
* @param resolveData on resolve
|
|
44
|
+
*/
|
|
45
|
+
declare function defaultDownloadJSON<T>(url: string, headers: Record<string, any>, signal: AbortSignal, resolveData?: ResolveDataFn): Promise<T>;
|
|
46
|
+
/**
|
|
47
|
+
* Default function to download json and parse to UpdateJson
|
|
48
|
+
* @param url target url
|
|
49
|
+
* @param headers extra headers
|
|
50
|
+
* @param signal abort signal
|
|
51
|
+
*/
|
|
52
|
+
declare function defaultDownloadUpdateJSON(url: string, headers: Record<string, any>, signal: AbortSignal): Promise<UpdateJSON>;
|
|
53
|
+
/**
|
|
54
|
+
* Default function to download asar buffer,
|
|
55
|
+
* get total size from `Content-Length` header
|
|
56
|
+
* @param url target url
|
|
57
|
+
* @param headers extra headers
|
|
58
|
+
* @param signal abort signal
|
|
59
|
+
* @param onDownloading on downloading callback
|
|
60
|
+
*/
|
|
61
|
+
declare function defaultDownloadAsar(url: string, headers: Record<string, any>, signal: AbortSignal, onDownloading?: OnDownloading): Promise<Buffer>;
|
|
62
|
+
|
|
30
63
|
interface GitHubProviderOptions {
|
|
31
64
|
/**
|
|
32
65
|
* Github user name
|
|
@@ -131,36 +164,4 @@ declare class GitHubApiProvider extends BaseProvider {
|
|
|
131
164
|
downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
132
165
|
}
|
|
133
166
|
|
|
134
|
-
|
|
135
|
-
* Safe get value from header
|
|
136
|
-
* @param headers response header
|
|
137
|
-
* @param key target header key
|
|
138
|
-
*/
|
|
139
|
-
declare function getHeader(headers: Record<string, Arrayable<string>>, key: any): any;
|
|
140
|
-
type ResolveDataFn = (data: string, resolve: (data: any) => void, reject: (e: any) => void) => void;
|
|
141
|
-
/**
|
|
142
|
-
* Default function to download json and parse to UpdateJson
|
|
143
|
-
* @param url target url
|
|
144
|
-
* @param headers extra headers
|
|
145
|
-
* @param signal abort signal
|
|
146
|
-
* @param resolveData on resolve
|
|
147
|
-
*/
|
|
148
|
-
declare function defaultDownloadJSON<T>(url: string, headers: Record<string, any>, signal: AbortSignal, resolveData?: ResolveDataFn): Promise<T>;
|
|
149
|
-
/**
|
|
150
|
-
* Default function to download json and parse to UpdateJson
|
|
151
|
-
* @param url target url
|
|
152
|
-
* @param headers extra headers
|
|
153
|
-
* @param signal abort signal
|
|
154
|
-
*/
|
|
155
|
-
declare function defaultDownloadUpdateJSON(url: string, headers: Record<string, any>, signal: AbortSignal): Promise<UpdateJSON>;
|
|
156
|
-
/**
|
|
157
|
-
* Default function to download asar buffer,
|
|
158
|
-
* get total size from `Content-Length` header
|
|
159
|
-
* @param url target url
|
|
160
|
-
* @param headers extra headers
|
|
161
|
-
* @param signal abort signal
|
|
162
|
-
* @param onDownloading on downloading callback
|
|
163
|
-
*/
|
|
164
|
-
declare function defaultDownloadAsar(url: string, headers: Record<string, any>, signal: AbortSignal, onDownloading?: OnDownloading): Promise<Buffer>;
|
|
165
|
-
|
|
166
|
-
export { BaseProvider, DownloadingInfo, GitHubApiProvider, type GitHubApiProviderOptions, GitHubProvider, type GitHubProviderOptions, IProvider, OnDownloading, URLHandler, UpdateJSONWithURL, defaultDownloadAsar, defaultDownloadJSON, defaultDownloadUpdateJSON, getHeader };
|
|
167
|
+
export { BaseProvider, DownloadingInfo, GitHubApiProvider, type GitHubApiProviderOptions, GitHubProvider, type GitHubProviderOptions, IProvider, OnDownloading, URLHandler, UpdateInfoWithURL, UpdateJSONWithURL, defaultDownloadAsar, defaultDownloadJSON, defaultDownloadUpdateJSON, getHeader };
|
package/dist/provider.js
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
|
-
import { defaultVerifySignature, defaultUnzipFile } from './chunk-
|
|
2
|
-
import {
|
|
3
|
-
import { URL } from 'node:url';
|
|
1
|
+
import { defaultVerifySignature, defaultUnzipFile } from './chunk-XGWQQVIZ.js';
|
|
2
|
+
import { defaultIsLowerVersion, isUpdateJSON } from './chunk-AAAM44NW.js';
|
|
4
3
|
import electron from 'electron';
|
|
4
|
+
import { URL } from 'node:url';
|
|
5
5
|
|
|
6
|
+
// src/provider/base.ts
|
|
7
|
+
var BaseProvider = class {
|
|
8
|
+
name = "BaseProvider";
|
|
9
|
+
/**
|
|
10
|
+
* @inheritdoc
|
|
11
|
+
*/
|
|
12
|
+
isLowerVersion = defaultIsLowerVersion;
|
|
13
|
+
/**
|
|
14
|
+
* @inheritdoc
|
|
15
|
+
*/
|
|
16
|
+
verifySignaure = defaultVerifySignature;
|
|
17
|
+
/**
|
|
18
|
+
* @inheritdoc
|
|
19
|
+
*/
|
|
20
|
+
unzipFile = defaultUnzipFile;
|
|
21
|
+
};
|
|
6
22
|
function getHeader(headers, key) {
|
|
7
23
|
const value = headers[key];
|
|
8
24
|
if (Array.isArray(value)) {
|
|
@@ -81,7 +97,7 @@ async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
|
81
97
|
transferred += delta;
|
|
82
98
|
const current = Date.now();
|
|
83
99
|
onDownloading?.({
|
|
84
|
-
percent: total ? +(transferred / total).toFixed(2) * 100 : -1,
|
|
100
|
+
percent: total > 0 ? +(transferred / total).toFixed(2) * 100 : -1,
|
|
85
101
|
total,
|
|
86
102
|
transferred,
|
|
87
103
|
delta,
|
|
@@ -94,25 +110,6 @@ async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
|
94
110
|
}
|
|
95
111
|
);
|
|
96
112
|
}
|
|
97
|
-
|
|
98
|
-
// src/provider/base.ts
|
|
99
|
-
var BaseProvider = class {
|
|
100
|
-
name = "BaseProvider";
|
|
101
|
-
/**
|
|
102
|
-
* @inheritdoc
|
|
103
|
-
*/
|
|
104
|
-
isLowerVersion = defaultIsLowerVersion;
|
|
105
|
-
/**
|
|
106
|
-
* @inheritdoc
|
|
107
|
-
*/
|
|
108
|
-
verifySignaure = defaultVerifySignature;
|
|
109
|
-
/**
|
|
110
|
-
* @inheritdoc
|
|
111
|
-
*/
|
|
112
|
-
unzipFile = defaultUnzipFile;
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
// src/provider/github.ts
|
|
116
113
|
var GitHubProvider = class extends BaseProvider {
|
|
117
114
|
name = "GithubProvider";
|
|
118
115
|
options;
|
|
@@ -1,47 +1,10 @@
|
|
|
1
1
|
import { Promisable } from '@subframe7536/type-utils';
|
|
2
|
-
import {
|
|
2
|
+
import { URL } from 'node:url';
|
|
3
|
+
import { U as UpdateInfo } from './version-Bl_0oO5f.js';
|
|
3
4
|
|
|
4
|
-
type UpdaterErrorCode = 'ERR_DOWNLOAD' | 'ERR_VALIDATE' | 'ERR_PARAM' | 'ERR_NETWORK';
|
|
5
|
-
type UpdaterUnavailableCode = 'UNAVAILABLE_ERROR' | 'UNAVAILABLE_DEV' | 'UNAVAILABLE_VERSION';
|
|
6
|
-
declare class UpdaterError extends Error {
|
|
7
|
-
code: UpdaterErrorCode;
|
|
8
|
-
constructor(code: UpdaterErrorCode, info: string);
|
|
9
|
-
}
|
|
10
|
-
interface Logger {
|
|
11
|
-
info: (msg: string) => void;
|
|
12
|
-
debug: (msg: string) => void;
|
|
13
|
-
warn: (msg: string) => void;
|
|
14
|
-
error: (msg: string, e?: unknown) => void;
|
|
15
|
-
}
|
|
16
|
-
interface UpdaterOption {
|
|
17
|
-
/**
|
|
18
|
-
* Update provider
|
|
19
|
-
*
|
|
20
|
-
* If you will not setup `UpdateJSON` or `Buffer` in params when checking update or download, this option is **required**
|
|
21
|
-
*/
|
|
22
|
-
provider?: IProvider;
|
|
23
|
-
/**
|
|
24
|
-
* Certifaction key of signature, which will be auto generated by plugin,
|
|
25
|
-
* generate by `selfsigned` if not set
|
|
26
|
-
*/
|
|
27
|
-
SIGNATURE_CERT?: string;
|
|
28
|
-
/**
|
|
29
|
-
* Whether to receive beta update
|
|
30
|
-
*/
|
|
31
|
-
receiveBeta?: boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Updater logger
|
|
34
|
-
*/
|
|
35
|
-
logger?: Logger;
|
|
36
|
-
}
|
|
37
5
|
type UpdateInfoWithURL = UpdateInfo & {
|
|
38
6
|
url: string;
|
|
39
7
|
};
|
|
40
|
-
type UpdateInfoWithExtraVersion = UpdateInfo & {
|
|
41
|
-
appVersion: string;
|
|
42
|
-
entryVersion: string;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
8
|
type OnDownloading = (progress: DownloadingInfo) => void;
|
|
46
9
|
interface DownloadingInfo {
|
|
47
10
|
/**
|
|
@@ -72,7 +35,7 @@ interface DownloadingInfo {
|
|
|
72
35
|
type UpdateJSONWithURL = UpdateInfoWithURL & {
|
|
73
36
|
beta: UpdateInfoWithURL;
|
|
74
37
|
};
|
|
75
|
-
interface IProvider {
|
|
38
|
+
interface IProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> {
|
|
76
39
|
/**
|
|
77
40
|
* Provider name
|
|
78
41
|
*/
|
|
@@ -83,7 +46,7 @@ interface IProvider {
|
|
|
83
46
|
* @param versionPath normalized version path in project
|
|
84
47
|
* @param signal abort signal
|
|
85
48
|
*/
|
|
86
|
-
downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<
|
|
49
|
+
downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<T>;
|
|
87
50
|
/**
|
|
88
51
|
* Download update asar
|
|
89
52
|
* @param updateInfo existing update info
|
|
@@ -114,4 +77,4 @@ interface IProvider {
|
|
|
114
77
|
}
|
|
115
78
|
type URLHandler = (url: URL) => Promisable<URL | string | undefined | null>;
|
|
116
79
|
|
|
117
|
-
export {
|
|
80
|
+
export type { DownloadingInfo as D, IProvider as I, OnDownloading as O, UpdateJSONWithURL as U, UpdateInfoWithURL as a, URLHandler as b };
|
|
@@ -1,47 +1,10 @@
|
|
|
1
1
|
import { Promisable } from '@subframe7536/type-utils';
|
|
2
|
-
import {
|
|
2
|
+
import { URL } from 'node:url';
|
|
3
|
+
import { U as UpdateInfo } from './version-Bl_0oO5f.cjs';
|
|
3
4
|
|
|
4
|
-
type UpdaterErrorCode = 'ERR_DOWNLOAD' | 'ERR_VALIDATE' | 'ERR_PARAM' | 'ERR_NETWORK';
|
|
5
|
-
type UpdaterUnavailableCode = 'UNAVAILABLE_ERROR' | 'UNAVAILABLE_DEV' | 'UNAVAILABLE_VERSION';
|
|
6
|
-
declare class UpdaterError extends Error {
|
|
7
|
-
code: UpdaterErrorCode;
|
|
8
|
-
constructor(code: UpdaterErrorCode, info: string);
|
|
9
|
-
}
|
|
10
|
-
interface Logger {
|
|
11
|
-
info: (msg: string) => void;
|
|
12
|
-
debug: (msg: string) => void;
|
|
13
|
-
warn: (msg: string) => void;
|
|
14
|
-
error: (msg: string, e?: unknown) => void;
|
|
15
|
-
}
|
|
16
|
-
interface UpdaterOption {
|
|
17
|
-
/**
|
|
18
|
-
* Update provider
|
|
19
|
-
*
|
|
20
|
-
* If you will not setup `UpdateJSON` or `Buffer` in params when checking update or download, this option is **required**
|
|
21
|
-
*/
|
|
22
|
-
provider?: IProvider;
|
|
23
|
-
/**
|
|
24
|
-
* Certifaction key of signature, which will be auto generated by plugin,
|
|
25
|
-
* generate by `selfsigned` if not set
|
|
26
|
-
*/
|
|
27
|
-
SIGNATURE_CERT?: string;
|
|
28
|
-
/**
|
|
29
|
-
* Whether to receive beta update
|
|
30
|
-
*/
|
|
31
|
-
receiveBeta?: boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Updater logger
|
|
34
|
-
*/
|
|
35
|
-
logger?: Logger;
|
|
36
|
-
}
|
|
37
5
|
type UpdateInfoWithURL = UpdateInfo & {
|
|
38
6
|
url: string;
|
|
39
7
|
};
|
|
40
|
-
type UpdateInfoWithExtraVersion = UpdateInfo & {
|
|
41
|
-
appVersion: string;
|
|
42
|
-
entryVersion: string;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
8
|
type OnDownloading = (progress: DownloadingInfo) => void;
|
|
46
9
|
interface DownloadingInfo {
|
|
47
10
|
/**
|
|
@@ -72,7 +35,7 @@ interface DownloadingInfo {
|
|
|
72
35
|
type UpdateJSONWithURL = UpdateInfoWithURL & {
|
|
73
36
|
beta: UpdateInfoWithURL;
|
|
74
37
|
};
|
|
75
|
-
interface IProvider {
|
|
38
|
+
interface IProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> {
|
|
76
39
|
/**
|
|
77
40
|
* Provider name
|
|
78
41
|
*/
|
|
@@ -83,7 +46,7 @@ interface IProvider {
|
|
|
83
46
|
* @param versionPath normalized version path in project
|
|
84
47
|
* @param signal abort signal
|
|
85
48
|
*/
|
|
86
|
-
downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<
|
|
49
|
+
downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<T>;
|
|
87
50
|
/**
|
|
88
51
|
* Download update asar
|
|
89
52
|
* @param updateInfo existing update info
|
|
@@ -114,4 +77,4 @@ interface IProvider {
|
|
|
114
77
|
}
|
|
115
78
|
type URLHandler = (url: URL) => Promisable<URL | string | undefined | null>;
|
|
116
79
|
|
|
117
|
-
export {
|
|
80
|
+
export type { DownloadingInfo as D, IProvider as I, OnDownloading as O, UpdateJSONWithURL as U, UpdateInfoWithURL as a, URLHandler as b };
|
package/dist/utils.cjs
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var crypto = require('crypto');
|
|
3
4
|
var fs = require('fs');
|
|
4
5
|
var path = require('path');
|
|
5
6
|
var electron = require('electron');
|
|
6
7
|
var zlib = require('zlib');
|
|
7
|
-
var crypto = require('crypto');
|
|
8
8
|
|
|
9
9
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
10
|
|
|
11
|
+
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
|
|
11
12
|
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
12
13
|
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
13
14
|
var electron__default = /*#__PURE__*/_interopDefault(electron);
|
|
14
15
|
var zlib__default = /*#__PURE__*/_interopDefault(zlib);
|
|
15
|
-
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
|
|
16
16
|
|
|
17
17
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
18
18
|
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
@@ -20,6 +20,33 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
20
20
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
21
21
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
22
22
|
});
|
|
23
|
+
function hashBuffer(data, length) {
|
|
24
|
+
const hash = crypto__default.default.createHash("SHA256").update(data).digest("binary");
|
|
25
|
+
return Buffer.from(hash).subarray(0, length);
|
|
26
|
+
}
|
|
27
|
+
function aesEncrypt(plainText, key, iv) {
|
|
28
|
+
const cipher = crypto__default.default.createCipheriv("aes-256-cbc", key, iv);
|
|
29
|
+
return cipher.update(plainText, "utf8", "base64url") + cipher.final("base64url");
|
|
30
|
+
}
|
|
31
|
+
function defaultSignature(buffer, privateKey, cert, version) {
|
|
32
|
+
const sig = crypto__default.default.createSign("RSA-SHA256").update(buffer).sign(crypto__default.default.createPrivateKey(privateKey), "base64");
|
|
33
|
+
return aesEncrypt(`${sig}%${version}`, hashBuffer(cert, 32), hashBuffer(buffer, 16));
|
|
34
|
+
}
|
|
35
|
+
function aesDecrypt(encryptedText, key, iv) {
|
|
36
|
+
const decipher = crypto__default.default.createDecipheriv("aes-256-cbc", key, iv);
|
|
37
|
+
return decipher.update(encryptedText, "base64url", "utf8") + decipher.final("utf8");
|
|
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) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return crypto__default.default.createVerify("RSA-SHA256").update(buffer).verify(cert, sig, "base64");
|
|
46
|
+
} catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
23
50
|
var isDev = __EIU_IS_DEV__;
|
|
24
51
|
var isWin = process.platform === "win32";
|
|
25
52
|
var isMac = process.platform === "darwin";
|
|
@@ -113,16 +140,6 @@ function handleUnexpectedErrors(callback) {
|
|
|
113
140
|
process.on("uncaughtException", callback);
|
|
114
141
|
process.on("unhandledRejection", callback);
|
|
115
142
|
}
|
|
116
|
-
async function defaultZipFile(buffer) {
|
|
117
|
-
return new Promise((resolve, reject) => {
|
|
118
|
-
zlib__default.default.brotliCompress(buffer, (err, buffer2) => err ? reject(err) : resolve(buffer2));
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
async function defaultUnzipFile(buffer) {
|
|
122
|
-
return new Promise((resolve, reject) => {
|
|
123
|
-
zlib__default.default.brotliDecompress(buffer, (err, buffer2) => err ? reject(err) : resolve(buffer2));
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
143
|
|
|
127
144
|
// src/utils/version.ts
|
|
128
145
|
function parseVersion(version) {
|
|
@@ -185,32 +202,15 @@ function defaultVersionJsonGenerator(existingJson, signature, version, minimumVe
|
|
|
185
202
|
}
|
|
186
203
|
return existingJson;
|
|
187
204
|
}
|
|
188
|
-
function
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
192
|
-
function aesEncrypt(plainText, key, iv) {
|
|
193
|
-
const cipher = crypto__default.default.createCipheriv("aes-256-cbc", key, iv);
|
|
194
|
-
return cipher.update(plainText, "utf8", "base64url") + cipher.final("base64url");
|
|
195
|
-
}
|
|
196
|
-
function defaultSignature(buffer, privateKey, cert, version) {
|
|
197
|
-
const sig = crypto__default.default.createSign("RSA-SHA256").update(buffer).sign(crypto__default.default.createPrivateKey(privateKey), "base64");
|
|
198
|
-
return aesEncrypt(`${sig}%${version}`, hashBuffer(cert, 32), hashBuffer(buffer, 16));
|
|
199
|
-
}
|
|
200
|
-
function aesDecrypt(encryptedText, key, iv) {
|
|
201
|
-
const decipher = crypto__default.default.createDecipheriv("aes-256-cbc", key, iv);
|
|
202
|
-
return decipher.update(encryptedText, "base64url", "utf8") + decipher.final("utf8");
|
|
205
|
+
async function defaultZipFile(buffer) {
|
|
206
|
+
return new Promise((resolve, reject) => {
|
|
207
|
+
zlib__default.default.brotliCompress(buffer, (err, buffer2) => err ? reject(err) : resolve(buffer2));
|
|
208
|
+
});
|
|
203
209
|
}
|
|
204
|
-
function
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
return false;
|
|
209
|
-
}
|
|
210
|
-
return crypto__default.default.createVerify("RSA-SHA256").update(buffer).verify(cert, sig, "base64");
|
|
211
|
-
} catch {
|
|
212
|
-
return false;
|
|
213
|
-
}
|
|
210
|
+
async function defaultUnzipFile(buffer) {
|
|
211
|
+
return new Promise((resolve, reject) => {
|
|
212
|
+
zlib__default.default.brotliDecompress(buffer, (err, buffer2) => err ? reject(err) : resolve(buffer2));
|
|
213
|
+
});
|
|
214
214
|
}
|
|
215
215
|
|
|
216
216
|
exports.aesDecrypt = aesDecrypt;
|
package/dist/utils.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
export { b as aesDecrypt, a as aesEncrypt, d as defaultSignature, f as defaultUnzipFile, c as defaultVerifySignature, e as defaultZipFile, h as hashBuffer } from './zip-DQdr8pFv.cjs';
|
|
1
2
|
import { BrowserWindow } from 'electron';
|
|
2
|
-
export {
|
|
3
|
-
export { a as UpdateInfo, U as UpdateJSON, V as Version, d as defaultIsLowerVersion, b as defaultVersionJsonGenerator, i as isUpdateJSON, p as parseVersion } from './version-DcFMG3pT.cjs';
|
|
3
|
+
export { U as UpdateInfo, a as UpdateJSON, V as Version, d as defaultIsLowerVersion, b as defaultVersionJsonGenerator, i as isUpdateJSON, p as parseVersion } from './version-Bl_0oO5f.cjs';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Compile time dev check
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
export { b as aesDecrypt, a as aesEncrypt, d as defaultSignature, f as defaultUnzipFile, c as defaultVerifySignature, e as defaultZipFile, h as hashBuffer } from './zip-DQdr8pFv.js';
|
|
1
2
|
import { BrowserWindow } from 'electron';
|
|
2
|
-
export {
|
|
3
|
-
export { a as UpdateInfo, U as UpdateJSON, V as Version, d as defaultIsLowerVersion, b as defaultVersionJsonGenerator, i as isUpdateJSON, p as parseVersion } from './version-DcFMG3pT.js';
|
|
3
|
+
export { U as UpdateInfo, a as UpdateJSON, V as Version, d as defaultIsLowerVersion, b as defaultVersionJsonGenerator, i as isUpdateJSON, p as parseVersion } from './version-Bl_0oO5f.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Compile time dev check
|
package/dist/utils.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { beautifyDevTools, disableHWAccForWin7, getAppVersion, getEntryVersion, getPathFromAppNameAsar, getPathFromEntryAsar, getPathFromMain, getPathFromPreload, getPathFromPublic, handleUnexpectedErrors, importNative, isDev, isLinux, isMac, isWin, loadPage, requireNative, restartApp, setAppUserModelId, setPortableAppDataPath, singleInstance } from './chunk-JI27JWJN.js';
|
|
2
|
-
export { aesDecrypt, aesEncrypt, defaultSignature, defaultUnzipFile, defaultVerifySignature, defaultZipFile, hashBuffer } from './chunk-
|
|
2
|
+
export { aesDecrypt, aesEncrypt, defaultSignature, defaultUnzipFile, defaultVerifySignature, defaultZipFile, hashBuffer } from './chunk-XGWQQVIZ.js';
|
|
3
3
|
export { defaultIsLowerVersion, defaultVersionJsonGenerator, isUpdateJSON, parseVersion } from './chunk-AAAM44NW.js';
|