1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-11-14 10:26:19 +01:00

[PM-13804] Add new Is-Prerelease header to requests (#11605)

* Added new Is-Beta header

* Updated beta to prerelease
This commit is contained in:
Todd Martin 2024-11-05 12:01:29 -05:00 committed by GitHub
parent 9d2c57d3d9
commit eb95d437a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 55 additions and 32 deletions

View File

@ -3,6 +3,7 @@
export type SharedFlags = { export type SharedFlags = {
showPasswordless?: boolean; showPasswordless?: boolean;
sdk?: boolean; sdk?: boolean;
prereleaseBuild?: boolean;
}; };
// required to avoid linting errors when there are no flags // required to avoid linting errors when there are no flags

View File

@ -126,6 +126,7 @@ import { AppIdService } from "../platform/abstractions/app-id.service";
import { EnvironmentService } from "../platform/abstractions/environment.service"; import { EnvironmentService } from "../platform/abstractions/environment.service";
import { LogService } from "../platform/abstractions/log.service"; import { LogService } from "../platform/abstractions/log.service";
import { PlatformUtilsService } from "../platform/abstractions/platform-utils.service"; import { PlatformUtilsService } from "../platform/abstractions/platform-utils.service";
import { flagEnabled } from "../platform/misc/flags";
import { Utils } from "../platform/misc/utils"; import { Utils } from "../platform/misc/utils";
import { SyncResponse } from "../platform/sync"; import { SyncResponse } from "../platform/sync";
import { UserId } from "../types/guid"; import { UserId } from "../types/guid";
@ -1843,44 +1844,20 @@ export class ApiService implements ApiServiceAbstraction {
const requestUrl = const requestUrl =
apiUrl + Utils.normalizePath(pathParts[0]) + (pathParts.length > 1 ? `?${pathParts[1]}` : ""); apiUrl + Utils.normalizePath(pathParts[0]) + (pathParts.length > 1 ? `?${pathParts[1]}` : "");
const headers = new Headers({ const [requestHeaders, requestBody] = await this.buildHeadersAndBody(
"Device-Type": this.deviceType, authed,
}); hasResponse,
if (this.customUserAgent != null) { alterHeaders,
headers.set("User-Agent", this.customUserAgent); body,
} );
const requestInit: RequestInit = { const requestInit: RequestInit = {
cache: "no-store", cache: "no-store",
credentials: await this.getCredentials(), credentials: await this.getCredentials(),
method: method, method: method,
}; };
requestInit.headers = requestHeaders;
if (authed) { requestInit.body = requestBody;
const authHeader = await this.getActiveBearerToken();
headers.set("Authorization", "Bearer " + authHeader);
}
if (body != null) {
if (typeof body === "string") {
requestInit.body = body;
headers.set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
} else if (typeof body === "object") {
if (body instanceof FormData) {
requestInit.body = body;
} else {
headers.set("Content-Type", "application/json; charset=utf-8");
requestInit.body = JSON.stringify(body);
}
}
}
if (hasResponse) {
headers.set("Accept", "application/json");
}
if (alterHeaders != null) {
alterHeaders(headers);
}
requestInit.headers = headers;
const response = await this.fetch(new Request(requestUrl, requestInit)); const response = await this.fetch(new Request(requestUrl, requestInit));
const responseType = response.headers.get("content-type"); const responseType = response.headers.get("content-type");
@ -1897,6 +1874,51 @@ export class ApiService implements ApiServiceAbstraction {
} }
} }
private async buildHeadersAndBody(
authed: boolean,
hasResponse: boolean,
body: any,
alterHeaders: (headers: Headers) => void,
): Promise<[Headers, any]> {
let requestBody: any = null;
const headers = new Headers({
"Device-Type": this.deviceType,
});
if (flagEnabled("prereleaseBuild")) {
headers.set("Is-Prerelease", "true");
}
if (this.customUserAgent != null) {
headers.set("User-Agent", this.customUserAgent);
}
if (hasResponse) {
headers.set("Accept", "application/json");
}
if (alterHeaders != null) {
alterHeaders(headers);
}
if (authed) {
const authHeader = await this.getActiveBearerToken();
headers.set("Authorization", "Bearer " + authHeader);
}
if (body != null) {
if (typeof body === "string") {
requestBody = body;
headers.set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
} else if (typeof body === "object") {
if (body instanceof FormData) {
requestBody = body;
} else {
headers.set("Content-Type", "application/json; charset=utf-8");
requestBody = JSON.stringify(body);
}
}
}
return [headers, requestBody];
}
private async handleError( private async handleError(
response: Response, response: Response,
tokenError: boolean, tokenError: boolean,