diff --git a/docs/Developer API.md b/docs/Developer API.md
index 7f49195a454..9e73f89c7d6 100644
--- a/docs/Developer API.md
+++ b/docs/Developer API.md
@@ -3405,17 +3405,23 @@ Please note — on macOS [you need to register an `open-url` event handler](http
## electron-updater/out/GitHubProvider
* [electron-updater/out/GitHubProvider](#module_electron-updater/out/GitHubProvider)
- * [.GitHubProvider](#GitHubProvider) ⇐ [Provider](Auto-Update#Provider)
+ * [.BaseGitHubProvider](#BaseGitHubProvider) ⇐ [Provider](Auto-Update#Provider)
+ * [.GitHubProvider](#GitHubProvider) ⇐ [BaseGitHubProvider](#BaseGitHubProvider)
* [`.getLatestVersion()`](#module_electron-updater/out/GitHubProvider.GitHubProvider+getLatestVersion) ⇒ Promise<[UpdateInfo](Publishing-Artifacts#UpdateInfo)>
* [`.getUpdateFile(versionInfo)`](#module_electron-updater/out/GitHubProvider.GitHubProvider+getUpdateFile) ⇒ Promise<[FileInfo](Auto-Update#FileInfo)>
-
+
-### GitHubProvider ⇐ [Provider](Auto-Update#Provider)
+### BaseGitHubProvider ⇐ [Provider](Auto-Update#Provider)
**Kind**: class of [electron-updater/out/GitHubProvider](#module_electron-updater/out/GitHubProvider)
**Extends**: [Provider](Auto-Update#Provider)
+
-* [.GitHubProvider](#GitHubProvider) ⇐ [Provider](Auto-Update#Provider)
+### GitHubProvider ⇐ [BaseGitHubProvider](#BaseGitHubProvider)
+**Kind**: class of [electron-updater/out/GitHubProvider](#module_electron-updater/out/GitHubProvider)
+**Extends**: [BaseGitHubProvider](#BaseGitHubProvider)
+
+* [.GitHubProvider](#GitHubProvider) ⇐ [BaseGitHubProvider](#BaseGitHubProvider)
* [`.getLatestVersion()`](#module_electron-updater/out/GitHubProvider.GitHubProvider+getLatestVersion) ⇒ Promise<[UpdateInfo](Publishing-Artifacts#UpdateInfo)>
* [`.getUpdateFile(versionInfo)`](#module_electron-updater/out/GitHubProvider.GitHubProvider+getUpdateFile) ⇒ Promise<[FileInfo](Auto-Update#FileInfo)>
@@ -3523,23 +3529,47 @@ Start downloading update manually. You can use this method if `autoDownload` opt
## electron-updater/out/PrivateGitHubProvider
* [electron-updater/out/PrivateGitHubProvider](#module_electron-updater/out/PrivateGitHubProvider)
- * [.PrivateGitHubProvider](#PrivateGitHubProvider) ⇐ [Provider](Auto-Update#Provider)
- * [`.getLatestVersion()`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getLatestVersion) ⇒ Promise<[UpdateInfo](Publishing-Artifacts#UpdateInfo)>
+ * [`.Asset`](#Asset)
+ * [`.PrivateGitHubUpdateInfo`](#PrivateGitHubUpdateInfo) ⇐ [UpdateInfo](Publishing-Artifacts#UpdateInfo)
+ * [.PrivateGitHubProvider](#PrivateGitHubProvider) ⇐ [BaseGitHubProvider](#BaseGitHubProvider)
+ * [`.getLatestVersion()`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getLatestVersion) ⇒ Promise<[PrivateGitHubUpdateInfo](#PrivateGitHubUpdateInfo)>
* [`.getUpdateFile(versionInfo)`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getUpdateFile) ⇒ Promise<[FileInfo](Auto-Update#FileInfo)>
+
+
+### `Asset`
+**Kind**: interface of [electron-updater/out/PrivateGitHubProvider](#module_electron-updater/out/PrivateGitHubProvider)
+**Properties**
+
+| Name | Type |
+| --- | --- |
+| **name**| string
|
+| **url**| string
|
+
+
+
+### `PrivateGitHubUpdateInfo` ⇐ [UpdateInfo](Publishing-Artifacts#UpdateInfo)
+**Kind**: interface of [electron-updater/out/PrivateGitHubProvider](#module_electron-updater/out/PrivateGitHubProvider)
+**Extends**: [UpdateInfo](Publishing-Artifacts#UpdateInfo)
+**Properties**
+
+| Name | Type |
+| --- | --- |
+| **assets**| Array<[Asset](#Asset)>
|
+
-### PrivateGitHubProvider ⇐ [Provider](Auto-Update#Provider)
+### PrivateGitHubProvider ⇐ [BaseGitHubProvider](#BaseGitHubProvider)
**Kind**: class of [electron-updater/out/PrivateGitHubProvider](#module_electron-updater/out/PrivateGitHubProvider)
-**Extends**: [Provider](Auto-Update#Provider)
+**Extends**: [BaseGitHubProvider](#BaseGitHubProvider)
-* [.PrivateGitHubProvider](#PrivateGitHubProvider) ⇐ [Provider](Auto-Update#Provider)
- * [`.getLatestVersion()`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getLatestVersion) ⇒ Promise<[UpdateInfo](Publishing-Artifacts#UpdateInfo)>
+* [.PrivateGitHubProvider](#PrivateGitHubProvider) ⇐ [BaseGitHubProvider](#BaseGitHubProvider)
+ * [`.getLatestVersion()`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getLatestVersion) ⇒ Promise<[PrivateGitHubUpdateInfo](#PrivateGitHubUpdateInfo)>
* [`.getUpdateFile(versionInfo)`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getUpdateFile) ⇒ Promise<[FileInfo](Auto-Update#FileInfo)>
-#### `privateGitHubProvider.getLatestVersion()` ⇒ Promise<[UpdateInfo](Publishing-Artifacts#UpdateInfo)>
+#### `privateGitHubProvider.getLatestVersion()` ⇒ Promise<[PrivateGitHubUpdateInfo](#PrivateGitHubUpdateInfo)>
**Kind**: instance method of [PrivateGitHubProvider](#PrivateGitHubProvider)
@@ -3548,7 +3578,7 @@ Start downloading update manually. You can use this method if `autoDownload` opt
| Param | Type |
| --- | --- |
-| versionInfo | [UpdateInfo](Publishing-Artifacts#UpdateInfo)
|
+| versionInfo | [PrivateGitHubUpdateInfo](#PrivateGitHubUpdateInfo)
|
diff --git a/docs/Publishing Artifacts.md b/docs/Publishing Artifacts.md
index 3836d16491a..1ae4387abdb 100644
--- a/docs/Publishing Artifacts.md
+++ b/docs/Publishing Artifacts.md
@@ -137,6 +137,7 @@ GitHub options.
| vPrefixedTagName = true
| boolean
| Whether to use `v`-prefixed tag name. |
| host = "github.com"
| string
\| null
| The host (including the port if need). |
| protocol = https
| "https"
\| "http"
\| null
| The protocol. GitHub Publisher supports only `https`. |
+| token| string
\| null
| The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for [setFeedURL](module:electron-updater/out/AppUpdater.AppUpdater+setFeedURL). |
diff --git a/packages/electron-builder-http/src/httpExecutor.ts b/packages/electron-builder-http/src/httpExecutor.ts
index 00f2d4e7d1f..e903869751d 100644
--- a/packages/electron-builder-http/src/httpExecutor.ts
+++ b/packages/electron-builder-http/src/httpExecutor.ts
@@ -108,7 +108,8 @@ export abstract class HttpExecutor {
return
}
- this.doApiRequest(Object.assign({}, removeAuthHeader(options), parseUrl(redirectUrl)), cancellationToken, requestProcessor, redirectCount)
+ const newUrl = parseUrl(redirectUrl)
+ this.doApiRequest(removeAuthHeader(Object.assign({}, options, newUrl)), cancellationToken, requestProcessor, redirectCount)
.then(resolve)
.catch(reject)
return
@@ -159,11 +160,11 @@ export abstract class HttpExecutor {
if (redirectUrl != null) {
if (redirectCount < this.maxRedirects) {
const parsedUrl = parseUrl(redirectUrl)
- this.doDownload(Object.assign({}, removeAuthHeader(requestOptions), {
+ this.doDownload(removeAuthHeader(Object.assign({}, requestOptions, {
hostname: parsedUrl.hostname,
path: parsedUrl.path,
port: parsedUrl.port == null ? undefined : parsedUrl.port
- }), destination, redirectCount++, options, callback, onCancel)
+ })), destination, redirectCount++, options, callback, onCancel)
}
else {
callback(new Error(`Too many redirects (> ${this.maxRedirects})`))
@@ -306,13 +307,13 @@ export function dumpRequestOptions(options: RequestOptions): string {
return JSON.stringify(safe, null, 2)
}
+// requestOptions should be cloned already, modified in place
function removeAuthHeader(requestOptions: RequestOptions): RequestOptions {
- const result = Object.assign({}, requestOptions)
// github redirect to amazon s3 - avoid error "Only one auth mechanism allowed"
- if (result.headers != null) {
- result.headers = Object.assign({}, result.headers)
- delete result.headers.Authorization
- delete result.headers.authorization
+ if (requestOptions.headers != null && (requestOptions.hostname || "").includes(".amazonaws.")) {
+ requestOptions.headers = Object.assign({}, requestOptions.headers)
+ delete requestOptions.headers.Authorization
+ delete requestOptions.headers.authorization
}
- return result
+ return requestOptions
}
\ No newline at end of file
diff --git a/test/out/__snapshots__/nsisUpdaterTest.js.snap b/test/out/__snapshots__/nsisUpdaterTest.js.snap
index df97600b41d..18e47ca90d9 100644
--- a/test/out/__snapshots__/nsisUpdaterTest.js.snap
+++ b/test/out/__snapshots__/nsisUpdaterTest.js.snap
@@ -71,7 +71,7 @@ exports[`file url github private 1`] = `
Object {
"headers": Object {
"Accept": "application/octet-stream",
- "Authorization": "token fad40e29d04dc522e3ba03a5468339e191acd82d",
+ "Authorization": "token 30440323d382f1dcbe9313c20f8d718c4305174c",
},
"name": "TestApp-Setup-1.1.0.exe",
"sha2": "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2",
diff --git a/test/src/nsisUpdaterTest.ts b/test/src/nsisUpdaterTest.ts
index 794e7c225ba..fa4ec429ddc 100644
--- a/test/src/nsisUpdaterTest.ts
+++ b/test/src/nsisUpdaterTest.ts
@@ -167,7 +167,7 @@ test("file url github", async () => {
expect(actualEvents).toEqual(expectedEvents)
})
-test.skip("file url github private", async () => {
+test("file url github private", async () => {
const updater = new NsisUpdater()
updater.updateConfigPath = await writeUpdateConfig({
provider: "github",