protected async makeRequest()

in src/services/mapiClient.ts [117:160]


    protected async makeRequest<T>(httpRequest: HttpRequest): Promise<T> {
        const authHeader = httpRequest.headers.find(header => header.name === KnownHttpHeaders.Authorization);
        const portalHeader = httpRequest.headers.find(header => header.name === Constants.portalHeaderName);

        if (!authHeader?.value) {
            const accessToken = await this.authenticator.getAccessTokenAsString();

            if (accessToken) {
                httpRequest.headers.push({ name: KnownHttpHeaders.Authorization, value: `${accessToken}` });
            } else {
                if (!portalHeader) {
                    httpRequest.headers.push(await this.getPortalHeader("unauthorized"));
                } else {
                    portalHeader.value = `${portalHeader.value}-unauthorized`;
                }
            }
        }

        if (!portalHeader && httpRequest.method !== HttpMethod.head) {
            httpRequest.headers.push(await this.getPortalHeader());
        }

        // Do nothing if absolute URL
        if (!httpRequest.url.startsWith("https://") && !httpRequest.url.startsWith("http://")) {
            httpRequest.url = `${this.managementApiUrl}${Utils.ensureLeadingSlash(httpRequest.url)}`;
        }

        const url = new URL(httpRequest.url);

        if (!url.searchParams.has("api-version")) {
            httpRequest.url = Utils.addQueryParameter(httpRequest.url, `api-version=${Constants.managementApiVersion}`);
        }

        let response: HttpResponse<T>;

        try {
            response = await this.httpClient.send<T>(httpRequest);
        }
        catch (error) {
            throw new Error(`Unable to complete request. Error: ${error.message}`);
        }

        return await this.handleResponse<T>(response, httpRequest.url);
    }