electron-incremental-update 2.2.1 → 2.2.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 +62 -7
- package/dist/{bytecode-7V24FFYI.js → bytecode-R2B4KTMV.js} +3 -3
- package/dist/chunk-D7NXTCQW.js +135 -0
- package/dist/{chunk-JI27JWJN.js → chunk-YZGE4RFY.js} +12 -1
- package/dist/{esm-UJAQJA65.js → esm-4S4XCVEW.js} +1 -1
- package/dist/index.cjs +17 -17
- package/dist/index.d.cts +15 -7
- package/dist/index.d.ts +15 -7
- package/dist/index.js +13 -9
- package/dist/provider.cjs +48 -51
- package/dist/provider.d.cts +14 -43
- package/dist/provider.d.ts +14 -43
- package/dist/provider.js +4 -98
- package/dist/{types-nE_pIMPo.d.ts → types-C5M2xRjF.d.cts} +77 -5
- package/dist/{types-C6lSLZWB.d.cts → types-C5M2xRjF.d.ts} +77 -5
- package/dist/utils.cjs +216 -106
- package/dist/utils.d.cts +6 -3
- package/dist/utils.d.ts +6 -3
- package/dist/utils.js +2 -2
- package/dist/vite.d.ts +50 -28
- package/dist/vite.js +36 -27
- package/dist/zip-BQS8qbGA.d.cts +70 -0
- package/dist/zip-DbfskMQi.d.ts +70 -0
- package/package.json +86 -87
- package/dist/chunk-PUVBFHOK.js +0 -43
- package/dist/crypto-Zynscwmj.d.cts +0 -33
- package/dist/crypto-Zynscwmj.d.ts +0 -33
- package/dist/version-BYVQ367i.d.cts +0 -62
- package/dist/version-BYVQ367i.d.ts +0 -62
- package/dist/{chunk-7JCGLFGU.js → chunk-LR7LR5WG.js} +3 -3
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)) {
|
|
@@ -71,7 +110,7 @@ function getHeader(headers, key) {
|
|
|
71
110
|
return value;
|
|
72
111
|
}
|
|
73
112
|
}
|
|
74
|
-
async function
|
|
113
|
+
async function downloadUtil(url, headers, signal, onResponse) {
|
|
75
114
|
await electron__default.default.app.whenReady();
|
|
76
115
|
return new Promise((resolve, reject) => {
|
|
77
116
|
const request = electron__default.default.net.request({ url, method: "GET", redirect: "follow", headers, cache: "no-cache" });
|
|
@@ -96,7 +135,7 @@ var defaultResolveDataFn = (data, resolve, reject) => {
|
|
|
96
135
|
}
|
|
97
136
|
};
|
|
98
137
|
async function defaultDownloadJSON(url, headers, signal, resolveData = defaultResolveDataFn) {
|
|
99
|
-
return await
|
|
138
|
+
return await downloadUtil(
|
|
100
139
|
url,
|
|
101
140
|
headers,
|
|
102
141
|
signal,
|
|
@@ -129,7 +168,7 @@ async function defaultDownloadUpdateJSON(url, headers, signal) {
|
|
|
129
168
|
async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
130
169
|
let transferred = 0;
|
|
131
170
|
let time = Date.now();
|
|
132
|
-
return await
|
|
171
|
+
return await downloadUtil(
|
|
133
172
|
url,
|
|
134
173
|
headers,
|
|
135
174
|
signal,
|
|
@@ -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;
|
|
@@ -359,4 +355,5 @@ exports.GitHubProvider = GitHubProvider;
|
|
|
359
355
|
exports.defaultDownloadAsar = defaultDownloadAsar;
|
|
360
356
|
exports.defaultDownloadJSON = defaultDownloadJSON;
|
|
361
357
|
exports.defaultDownloadUpdateJSON = defaultDownloadUpdateJSON;
|
|
358
|
+
exports.downloadUtil = downloadUtil;
|
|
362
359
|
exports.getHeader = getHeader;
|
package/dist/provider.d.cts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
import { e as UpdateInfoWithURL, I as IProvider, d as defaultIsLowerVersion, D as DownloadingInfo, f as URLHandler } from './types-C5M2xRjF.cjs';
|
|
2
|
+
export { b as UpdateJSONWithURL } from './types-C5M2xRjF.cjs';
|
|
3
|
+
import { c as defaultVerifySignature, l as defaultUnzipFile } from './zip-BQS8qbGA.cjs';
|
|
4
|
+
export { j as defaultDownloadAsar, f as defaultDownloadJSON, i as defaultDownloadUpdateJSON, e as downloadUtil, g as getHeader } from './zip-BQS8qbGA.cjs';
|
|
5
|
+
import '@subframe7536/type-utils';
|
|
6
|
+
import 'node:url';
|
|
7
|
+
import 'electron';
|
|
5
8
|
|
|
6
|
-
declare abstract class BaseProvider implements IProvider {
|
|
9
|
+
declare abstract class BaseProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> implements IProvider<T> {
|
|
7
10
|
name: string;
|
|
8
11
|
/**
|
|
9
12
|
* @inheritdoc
|
|
@@ -20,7 +23,7 @@ declare abstract class BaseProvider implements IProvider {
|
|
|
20
23
|
/**
|
|
21
24
|
* @inheritdoc
|
|
22
25
|
*/
|
|
23
|
-
abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<
|
|
26
|
+
abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
|
|
24
27
|
/**
|
|
25
28
|
* @inheritdoc
|
|
26
29
|
*/
|
|
@@ -56,7 +59,7 @@ interface GitHubProviderOptions {
|
|
|
56
59
|
*/
|
|
57
60
|
urlHandler?: URLHandler;
|
|
58
61
|
}
|
|
59
|
-
declare class GitHubProvider extends BaseProvider {
|
|
62
|
+
declare class GitHubProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> extends BaseProvider<T> {
|
|
60
63
|
name: string;
|
|
61
64
|
private options;
|
|
62
65
|
/**
|
|
@@ -75,7 +78,7 @@ declare class GitHubProvider extends BaseProvider {
|
|
|
75
78
|
/**
|
|
76
79
|
* @inheritdoc
|
|
77
80
|
*/
|
|
78
|
-
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<
|
|
81
|
+
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
|
|
79
82
|
/**
|
|
80
83
|
* @inheritdoc
|
|
81
84
|
*/
|
|
@@ -104,7 +107,7 @@ interface GitHubApiProviderOptions {
|
|
|
104
107
|
*/
|
|
105
108
|
urlHandler?: URLHandler;
|
|
106
109
|
}
|
|
107
|
-
declare class GitHubApiProvider extends BaseProvider {
|
|
110
|
+
declare class GitHubApiProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> extends BaseProvider<T> {
|
|
108
111
|
name: string;
|
|
109
112
|
private options;
|
|
110
113
|
/**
|
|
@@ -124,43 +127,11 @@ declare class GitHubApiProvider extends BaseProvider {
|
|
|
124
127
|
/**
|
|
125
128
|
* @inheritdoc
|
|
126
129
|
*/
|
|
127
|
-
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<
|
|
130
|
+
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
|
|
128
131
|
/**
|
|
129
132
|
* @inheritdoc
|
|
130
133
|
*/
|
|
131
134
|
downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
132
135
|
}
|
|
133
136
|
|
|
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, UpdateInfoWithURL, UpdateJSONWithURL, defaultDownloadAsar, defaultDownloadJSON, defaultDownloadUpdateJSON, getHeader };
|
|
137
|
+
export { BaseProvider, DownloadingInfo, GitHubApiProvider, type GitHubApiProviderOptions, GitHubProvider, type GitHubProviderOptions, IProvider, URLHandler, UpdateInfoWithURL };
|
package/dist/provider.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
import { e as UpdateInfoWithURL, I as IProvider, d as defaultIsLowerVersion, D as DownloadingInfo, f as URLHandler } from './types-C5M2xRjF.js';
|
|
2
|
+
export { b as UpdateJSONWithURL } from './types-C5M2xRjF.js';
|
|
3
|
+
import { c as defaultVerifySignature, l as defaultUnzipFile } from './zip-DbfskMQi.js';
|
|
4
|
+
export { j as defaultDownloadAsar, f as defaultDownloadJSON, i as defaultDownloadUpdateJSON, e as downloadUtil, g as getHeader } from './zip-DbfskMQi.js';
|
|
5
|
+
import '@subframe7536/type-utils';
|
|
6
|
+
import 'node:url';
|
|
7
|
+
import 'electron';
|
|
5
8
|
|
|
6
|
-
declare abstract class BaseProvider implements IProvider {
|
|
9
|
+
declare abstract class BaseProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> implements IProvider<T> {
|
|
7
10
|
name: string;
|
|
8
11
|
/**
|
|
9
12
|
* @inheritdoc
|
|
@@ -20,7 +23,7 @@ declare abstract class BaseProvider implements IProvider {
|
|
|
20
23
|
/**
|
|
21
24
|
* @inheritdoc
|
|
22
25
|
*/
|
|
23
|
-
abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<
|
|
26
|
+
abstract downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
|
|
24
27
|
/**
|
|
25
28
|
* @inheritdoc
|
|
26
29
|
*/
|
|
@@ -56,7 +59,7 @@ interface GitHubProviderOptions {
|
|
|
56
59
|
*/
|
|
57
60
|
urlHandler?: URLHandler;
|
|
58
61
|
}
|
|
59
|
-
declare class GitHubProvider extends BaseProvider {
|
|
62
|
+
declare class GitHubProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> extends BaseProvider<T> {
|
|
60
63
|
name: string;
|
|
61
64
|
private options;
|
|
62
65
|
/**
|
|
@@ -75,7 +78,7 @@ declare class GitHubProvider extends BaseProvider {
|
|
|
75
78
|
/**
|
|
76
79
|
* @inheritdoc
|
|
77
80
|
*/
|
|
78
|
-
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<
|
|
81
|
+
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
|
|
79
82
|
/**
|
|
80
83
|
* @inheritdoc
|
|
81
84
|
*/
|
|
@@ -104,7 +107,7 @@ interface GitHubApiProviderOptions {
|
|
|
104
107
|
*/
|
|
105
108
|
urlHandler?: URLHandler;
|
|
106
109
|
}
|
|
107
|
-
declare class GitHubApiProvider extends BaseProvider {
|
|
110
|
+
declare class GitHubApiProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> extends BaseProvider<T> {
|
|
108
111
|
name: string;
|
|
109
112
|
private options;
|
|
110
113
|
/**
|
|
@@ -124,43 +127,11 @@ declare class GitHubApiProvider extends BaseProvider {
|
|
|
124
127
|
/**
|
|
125
128
|
* @inheritdoc
|
|
126
129
|
*/
|
|
127
|
-
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<
|
|
130
|
+
downloadJSON(name: string, versionPath: string, signal: AbortSignal): Promise<T>;
|
|
128
131
|
/**
|
|
129
132
|
* @inheritdoc
|
|
130
133
|
*/
|
|
131
134
|
downloadAsar(info: UpdateInfoWithURL, signal: AbortSignal, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
132
135
|
}
|
|
133
136
|
|
|
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, UpdateInfoWithURL, UpdateJSONWithURL, defaultDownloadAsar, defaultDownloadJSON, defaultDownloadUpdateJSON, getHeader };
|
|
137
|
+
export { BaseProvider, DownloadingInfo, GitHubApiProvider, type GitHubApiProviderOptions, GitHubProvider, type GitHubProviderOptions, IProvider, URLHandler, UpdateInfoWithURL };
|
package/dist/provider.js
CHANGED
|
@@ -1,99 +1,7 @@
|
|
|
1
|
-
import { defaultVerifySignature, defaultUnzipFile } from './chunk-
|
|
2
|
-
|
|
1
|
+
import { defaultVerifySignature, defaultUnzipFile, defaultDownloadUpdateJSON, defaultDownloadAsar, defaultDownloadJSON } from './chunk-D7NXTCQW.js';
|
|
2
|
+
export { defaultDownloadAsar, defaultDownloadJSON, defaultDownloadUpdateJSON, downloadUtil, getHeader } from './chunk-D7NXTCQW.js';
|
|
3
|
+
import { defaultIsLowerVersion } from './chunk-AAAM44NW.js';
|
|
3
4
|
import { URL } from 'node:url';
|
|
4
|
-
import electron from 'electron';
|
|
5
|
-
|
|
6
|
-
function getHeader(headers, key) {
|
|
7
|
-
const value = headers[key];
|
|
8
|
-
if (Array.isArray(value)) {
|
|
9
|
-
return value.length === 0 ? null : value[value.length - 1];
|
|
10
|
-
} else {
|
|
11
|
-
return value;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
async function downloadFn(url, headers, signal, onResponse) {
|
|
15
|
-
await electron.app.whenReady();
|
|
16
|
-
return new Promise((resolve, reject) => {
|
|
17
|
-
const request = electron.net.request({ url, method: "GET", redirect: "follow", headers, cache: "no-cache" });
|
|
18
|
-
signal.addEventListener("abort", () => request.abort(), { once: true });
|
|
19
|
-
request.on("response", (resp) => {
|
|
20
|
-
resp.on("aborted", () => reject(new Error("aborted")));
|
|
21
|
-
resp.on("error", () => reject(new Error("download error")));
|
|
22
|
-
onResponse(resp, resolve, reject);
|
|
23
|
-
});
|
|
24
|
-
request.on("error", reject);
|
|
25
|
-
request.end();
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
function trimData(data) {
|
|
29
|
-
return data.trim().slice(0, 5e3).replace(/\s+/g, " ");
|
|
30
|
-
}
|
|
31
|
-
var defaultResolveDataFn = (data, resolve, reject) => {
|
|
32
|
-
try {
|
|
33
|
-
resolve(JSON.parse(data));
|
|
34
|
-
} catch {
|
|
35
|
-
reject(new Error(`Invalid json, "${trimData(data)}"`));
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
async function defaultDownloadJSON(url, headers, signal, resolveData = defaultResolveDataFn) {
|
|
39
|
-
return await downloadFn(
|
|
40
|
-
url,
|
|
41
|
-
headers,
|
|
42
|
-
signal,
|
|
43
|
-
(resp, resolve, reject) => {
|
|
44
|
-
let data = "";
|
|
45
|
-
resp.on("data", (chunk) => data += chunk);
|
|
46
|
-
resp.on("end", () => resolveData(data, resolve, reject));
|
|
47
|
-
}
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
async function defaultDownloadUpdateJSON(url, headers, signal) {
|
|
51
|
-
return await defaultDownloadJSON(
|
|
52
|
-
url,
|
|
53
|
-
headers,
|
|
54
|
-
signal,
|
|
55
|
-
(data, resolve, reject) => {
|
|
56
|
-
try {
|
|
57
|
-
const json = JSON.parse(data);
|
|
58
|
-
if (isUpdateJSON(json)) {
|
|
59
|
-
resolve(json);
|
|
60
|
-
} else {
|
|
61
|
-
throw Error;
|
|
62
|
-
}
|
|
63
|
-
} catch {
|
|
64
|
-
reject(new Error(`Invalid update json, "${trimData(data)}"`));
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
async function defaultDownloadAsar(url, headers, signal, onDownloading) {
|
|
70
|
-
let transferred = 0;
|
|
71
|
-
let time = Date.now();
|
|
72
|
-
return await downloadFn(
|
|
73
|
-
url,
|
|
74
|
-
headers,
|
|
75
|
-
signal,
|
|
76
|
-
(resp, resolve) => {
|
|
77
|
-
const total = +getHeader(resp.headers, "content-length") || -1;
|
|
78
|
-
const data = [];
|
|
79
|
-
resp.on("data", (chunk) => {
|
|
80
|
-
const delta = chunk.length;
|
|
81
|
-
transferred += delta;
|
|
82
|
-
const current = Date.now();
|
|
83
|
-
onDownloading?.({
|
|
84
|
-
percent: total > 0 ? +(transferred / total).toFixed(2) * 100 : -1,
|
|
85
|
-
total,
|
|
86
|
-
transferred,
|
|
87
|
-
delta,
|
|
88
|
-
bps: delta / (current - time)
|
|
89
|
-
});
|
|
90
|
-
time = current;
|
|
91
|
-
data.push(chunk);
|
|
92
|
-
});
|
|
93
|
-
resp.on("end", () => resolve(Buffer.concat(data)));
|
|
94
|
-
}
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
5
|
|
|
98
6
|
// src/provider/base.ts
|
|
99
7
|
var BaseProvider = class {
|
|
@@ -111,8 +19,6 @@ var BaseProvider = class {
|
|
|
111
19
|
*/
|
|
112
20
|
unzipFile = defaultUnzipFile;
|
|
113
21
|
};
|
|
114
|
-
|
|
115
|
-
// src/provider/github.ts
|
|
116
22
|
var GitHubProvider = class extends BaseProvider {
|
|
117
23
|
name = "GithubProvider";
|
|
118
24
|
options;
|
|
@@ -269,4 +175,4 @@ var GitHubApiProvider = class extends BaseProvider {
|
|
|
269
175
|
}
|
|
270
176
|
};
|
|
271
177
|
|
|
272
|
-
export { BaseProvider, GitHubApiProvider, GitHubProvider
|
|
178
|
+
export { BaseProvider, GitHubApiProvider, GitHubProvider };
|
|
@@ -1,10 +1,82 @@
|
|
|
1
1
|
import { Promisable } from '@subframe7536/type-utils';
|
|
2
|
-
import {
|
|
2
|
+
import { URL } from 'node:url';
|
|
3
|
+
|
|
4
|
+
interface Version {
|
|
5
|
+
/**
|
|
6
|
+
* `4` of `4.3.2-beta.1`
|
|
7
|
+
*/
|
|
8
|
+
major: number;
|
|
9
|
+
/**
|
|
10
|
+
* `3` of `4.3.2-beta.1`
|
|
11
|
+
*/
|
|
12
|
+
minor: number;
|
|
13
|
+
/**
|
|
14
|
+
* `2` of `4.3.2-beta.1`
|
|
15
|
+
*/
|
|
16
|
+
patch: number;
|
|
17
|
+
/**
|
|
18
|
+
* `beta` of `4.3.2-beta.1`
|
|
19
|
+
*/
|
|
20
|
+
stage: string;
|
|
21
|
+
/**
|
|
22
|
+
* `1` of `4.3.2-beta.1`
|
|
23
|
+
*/
|
|
24
|
+
stageVersion: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse version string to {@link Version}, like `0.2.0-beta.1`
|
|
28
|
+
* @param version version string
|
|
29
|
+
*/
|
|
30
|
+
declare function parseVersion(version: string): Version;
|
|
31
|
+
/**
|
|
32
|
+
* Default function to check the old version is less than new version
|
|
33
|
+
* @param oldVer old version string
|
|
34
|
+
* @param newVer new version string
|
|
35
|
+
*/
|
|
36
|
+
declare function defaultIsLowerVersion(oldVer: string, newVer: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Update info json
|
|
39
|
+
*/
|
|
40
|
+
type UpdateInfo = {
|
|
41
|
+
/**
|
|
42
|
+
* Update Asar signature
|
|
43
|
+
*/
|
|
44
|
+
signature: string;
|
|
45
|
+
/**
|
|
46
|
+
* Minimum version
|
|
47
|
+
*/
|
|
48
|
+
minimumVersion: string;
|
|
49
|
+
/**
|
|
50
|
+
* Target version
|
|
51
|
+
*/
|
|
52
|
+
version: string;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* {@link UpdateInfo} with beta
|
|
56
|
+
*/
|
|
57
|
+
type UpdateJSON = UpdateInfo & {
|
|
58
|
+
/**
|
|
59
|
+
* Beta update info
|
|
60
|
+
*/
|
|
61
|
+
beta: UpdateInfo;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Check is `UpdateJSON`
|
|
65
|
+
* @param json any variable
|
|
66
|
+
*/
|
|
67
|
+
declare function isUpdateJSON(json: any): json is UpdateJSON;
|
|
68
|
+
/**
|
|
69
|
+
* Default function to generate `UpdateJSON`
|
|
70
|
+
* @param existingJson exising update json
|
|
71
|
+
* @param signature sigature
|
|
72
|
+
* @param version target version
|
|
73
|
+
* @param minimumVersion minimum version
|
|
74
|
+
*/
|
|
75
|
+
declare function defaultVersionJsonGenerator(existingJson: UpdateJSON, signature: string, version: string, minimumVersion: string): UpdateJSON;
|
|
3
76
|
|
|
4
77
|
type UpdateInfoWithURL = UpdateInfo & {
|
|
5
78
|
url: string;
|
|
6
79
|
};
|
|
7
|
-
type OnDownloading = (progress: DownloadingInfo) => void;
|
|
8
80
|
interface DownloadingInfo {
|
|
9
81
|
/**
|
|
10
82
|
* Download buffer delta
|
|
@@ -34,7 +106,7 @@ interface DownloadingInfo {
|
|
|
34
106
|
type UpdateJSONWithURL = UpdateInfoWithURL & {
|
|
35
107
|
beta: UpdateInfoWithURL;
|
|
36
108
|
};
|
|
37
|
-
interface IProvider {
|
|
109
|
+
interface IProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> {
|
|
38
110
|
/**
|
|
39
111
|
* Provider name
|
|
40
112
|
*/
|
|
@@ -45,7 +117,7 @@ interface IProvider {
|
|
|
45
117
|
* @param versionPath normalized version path in project
|
|
46
118
|
* @param signal abort signal
|
|
47
119
|
*/
|
|
48
|
-
downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<
|
|
120
|
+
downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<T>;
|
|
49
121
|
/**
|
|
50
122
|
* Download update asar
|
|
51
123
|
* @param updateInfo existing update info
|
|
@@ -76,4 +148,4 @@ interface IProvider {
|
|
|
76
148
|
}
|
|
77
149
|
type URLHandler = (url: URL) => Promisable<URL | string | undefined | null>;
|
|
78
150
|
|
|
79
|
-
export type
|
|
151
|
+
export { type DownloadingInfo as D, type IProvider as I, type UpdateInfo as U, type Version as V, type UpdateJSON as a, type UpdateJSONWithURL as b, defaultVersionJsonGenerator as c, defaultIsLowerVersion as d, type UpdateInfoWithURL as e, type URLHandler as f, isUpdateJSON as i, parseVersion as p };
|
|
@@ -1,10 +1,82 @@
|
|
|
1
1
|
import { Promisable } from '@subframe7536/type-utils';
|
|
2
|
-
import {
|
|
2
|
+
import { URL } from 'node:url';
|
|
3
|
+
|
|
4
|
+
interface Version {
|
|
5
|
+
/**
|
|
6
|
+
* `4` of `4.3.2-beta.1`
|
|
7
|
+
*/
|
|
8
|
+
major: number;
|
|
9
|
+
/**
|
|
10
|
+
* `3` of `4.3.2-beta.1`
|
|
11
|
+
*/
|
|
12
|
+
minor: number;
|
|
13
|
+
/**
|
|
14
|
+
* `2` of `4.3.2-beta.1`
|
|
15
|
+
*/
|
|
16
|
+
patch: number;
|
|
17
|
+
/**
|
|
18
|
+
* `beta` of `4.3.2-beta.1`
|
|
19
|
+
*/
|
|
20
|
+
stage: string;
|
|
21
|
+
/**
|
|
22
|
+
* `1` of `4.3.2-beta.1`
|
|
23
|
+
*/
|
|
24
|
+
stageVersion: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse version string to {@link Version}, like `0.2.0-beta.1`
|
|
28
|
+
* @param version version string
|
|
29
|
+
*/
|
|
30
|
+
declare function parseVersion(version: string): Version;
|
|
31
|
+
/**
|
|
32
|
+
* Default function to check the old version is less than new version
|
|
33
|
+
* @param oldVer old version string
|
|
34
|
+
* @param newVer new version string
|
|
35
|
+
*/
|
|
36
|
+
declare function defaultIsLowerVersion(oldVer: string, newVer: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Update info json
|
|
39
|
+
*/
|
|
40
|
+
type UpdateInfo = {
|
|
41
|
+
/**
|
|
42
|
+
* Update Asar signature
|
|
43
|
+
*/
|
|
44
|
+
signature: string;
|
|
45
|
+
/**
|
|
46
|
+
* Minimum version
|
|
47
|
+
*/
|
|
48
|
+
minimumVersion: string;
|
|
49
|
+
/**
|
|
50
|
+
* Target version
|
|
51
|
+
*/
|
|
52
|
+
version: string;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* {@link UpdateInfo} with beta
|
|
56
|
+
*/
|
|
57
|
+
type UpdateJSON = UpdateInfo & {
|
|
58
|
+
/**
|
|
59
|
+
* Beta update info
|
|
60
|
+
*/
|
|
61
|
+
beta: UpdateInfo;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Check is `UpdateJSON`
|
|
65
|
+
* @param json any variable
|
|
66
|
+
*/
|
|
67
|
+
declare function isUpdateJSON(json: any): json is UpdateJSON;
|
|
68
|
+
/**
|
|
69
|
+
* Default function to generate `UpdateJSON`
|
|
70
|
+
* @param existingJson exising update json
|
|
71
|
+
* @param signature sigature
|
|
72
|
+
* @param version target version
|
|
73
|
+
* @param minimumVersion minimum version
|
|
74
|
+
*/
|
|
75
|
+
declare function defaultVersionJsonGenerator(existingJson: UpdateJSON, signature: string, version: string, minimumVersion: string): UpdateJSON;
|
|
3
76
|
|
|
4
77
|
type UpdateInfoWithURL = UpdateInfo & {
|
|
5
78
|
url: string;
|
|
6
79
|
};
|
|
7
|
-
type OnDownloading = (progress: DownloadingInfo) => void;
|
|
8
80
|
interface DownloadingInfo {
|
|
9
81
|
/**
|
|
10
82
|
* Download buffer delta
|
|
@@ -34,7 +106,7 @@ interface DownloadingInfo {
|
|
|
34
106
|
type UpdateJSONWithURL = UpdateInfoWithURL & {
|
|
35
107
|
beta: UpdateInfoWithURL;
|
|
36
108
|
};
|
|
37
|
-
interface IProvider {
|
|
109
|
+
interface IProvider<T extends UpdateInfoWithURL = UpdateInfoWithURL> {
|
|
38
110
|
/**
|
|
39
111
|
* Provider name
|
|
40
112
|
*/
|
|
@@ -45,7 +117,7 @@ interface IProvider {
|
|
|
45
117
|
* @param versionPath normalized version path in project
|
|
46
118
|
* @param signal abort signal
|
|
47
119
|
*/
|
|
48
|
-
downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<
|
|
120
|
+
downloadJSON: (name: string, versionPath: string, signal: AbortSignal) => Promise<T>;
|
|
49
121
|
/**
|
|
50
122
|
* Download update asar
|
|
51
123
|
* @param updateInfo existing update info
|
|
@@ -76,4 +148,4 @@ interface IProvider {
|
|
|
76
148
|
}
|
|
77
149
|
type URLHandler = (url: URL) => Promisable<URL | string | undefined | null>;
|
|
78
150
|
|
|
79
|
-
export type
|
|
151
|
+
export { type DownloadingInfo as D, type IProvider as I, type UpdateInfo as U, type Version as V, type UpdateJSON as a, type UpdateJSONWithURL as b, defaultVersionJsonGenerator as c, defaultIsLowerVersion as d, type UpdateInfoWithURL as e, type URLHandler as f, isUpdateJSON as i, parseVersion as p };
|