electron-incremental-update 2.0.0-beta.1 → 2.0.0-beta.10
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 +3 -3
- package/dist/chunk-4MH6ZXCY.js +81 -0
- package/dist/chunk-72ZAJ7AF.js +70 -0
- package/dist/chunk-KZSYEXLO.js +55 -0
- package/dist/index.cjs +161 -221
- package/dist/index.d.cts +71 -107
- package/dist/index.d.ts +71 -107
- package/dist/index.js +135 -156
- package/dist/provider.cjs +132 -127
- package/dist/provider.d.cts +92 -20
- package/dist/provider.d.ts +92 -20
- package/dist/provider.js +92 -51
- package/dist/types-Bnc4jz6R.d.ts +78 -0
- package/dist/types-DEYw5VrL.d.cts +78 -0
- package/dist/utils.cjs +133 -190
- package/dist/utils.d.cts +35 -30
- package/dist/utils.d.ts +35 -30
- package/dist/utils.js +3 -62
- package/dist/version-C4tF_trh.d.cts +62 -0
- package/dist/version-C4tF_trh.d.ts +62 -0
- package/dist/vite.d.ts +370 -0
- package/dist/vite.js +304 -265
- package/dist/zip-rm9ED9nU.d.cts +33 -0
- package/dist/zip-rm9ED9nU.d.ts +33 -0
- package/package.json +20 -14
- package/dist/chunk-RSLOPAIZ.js +0 -247
- package/dist/decrypt-BNBcodiO.d.cts +0 -4
- package/dist/decrypt-BNBcodiO.d.ts +0 -4
- package/dist/types-DxPmQmaq.d.cts +0 -61
- package/dist/types-seJf3Wbc.d.ts +0 -61
- package/dist/version-CffZWDhZ.d.cts +0 -32
- package/dist/version-CffZWDhZ.d.ts +0 -32
package/dist/provider.cjs
CHANGED
|
@@ -1,58 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
'use strict';
|
|
19
2
|
|
|
20
|
-
|
|
21
|
-
var
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
downloadAsarBufferDefault: () => downloadAsarBufferDefault,
|
|
25
|
-
downloadUpdateJSONDefault: () => downloadUpdateJSONDefault
|
|
26
|
-
});
|
|
27
|
-
module.exports = __toCommonJS(provider_exports);
|
|
3
|
+
var url = require('url');
|
|
4
|
+
var electron = require('electron');
|
|
5
|
+
var crypto = require('crypto');
|
|
6
|
+
var zlib = require('zlib');
|
|
28
7
|
|
|
29
|
-
|
|
30
|
-
var import_node_fs = require("fs");
|
|
31
|
-
var import_node_path = require("path");
|
|
32
|
-
var import_electron = require("electron");
|
|
33
|
-
var isDev = __EIU_IS_DEV__;
|
|
34
|
-
var isWin = process.platform === "win32";
|
|
35
|
-
var isMac = process.platform === "darwin";
|
|
36
|
-
var isLinux = process.platform === "linux";
|
|
37
|
-
function waitAppReady(timeout = 1e3) {
|
|
38
|
-
return import_electron.app.isReady() ? Promise.resolve() : new Promise((resolve, reject) => {
|
|
39
|
-
const _ = setTimeout(() => {
|
|
40
|
-
reject(new Error("app is not ready"));
|
|
41
|
-
}, timeout);
|
|
42
|
-
import_electron.app.whenReady().then(() => {
|
|
43
|
-
clearTimeout(_);
|
|
44
|
-
resolve();
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
}
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
48
9
|
|
|
49
|
-
|
|
50
|
-
var
|
|
51
|
-
var import_node_zlib = require("zlib");
|
|
10
|
+
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
|
|
11
|
+
var zlib__default = /*#__PURE__*/_interopDefault(zlib);
|
|
52
12
|
|
|
53
|
-
// src/
|
|
54
|
-
var import_node_fs3 = require("fs");
|
|
55
|
-
var import_node_zlib2 = require("zlib");
|
|
13
|
+
// src/provider/github.ts
|
|
56
14
|
|
|
57
15
|
// src/utils/version.ts
|
|
58
16
|
function parseVersion(version) {
|
|
@@ -78,7 +36,7 @@ function parseVersion(version) {
|
|
|
78
36
|
}
|
|
79
37
|
return ret;
|
|
80
38
|
}
|
|
81
|
-
function
|
|
39
|
+
function defaultIsLowerVersion(oldVer, newVer) {
|
|
82
40
|
const oldV = parseVersion(oldVer);
|
|
83
41
|
const newV = parseVersion(newVer);
|
|
84
42
|
function compareStrings(str1, str2) {
|
|
@@ -99,47 +57,23 @@ function isLowerVersionDefault(oldVer, newVer) {
|
|
|
99
57
|
return false;
|
|
100
58
|
}
|
|
101
59
|
function isUpdateJSON(json) {
|
|
102
|
-
const is = (j) => !!(j && j.minimumVersion && j.signature && j.
|
|
60
|
+
const is = (j) => !!(j && j.minimumVersion && j.signature && j.version);
|
|
103
61
|
return is(json) && is(json?.beta);
|
|
104
62
|
}
|
|
105
63
|
|
|
106
|
-
// src/
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return Buffer.from(hash).subarray(0, length);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// src/utils/crypto/decrypt.ts
|
|
117
|
-
function decrypt(encryptedText, key, iv) {
|
|
118
|
-
const decipher = (0, import_node_crypto2.createDecipheriv)("aes-256-cbc", key, iv);
|
|
119
|
-
let decrypted = decipher.update(encryptedText, "base64url", "utf8");
|
|
120
|
-
decrypted += decipher.final("utf8");
|
|
121
|
-
return decrypted;
|
|
122
|
-
}
|
|
123
|
-
function verifySignatureDefault(buffer, signature, cert) {
|
|
124
|
-
try {
|
|
125
|
-
const [sig, version] = decrypt(signature, hashString(cert, 32), hashString(buffer, 16)).split("%");
|
|
126
|
-
const result = (0, import_node_crypto2.createVerify)("RSA-SHA256").update(buffer).verify(cert, sig, "base64");
|
|
127
|
-
return result ? version : void 0;
|
|
128
|
-
} catch (error) {
|
|
129
|
-
return void 0;
|
|
64
|
+
// src/provider/download.ts
|
|
65
|
+
function getHeader(headers, key) {
|
|
66
|
+
const value = headers[key];
|
|
67
|
+
if (Array.isArray(value)) {
|
|
68
|
+
return value.length === 0 ? null : value[value.length - 1];
|
|
69
|
+
} else {
|
|
70
|
+
return value;
|
|
130
71
|
}
|
|
131
72
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
var import_node_crypto3 = require("crypto");
|
|
135
|
-
|
|
136
|
-
// src/provider/download.ts
|
|
137
|
-
var import_electron2 = require("electron");
|
|
138
|
-
async function downlaodFn(url, headers, onResponse) {
|
|
139
|
-
await waitAppReady();
|
|
73
|
+
async function downloadFn(url, headers, onResponse) {
|
|
74
|
+
await electron.app.whenReady();
|
|
140
75
|
return new Promise((resolve, reject) => {
|
|
141
|
-
const request =
|
|
142
|
-
Object.keys(headers).forEach((key) => request.setHeader(key, headers[key]));
|
|
76
|
+
const request = electron.net.request({ url, method: "GET", redirect: "follow", headers });
|
|
143
77
|
request.on("response", (resp) => {
|
|
144
78
|
resp.on("aborted", () => reject(new Error("aborted")));
|
|
145
79
|
resp.on("error", () => reject(new Error("download error")));
|
|
@@ -149,8 +83,8 @@ async function downlaodFn(url, headers, onResponse) {
|
|
|
149
83
|
request.end();
|
|
150
84
|
});
|
|
151
85
|
}
|
|
152
|
-
async function
|
|
153
|
-
return await
|
|
86
|
+
async function defaultDownloadUpdateJSON(url, headers) {
|
|
87
|
+
return await downloadFn(url, headers, (resp, resolve, reject) => {
|
|
154
88
|
let data = "";
|
|
155
89
|
resp.on("data", (chunk) => data += chunk);
|
|
156
90
|
resp.on("end", () => {
|
|
@@ -161,67 +95,138 @@ async function downloadUpdateJSONDefault(url, headers) {
|
|
|
161
95
|
} else {
|
|
162
96
|
throw Error;
|
|
163
97
|
}
|
|
164
|
-
} catch
|
|
98
|
+
} catch {
|
|
165
99
|
reject(new Error("invalid update json"));
|
|
166
100
|
}
|
|
167
101
|
});
|
|
168
102
|
});
|
|
169
103
|
}
|
|
170
|
-
async function
|
|
171
|
-
let
|
|
172
|
-
|
|
104
|
+
async function defaultDownloadAsar(url, headers, onDownloading) {
|
|
105
|
+
let transferred = 0;
|
|
106
|
+
let time = Date.now();
|
|
107
|
+
return await downloadFn(url, headers, (resp, resolve) => {
|
|
108
|
+
const total = getHeader(resp.headers, "content-length") || -1;
|
|
173
109
|
let data = [];
|
|
174
110
|
resp.on("data", (chunk) => {
|
|
175
|
-
|
|
176
|
-
|
|
111
|
+
const delta = chunk.length;
|
|
112
|
+
transferred += delta;
|
|
113
|
+
const current = Date.now();
|
|
114
|
+
onDownloading?.({
|
|
115
|
+
percent: +(transferred / total).toFixed(2) * 100,
|
|
116
|
+
total,
|
|
117
|
+
transferred,
|
|
118
|
+
delta,
|
|
119
|
+
bps: delta / ((current - time) * 1e3)
|
|
120
|
+
});
|
|
121
|
+
time = current;
|
|
177
122
|
data.push(chunk);
|
|
178
123
|
});
|
|
179
124
|
resp.on("end", () => resolve(Buffer.concat(data)));
|
|
180
125
|
});
|
|
181
126
|
}
|
|
127
|
+
function hashBuffer(data, length) {
|
|
128
|
+
const hash = crypto__default.default.createHash("SHA256").update(data).digest("binary");
|
|
129
|
+
return Buffer.from(hash).subarray(0, length);
|
|
130
|
+
}
|
|
131
|
+
function aesDecrypt(encryptedText, key, iv) {
|
|
132
|
+
const decipher = crypto__default.default.createDecipheriv("aes-256-cbc", key, iv);
|
|
133
|
+
return decipher.update(encryptedText, "base64url", "utf8") + decipher.final("utf8");
|
|
134
|
+
}
|
|
135
|
+
function defaultVerifySignature(buffer, version, signature, cert) {
|
|
136
|
+
try {
|
|
137
|
+
const [sig, ver] = aesDecrypt(signature, hashBuffer(cert, 32), hashBuffer(buffer, 16)).split("%");
|
|
138
|
+
if (ver !== version) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
return crypto__default.default.createVerify("RSA-SHA256").update(buffer).verify(cert, sig, "base64");
|
|
142
|
+
} catch {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async function defaultUnzipFile(buffer) {
|
|
147
|
+
return new Promise((resolve, reject) => {
|
|
148
|
+
zlib__default.default.brotliDecompress(buffer, (err, buffer2) => {
|
|
149
|
+
if (err) {
|
|
150
|
+
reject(err);
|
|
151
|
+
} else {
|
|
152
|
+
resolve(buffer2);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// src/provider/base.ts
|
|
159
|
+
var BaseProvider = class {
|
|
160
|
+
name = "BaseProvider";
|
|
161
|
+
/**
|
|
162
|
+
* @inheritdoc
|
|
163
|
+
*/
|
|
164
|
+
isLowerVersion = defaultIsLowerVersion;
|
|
165
|
+
/**
|
|
166
|
+
* @inheritdoc
|
|
167
|
+
*/
|
|
168
|
+
verifySignaure = defaultVerifySignature;
|
|
169
|
+
/**
|
|
170
|
+
* @inheritdoc
|
|
171
|
+
*/
|
|
172
|
+
unzipFile = defaultUnzipFile;
|
|
173
|
+
};
|
|
182
174
|
|
|
183
175
|
// src/provider/github.ts
|
|
184
|
-
var GitHubProvider = class {
|
|
185
|
-
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36";
|
|
176
|
+
var GitHubProvider = class extends BaseProvider {
|
|
186
177
|
name = "GithubProvider";
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
178
|
+
options;
|
|
179
|
+
/**
|
|
180
|
+
* Update Provider for Github repo
|
|
181
|
+
* - download update json from `https://raw.githubusercontent.com/{user}/{repo}/HEAD/{versionPath}`
|
|
182
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
|
|
183
|
+
*
|
|
184
|
+
* you can setup `urlHandler` in {@link GitHubProviderOptions} or `Updater` to modify url before request
|
|
185
|
+
* @param options provider options
|
|
186
|
+
*/
|
|
190
187
|
constructor(options) {
|
|
191
|
-
|
|
192
|
-
this.
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
throw new Error(`${this.name}: invalid github url: ${options.url}`);
|
|
196
|
-
}
|
|
197
|
-
if (!this.url.pathname.endsWith("/")) {
|
|
198
|
-
this.url.pathname += "/";
|
|
188
|
+
super();
|
|
189
|
+
this.options = options;
|
|
190
|
+
if (!options.branch) {
|
|
191
|
+
this.options.branch = "HEAD";
|
|
199
192
|
}
|
|
200
193
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
return this.urlHandler ? this.urlHandler(url, isDownloadAsar) : url;
|
|
194
|
+
get urlHandler() {
|
|
195
|
+
return this.options.urlHandler;
|
|
204
196
|
}
|
|
205
|
-
|
|
206
|
-
|
|
197
|
+
set urlHandler(handler) {
|
|
198
|
+
this.options.urlHandler = handler;
|
|
199
|
+
}
|
|
200
|
+
async parseURL(isDownloadAsar, extraPath) {
|
|
201
|
+
const url$1 = new url.URL(
|
|
202
|
+
`/${this.options.username}/${this.options.repo}/${extraPath}`,
|
|
203
|
+
"https://" + (isDownloadAsar ? "github.com" : "raw.githubusercontent.com")
|
|
204
|
+
);
|
|
205
|
+
return (await this.urlHandler?.(url$1, isDownloadAsar) || url$1).toString();
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* @inheritdoc
|
|
209
|
+
*/
|
|
207
210
|
async downloadJSON(versionPath) {
|
|
208
|
-
return await
|
|
209
|
-
this.parseURL(false,
|
|
210
|
-
{
|
|
211
|
+
return await defaultDownloadUpdateJSON(
|
|
212
|
+
await this.parseURL(false, `${this.options.branch}/${versionPath}`),
|
|
213
|
+
{ Accept: "application/json", ...this.options.extraHeaders }
|
|
211
214
|
);
|
|
212
215
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
216
|
+
/**
|
|
217
|
+
* @inheritdoc
|
|
218
|
+
*/
|
|
219
|
+
async downloadAsar(name, info, onDownloading) {
|
|
220
|
+
return await defaultDownloadAsar(
|
|
221
|
+
await this.parseURL(true, `releases/download/v${info.version}/${name}-${info.version}.asar.gz`),
|
|
222
|
+
{ Accept: "application/octet-stream", ...this.options.extraHeaders },
|
|
218
223
|
onDownloading
|
|
219
224
|
);
|
|
220
225
|
}
|
|
221
226
|
};
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
227
|
+
|
|
228
|
+
exports.BaseProvider = BaseProvider;
|
|
229
|
+
exports.GitHubProvider = GitHubProvider;
|
|
230
|
+
exports.defaultDownloadAsar = defaultDownloadAsar;
|
|
231
|
+
exports.defaultDownloadUpdateJSON = defaultDownloadUpdateJSON;
|
|
232
|
+
exports.getHeader = getHeader;
|
package/dist/provider.d.cts
CHANGED
|
@@ -1,37 +1,109 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import '@subframe7536/type-utils';
|
|
1
|
+
import { d as defaultIsLowerVersion, a as UpdateJSON, U as UpdateInfo } from './version-C4tF_trh.cjs';
|
|
2
|
+
import { I as IProvider, D as DownloadingInfo, U as URLHandler, O as OnDownloading } from './types-DEYw5VrL.cjs';
|
|
3
|
+
import { f as defaultVerifySignature, a as defaultUnzipFile } from './zip-rm9ED9nU.cjs';
|
|
4
|
+
import { Arrayable } from '@subframe7536/type-utils';
|
|
5
|
+
|
|
6
|
+
declare abstract class BaseProvider implements IProvider {
|
|
7
|
+
name: string;
|
|
8
|
+
/**
|
|
9
|
+
* @inheritdoc
|
|
10
|
+
*/
|
|
11
|
+
isLowerVersion: typeof defaultIsLowerVersion;
|
|
12
|
+
/**
|
|
13
|
+
* @inheritdoc
|
|
14
|
+
*/
|
|
15
|
+
verifySignaure: typeof defaultVerifySignature;
|
|
16
|
+
/**
|
|
17
|
+
* @inheritdoc
|
|
18
|
+
*/
|
|
19
|
+
unzipFile: typeof defaultUnzipFile;
|
|
20
|
+
/**
|
|
21
|
+
* @inheritdoc
|
|
22
|
+
*/
|
|
23
|
+
abstract downloadJSON(versionPath: string): Promise<UpdateJSON>;
|
|
24
|
+
/**
|
|
25
|
+
* @inheritdoc
|
|
26
|
+
*/
|
|
27
|
+
abstract downloadAsar(name: string, info: UpdateInfo, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
28
|
+
}
|
|
5
29
|
|
|
6
30
|
interface GitHubProviderOptions {
|
|
7
31
|
/**
|
|
8
|
-
*
|
|
9
|
-
|
|
32
|
+
* Github user name
|
|
33
|
+
*/
|
|
34
|
+
username: string;
|
|
35
|
+
/**
|
|
36
|
+
* Github repo name
|
|
37
|
+
*/
|
|
38
|
+
repo: string;
|
|
39
|
+
/**
|
|
40
|
+
* Github branch name that fetch version
|
|
41
|
+
* @default 'HEAD'
|
|
42
|
+
*/
|
|
43
|
+
branch?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Extra headers
|
|
10
46
|
*/
|
|
11
|
-
url: string;
|
|
12
47
|
extraHeaders?: Record<string, string>;
|
|
13
48
|
/**
|
|
14
|
-
*
|
|
49
|
+
* Custom url handler
|
|
15
50
|
*
|
|
16
|
-
* for Github, there are some {@link https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#
|
|
51
|
+
* for Github, there are some {@link https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#L40 public CDN links}
|
|
52
|
+
* @example
|
|
53
|
+
* (url, isDownloadAsar) => {
|
|
54
|
+
* if (isDownloadAsar) {
|
|
55
|
+
* url.hostname = 'mirror.ghproxy.com'
|
|
56
|
+
* url.pathname = 'https://github.com' + url.pathname
|
|
57
|
+
* return url
|
|
58
|
+
* }
|
|
59
|
+
* }
|
|
17
60
|
*/
|
|
18
61
|
urlHandler?: URLHandler;
|
|
19
62
|
}
|
|
20
|
-
declare class GitHubProvider
|
|
21
|
-
private ua;
|
|
63
|
+
declare class GitHubProvider extends BaseProvider {
|
|
22
64
|
name: string;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
65
|
+
private options;
|
|
66
|
+
/**
|
|
67
|
+
* Update Provider for Github repo
|
|
68
|
+
* - download update json from `https://raw.githubusercontent.com/{user}/{repo}/HEAD/{versionPath}`
|
|
69
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
|
|
70
|
+
*
|
|
71
|
+
* you can setup `urlHandler` in {@link GitHubProviderOptions} or `Updater` to modify url before request
|
|
72
|
+
* @param options provider options
|
|
73
|
+
*/
|
|
26
74
|
constructor(options: GitHubProviderOptions);
|
|
75
|
+
get urlHandler(): URLHandler | undefined;
|
|
76
|
+
set urlHandler(handler: URLHandler);
|
|
27
77
|
private parseURL;
|
|
28
|
-
|
|
29
|
-
|
|
78
|
+
/**
|
|
79
|
+
* @inheritdoc
|
|
80
|
+
*/
|
|
30
81
|
downloadJSON(versionPath: string): Promise<UpdateJSON>;
|
|
31
|
-
|
|
82
|
+
/**
|
|
83
|
+
* @inheritdoc
|
|
84
|
+
*/
|
|
85
|
+
downloadAsar(name: string, info: UpdateInfo, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
32
86
|
}
|
|
33
87
|
|
|
34
|
-
|
|
35
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Safe get value from header
|
|
90
|
+
* @param headers response header
|
|
91
|
+
* @param key target header key
|
|
92
|
+
*/
|
|
93
|
+
declare function getHeader(headers: Record<string, Arrayable<string>>, key: any): any;
|
|
94
|
+
/**
|
|
95
|
+
* Default function to download json and parse to UpdateJson
|
|
96
|
+
* @param url target url
|
|
97
|
+
* @param headers extra headers
|
|
98
|
+
*/
|
|
99
|
+
declare function defaultDownloadUpdateJSON(url: string, headers: Record<string, any>): Promise<UpdateJSON>;
|
|
100
|
+
/**
|
|
101
|
+
* Default function to download asar buffer,
|
|
102
|
+
* get total size from `Content-Length` header
|
|
103
|
+
* @param url target url
|
|
104
|
+
* @param headers extra headers
|
|
105
|
+
* @param onDownloading on downloading callback
|
|
106
|
+
*/
|
|
107
|
+
declare function defaultDownloadAsar(url: string, headers: Record<string, any>, onDownloading?: OnDownloading): Promise<Buffer>;
|
|
36
108
|
|
|
37
|
-
export { DownloadingInfo, GitHubProvider, type GitHubProviderOptions, IProvider, OnDownloading, URLHandler,
|
|
109
|
+
export { BaseProvider, DownloadingInfo, GitHubProvider, type GitHubProviderOptions, IProvider, OnDownloading, URLHandler, defaultDownloadAsar, defaultDownloadUpdateJSON, getHeader };
|
package/dist/provider.d.ts
CHANGED
|
@@ -1,37 +1,109 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import '@subframe7536/type-utils';
|
|
1
|
+
import { d as defaultIsLowerVersion, a as UpdateJSON, U as UpdateInfo } from './version-C4tF_trh.js';
|
|
2
|
+
import { I as IProvider, D as DownloadingInfo, U as URLHandler, O as OnDownloading } from './types-Bnc4jz6R.js';
|
|
3
|
+
import { f as defaultVerifySignature, a as defaultUnzipFile } from './zip-rm9ED9nU.js';
|
|
4
|
+
import { Arrayable } from '@subframe7536/type-utils';
|
|
5
|
+
|
|
6
|
+
declare abstract class BaseProvider implements IProvider {
|
|
7
|
+
name: string;
|
|
8
|
+
/**
|
|
9
|
+
* @inheritdoc
|
|
10
|
+
*/
|
|
11
|
+
isLowerVersion: typeof defaultIsLowerVersion;
|
|
12
|
+
/**
|
|
13
|
+
* @inheritdoc
|
|
14
|
+
*/
|
|
15
|
+
verifySignaure: typeof defaultVerifySignature;
|
|
16
|
+
/**
|
|
17
|
+
* @inheritdoc
|
|
18
|
+
*/
|
|
19
|
+
unzipFile: typeof defaultUnzipFile;
|
|
20
|
+
/**
|
|
21
|
+
* @inheritdoc
|
|
22
|
+
*/
|
|
23
|
+
abstract downloadJSON(versionPath: string): Promise<UpdateJSON>;
|
|
24
|
+
/**
|
|
25
|
+
* @inheritdoc
|
|
26
|
+
*/
|
|
27
|
+
abstract downloadAsar(name: string, info: UpdateInfo, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
28
|
+
}
|
|
5
29
|
|
|
6
30
|
interface GitHubProviderOptions {
|
|
7
31
|
/**
|
|
8
|
-
*
|
|
9
|
-
|
|
32
|
+
* Github user name
|
|
33
|
+
*/
|
|
34
|
+
username: string;
|
|
35
|
+
/**
|
|
36
|
+
* Github repo name
|
|
37
|
+
*/
|
|
38
|
+
repo: string;
|
|
39
|
+
/**
|
|
40
|
+
* Github branch name that fetch version
|
|
41
|
+
* @default 'HEAD'
|
|
42
|
+
*/
|
|
43
|
+
branch?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Extra headers
|
|
10
46
|
*/
|
|
11
|
-
url: string;
|
|
12
47
|
extraHeaders?: Record<string, string>;
|
|
13
48
|
/**
|
|
14
|
-
*
|
|
49
|
+
* Custom url handler
|
|
15
50
|
*
|
|
16
|
-
* for Github, there are some {@link https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#
|
|
51
|
+
* for Github, there are some {@link https://github.com/XIU2/UserScript/blob/master/GithubEnhanced-High-Speed-Download.user.js#L40 public CDN links}
|
|
52
|
+
* @example
|
|
53
|
+
* (url, isDownloadAsar) => {
|
|
54
|
+
* if (isDownloadAsar) {
|
|
55
|
+
* url.hostname = 'mirror.ghproxy.com'
|
|
56
|
+
* url.pathname = 'https://github.com' + url.pathname
|
|
57
|
+
* return url
|
|
58
|
+
* }
|
|
59
|
+
* }
|
|
17
60
|
*/
|
|
18
61
|
urlHandler?: URLHandler;
|
|
19
62
|
}
|
|
20
|
-
declare class GitHubProvider
|
|
21
|
-
private ua;
|
|
63
|
+
declare class GitHubProvider extends BaseProvider {
|
|
22
64
|
name: string;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
65
|
+
private options;
|
|
66
|
+
/**
|
|
67
|
+
* Update Provider for Github repo
|
|
68
|
+
* - download update json from `https://raw.githubusercontent.com/{user}/{repo}/HEAD/{versionPath}`
|
|
69
|
+
* - download update asar from `https://github.com/{user}/{repo}/releases/download/v{version}/{name}-{version}.asar.gz`
|
|
70
|
+
*
|
|
71
|
+
* you can setup `urlHandler` in {@link GitHubProviderOptions} or `Updater` to modify url before request
|
|
72
|
+
* @param options provider options
|
|
73
|
+
*/
|
|
26
74
|
constructor(options: GitHubProviderOptions);
|
|
75
|
+
get urlHandler(): URLHandler | undefined;
|
|
76
|
+
set urlHandler(handler: URLHandler);
|
|
27
77
|
private parseURL;
|
|
28
|
-
|
|
29
|
-
|
|
78
|
+
/**
|
|
79
|
+
* @inheritdoc
|
|
80
|
+
*/
|
|
30
81
|
downloadJSON(versionPath: string): Promise<UpdateJSON>;
|
|
31
|
-
|
|
82
|
+
/**
|
|
83
|
+
* @inheritdoc
|
|
84
|
+
*/
|
|
85
|
+
downloadAsar(name: string, info: UpdateInfo, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
|
|
32
86
|
}
|
|
33
87
|
|
|
34
|
-
|
|
35
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Safe get value from header
|
|
90
|
+
* @param headers response header
|
|
91
|
+
* @param key target header key
|
|
92
|
+
*/
|
|
93
|
+
declare function getHeader(headers: Record<string, Arrayable<string>>, key: any): any;
|
|
94
|
+
/**
|
|
95
|
+
* Default function to download json and parse to UpdateJson
|
|
96
|
+
* @param url target url
|
|
97
|
+
* @param headers extra headers
|
|
98
|
+
*/
|
|
99
|
+
declare function defaultDownloadUpdateJSON(url: string, headers: Record<string, any>): Promise<UpdateJSON>;
|
|
100
|
+
/**
|
|
101
|
+
* Default function to download asar buffer,
|
|
102
|
+
* get total size from `Content-Length` header
|
|
103
|
+
* @param url target url
|
|
104
|
+
* @param headers extra headers
|
|
105
|
+
* @param onDownloading on downloading callback
|
|
106
|
+
*/
|
|
107
|
+
declare function defaultDownloadAsar(url: string, headers: Record<string, any>, onDownloading?: OnDownloading): Promise<Buffer>;
|
|
36
108
|
|
|
37
|
-
export { DownloadingInfo, GitHubProvider, type GitHubProviderOptions, IProvider, OnDownloading, URLHandler,
|
|
109
|
+
export { BaseProvider, DownloadingInfo, GitHubProvider, type GitHubProviderOptions, IProvider, OnDownloading, URLHandler, defaultDownloadAsar, defaultDownloadUpdateJSON, getHeader };
|