/
TelemetryPolicy.ts
62 lines (56 loc) · 1.53 KB
/
TelemetryPolicy.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
import {
BaseRequestPolicy,
HttpHeaders,
HttpOperationResponse,
isNode,
RequestPolicy,
RequestPolicyOptions,
WebResource
} from "@azure/core-http";
import { HeaderConstants } from "../utils/constants";
/**
* TelemetryPolicy is a policy used to tag user-agent header for every requests.
*
* @class TelemetryPolicy
* @extends {BaseRequestPolicy}
*/
export class TelemetryPolicy extends BaseRequestPolicy {
/**
* Telemetry string.
*
* @type {string}
* @memberof TelemetryPolicy
*/
public readonly telemetry: string;
/**
* Creates an instance of TelemetryPolicy.
* @param {RequestPolicy} nextPolicy
* @param {RequestPolicyOptions} options
* @param {TelemetryOptions} [telemetry]
* @memberof TelemetryPolicy
*/
constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, telemetry: string) {
super(nextPolicy, options);
this.telemetry = telemetry;
}
/**
* Sends out request.
*
* @param {WebResource} request
* @returns {Promise<HttpOperationResponse>}
* @memberof TelemetryPolicy
*/
public async sendRequest(request: WebResource): Promise<HttpOperationResponse> {
if (isNode) {
if (!request.headers) {
request.headers = new HttpHeaders();
}
if (!request.headers.get(HeaderConstants.USER_AGENT)) {
request.headers.set(HeaderConstants.USER_AGENT, this.telemetry);
}
}
return this._nextPolicy.sendRequest(request);
}
}