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/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/provider/github.ts
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/download.ts
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;
@@ -1,7 +1,8 @@
1
- import { I as IProvider, d as UpdateJSONWithURL, f as UpdateInfoWithURL, D as DownloadingInfo, g as URLHandler, O as OnDownloading } from './types-BPH66pNz.cjs';
2
- import { f as defaultVerifySignature, a as defaultUnzipFile } from './zip-rm9ED9nU.cjs';
3
- import { d as defaultIsLowerVersion, U as UpdateJSON } from './version-DcFMG3pT.cjs';
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 };
@@ -1,7 +1,8 @@
1
- import { I as IProvider, d as UpdateJSONWithURL, f as UpdateInfoWithURL, D as DownloadingInfo, g as URLHandler, O as OnDownloading } from './types-DQKdsHc_.js';
2
- import { f as defaultVerifySignature, a as defaultUnzipFile } from './zip-rm9ED9nU.js';
3
- import { d as defaultIsLowerVersion, U as UpdateJSON } from './version-DcFMG3pT.js';
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-PUVBFHOK.js';
2
- import { isUpdateJSON, defaultIsLowerVersion } from './chunk-AAAM44NW.js';
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 { a as UpdateInfo } from './version-DcFMG3pT.js';
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<UpdateJSONWithURL>;
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 { type DownloadingInfo as D, type IProvider as I, type Logger as L, type OnDownloading as O, type UpdateInfoWithExtraVersion as U, type UpdaterUnavailableCode as a, UpdaterError as b, type UpdaterOption as c, type UpdateJSONWithURL as d, type UpdaterErrorCode as e, type UpdateInfoWithURL as f, type URLHandler as g };
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 { a as UpdateInfo } from './version-DcFMG3pT.cjs';
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<UpdateJSONWithURL>;
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 { type DownloadingInfo as D, type IProvider as I, type Logger as L, type OnDownloading as O, type UpdateInfoWithExtraVersion as U, type UpdaterUnavailableCode as a, UpdaterError as b, type UpdaterOption as c, type UpdateJSONWithURL as d, type UpdaterErrorCode as e, type UpdateInfoWithURL as f, type URLHandler as g };
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 hashBuffer(data, length) {
189
- const hash = crypto__default.default.createHash("SHA256").update(data).digest("binary");
190
- return Buffer.from(hash).subarray(0, length);
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 defaultVerifySignature(buffer, version, signature, cert) {
205
- try {
206
- const [sig, ver] = aesDecrypt(signature, hashBuffer(cert, 32), hashBuffer(buffer, 16)).split("%");
207
- if (ver !== version) {
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 { e as aesDecrypt, b as aesEncrypt, c as defaultSignature, a as defaultUnzipFile, f as defaultVerifySignature, d as defaultZipFile, h as hashBuffer } from './zip-rm9ED9nU.cjs';
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 { e as aesDecrypt, b as aesEncrypt, c as defaultSignature, a as defaultUnzipFile, f as defaultVerifySignature, d as defaultZipFile, h as hashBuffer } from './zip-rm9ED9nU.js';
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-PUVBFHOK.js';
2
+ export { aesDecrypt, aesEncrypt, defaultSignature, defaultUnzipFile, defaultVerifySignature, defaultZipFile, hashBuffer } from './chunk-XGWQQVIZ.js';
3
3
  export { defaultIsLowerVersion, defaultVersionJsonGenerator, isUpdateJSON, parseVersion } from './chunk-AAAM44NW.js';