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/dist/provider.cjs CHANGED
@@ -1,58 +1,16 @@
1
- "use strict";
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
- // src/provider/index.ts
21
- var provider_exports = {};
22
- __export(provider_exports, {
23
- GitHubProvider: () => GitHubProvider,
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
- // src/utils/electron.ts
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
- // src/utils/zip.ts
50
- var import_node_fs2 = require("fs");
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/utils/unzip.ts
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 isLowerVersionDefault(oldVer, newVer) {
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.size && j.version);
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/utils/crypto/decrypt.ts
107
- var import_node_crypto2 = require("crypto");
108
-
109
- // src/utils/crypto/utils.ts
110
- var import_node_crypto = require("crypto");
111
- function hashString(data, length) {
112
- const hash = (0, import_node_crypto.createHash)("SHA256").update(data).digest("binary");
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
- // src/utils/crypto/encrypt.ts
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 = import_electron2.net.request({ url, method: "GET", redirect: "follow" });
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 downloadUpdateJSONDefault(url, headers) {
153
- return await downlaodFn(url, headers, (resp, resolve, reject) => {
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 (ignore) {
98
+ } catch {
165
99
  reject(new Error("invalid update json"));
166
100
  }
167
101
  });
168
102
  });
169
103
  }
170
- async function downloadAsarBufferDefault(url, headers, total, onDownloading) {
171
- let current = 0;
172
- return await downlaodFn(url, headers, (resp, resolve) => {
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
- current += chunk.length;
176
- onDownloading?.({ percent: `${+(current / total).toFixed(2) * 100}%`, total, current });
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
- urlHandler;
188
- url;
189
- extraHeaders;
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
- this.url = new URL(options.url);
192
- this.extraHeaders = options.extraHeaders;
193
- this.urlHandler = options.urlHandler;
194
- if (this.url.host !== "github.com") {
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
- parseURL(isDownloadAsar, path) {
202
- const url = this.url.href + path;
203
- return this.urlHandler ? this.urlHandler(url, isDownloadAsar) : url;
194
+ get urlHandler() {
195
+ return this.options.urlHandler;
204
196
  }
205
- isLowerVersion = isLowerVersionDefault;
206
- verifySignaure = verifySignatureDefault;
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 downloadUpdateJSONDefault(
209
- this.parseURL(false, `HEAD/${versionPath}`),
210
- { userAgent: this.ua, accept: "application/json", ...this.extraHeaders }
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
- async downloadBuffer(name, { version, size }, onDownloading) {
214
- return await downloadAsarBufferDefault(
215
- this.parseURL(true, `releases/download/v${version}/${name}-${version}.asar.gz`),
216
- { userAgent: this.ua, accept: "application/octet-stream", ...this.extraHeaders },
217
- size,
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
- // Annotate the CommonJS export names for ESM import in node:
223
- 0 && (module.exports = {
224
- GitHubProvider,
225
- downloadAsarBufferDefault,
226
- downloadUpdateJSONDefault
227
- });
227
+
228
+ exports.BaseProvider = BaseProvider;
229
+ exports.GitHubProvider = GitHubProvider;
230
+ exports.defaultDownloadAsar = defaultDownloadAsar;
231
+ exports.defaultDownloadUpdateJSON = defaultDownloadUpdateJSON;
232
+ exports.getHeader = getHeader;
@@ -1,37 +1,109 @@
1
- import { i as isLowerVersionDefault, U as UpdateJSON, a as UpdateInfo } from './version-CffZWDhZ.cjs';
2
- import { v as verifySignatureDefault } from './decrypt-BNBcodiO.cjs';
3
- import { U as URLHandler, I as IProvider, D as DownloadingInfo, O as OnDownloading } from './types-DxPmQmaq.cjs';
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
- * github repo root url
9
- * @example 'https://github.com/electron/electron'
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
- * custom url handler
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#L34 public CDN links}
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 implements IProvider {
21
- private ua;
63
+ declare class GitHubProvider extends BaseProvider {
22
64
  name: string;
23
- urlHandler?: URLHandler;
24
- private url;
25
- private extraHeaders?;
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
- isLowerVersion: typeof isLowerVersionDefault;
29
- verifySignaure: typeof verifySignatureDefault;
78
+ /**
79
+ * @inheritdoc
80
+ */
30
81
  downloadJSON(versionPath: string): Promise<UpdateJSON>;
31
- downloadBuffer(name: string, { version, size }: UpdateInfo, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
82
+ /**
83
+ * @inheritdoc
84
+ */
85
+ downloadAsar(name: string, info: UpdateInfo, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
32
86
  }
33
87
 
34
- declare function downloadUpdateJSONDefault(url: string, headers: Record<string, any>): Promise<UpdateJSON>;
35
- declare function downloadAsarBufferDefault(url: string, headers: Record<string, any>, total: number, onDownloading?: OnDownloading): Promise<Buffer>;
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, downloadAsarBufferDefault, downloadUpdateJSONDefault };
109
+ export { BaseProvider, DownloadingInfo, GitHubProvider, type GitHubProviderOptions, IProvider, OnDownloading, URLHandler, defaultDownloadAsar, defaultDownloadUpdateJSON, getHeader };
@@ -1,37 +1,109 @@
1
- import { i as isLowerVersionDefault, U as UpdateJSON, a as UpdateInfo } from './version-CffZWDhZ.js';
2
- import { v as verifySignatureDefault } from './decrypt-BNBcodiO.js';
3
- import { U as URLHandler, I as IProvider, D as DownloadingInfo, O as OnDownloading } from './types-seJf3Wbc.js';
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
- * github repo root url
9
- * @example 'https://github.com/electron/electron'
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
- * custom url handler
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#L34 public CDN links}
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 implements IProvider {
21
- private ua;
63
+ declare class GitHubProvider extends BaseProvider {
22
64
  name: string;
23
- urlHandler?: URLHandler;
24
- private url;
25
- private extraHeaders?;
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
- isLowerVersion: typeof isLowerVersionDefault;
29
- verifySignaure: typeof verifySignatureDefault;
78
+ /**
79
+ * @inheritdoc
80
+ */
30
81
  downloadJSON(versionPath: string): Promise<UpdateJSON>;
31
- downloadBuffer(name: string, { version, size }: UpdateInfo, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
82
+ /**
83
+ * @inheritdoc
84
+ */
85
+ downloadAsar(name: string, info: UpdateInfo, onDownloading?: (info: DownloadingInfo) => void): Promise<Buffer>;
32
86
  }
33
87
 
34
- declare function downloadUpdateJSONDefault(url: string, headers: Record<string, any>): Promise<UpdateJSON>;
35
- declare function downloadAsarBufferDefault(url: string, headers: Record<string, any>, total: number, onDownloading?: OnDownloading): Promise<Buffer>;
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, downloadAsarBufferDefault, downloadUpdateJSONDefault };
109
+ export { BaseProvider, DownloadingInfo, GitHubProvider, type GitHubProviderOptions, IProvider, OnDownloading, URLHandler, defaultDownloadAsar, defaultDownloadUpdateJSON, getHeader };