UNPKG

4.82 kBJavaScriptView Raw
1"use strict";
2/**
3 * -------------------------------------------------------------------------------------------
4 * Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License.
5 * See License in the project root for license information.
6 * -------------------------------------------------------------------------------------------
7 */
8Object.defineProperty(exports, "__esModule", { value: true });
9exports.TelemetryHandler = void 0;
10var tslib_1 = require("tslib");
11/**
12 * @module TelemetryHandler
13 */
14var GraphRequestUtil_1 = require("../GraphRequestUtil");
15var Version_1 = require("../Version");
16var MiddlewareControl_1 = require("./MiddlewareControl");
17var MiddlewareUtil_1 = require("./MiddlewareUtil");
18var TelemetryHandlerOptions_1 = require("./options/TelemetryHandlerOptions");
19/**
20 * @class
21 * @implements Middleware
22 * Class for TelemetryHandler
23 */
24var TelemetryHandler = /** @class */ (function () {
25 function TelemetryHandler() {
26 }
27 /**
28 * @public
29 * @async
30 * To execute the current middleware
31 * @param {Context} context - The context object of the request
32 * @returns A Promise that resolves to nothing
33 */
34 TelemetryHandler.prototype.execute = function (context) {
35 return tslib_1.__awaiter(this, void 0, void 0, function () {
36 var url, clientRequestId, sdkVersionValue, options, featureUsage;
37 return tslib_1.__generator(this, function (_a) {
38 switch (_a.label) {
39 case 0:
40 url = typeof context.request === "string" ? context.request : context.request.url;
41 if ((0, GraphRequestUtil_1.isGraphURL)(url) || (context.customHosts && (0, GraphRequestUtil_1.isCustomHost)(url, context.customHosts))) {
42 clientRequestId = (0, MiddlewareUtil_1.getRequestHeader)(context.request, context.options, TelemetryHandler.CLIENT_REQUEST_ID_HEADER);
43 if (!clientRequestId) {
44 clientRequestId = (0, MiddlewareUtil_1.generateUUID)();
45 (0, MiddlewareUtil_1.setRequestHeader)(context.request, context.options, TelemetryHandler.CLIENT_REQUEST_ID_HEADER, clientRequestId);
46 }
47 sdkVersionValue = "".concat(TelemetryHandler.PRODUCT_NAME, "/").concat(Version_1.PACKAGE_VERSION);
48 options = void 0;
49 if (context.middlewareControl instanceof MiddlewareControl_1.MiddlewareControl) {
50 options = context.middlewareControl.getMiddlewareOptions(TelemetryHandlerOptions_1.TelemetryHandlerOptions);
51 }
52 if (options) {
53 featureUsage = options.getFeatureUsage();
54 sdkVersionValue += " (".concat(TelemetryHandler.FEATURE_USAGE_STRING, "=").concat(featureUsage, ")");
55 }
56 (0, MiddlewareUtil_1.appendRequestHeader)(context.request, context.options, TelemetryHandler.SDK_VERSION_HEADER, sdkVersionValue);
57 }
58 else {
59 // Remove telemetry headers if present during redirection.
60 delete context.options.headers[TelemetryHandler.CLIENT_REQUEST_ID_HEADER];
61 delete context.options.headers[TelemetryHandler.SDK_VERSION_HEADER];
62 }
63 return [4 /*yield*/, this.nextMiddleware.execute(context)];
64 case 1: return [2 /*return*/, _a.sent()];
65 }
66 });
67 });
68 };
69 /**
70 * @public
71 * To set the next middleware in the chain
72 * @param {Middleware} next - The middleware instance
73 * @returns Nothing
74 */
75 TelemetryHandler.prototype.setNext = function (next) {
76 this.nextMiddleware = next;
77 };
78 /**
79 * @private
80 * @static
81 * A member holding the name of the client request id header
82 */
83 TelemetryHandler.CLIENT_REQUEST_ID_HEADER = "client-request-id";
84 /**
85 * @private
86 * @static
87 * A member holding the name of the sdk version header
88 */
89 TelemetryHandler.SDK_VERSION_HEADER = "SdkVersion";
90 /**
91 * @private
92 * @static
93 * A member holding the language prefix for the sdk version header value
94 */
95 TelemetryHandler.PRODUCT_NAME = "graph-js";
96 /**
97 * @private
98 * @static
99 * A member holding the key for the feature usage metrics
100 */
101 TelemetryHandler.FEATURE_USAGE_STRING = "featureUsage";
102 return TelemetryHandler;
103}());
104exports.TelemetryHandler = TelemetryHandler;
105//# sourceMappingURL=TelemetryHandler.js.map
\No newline at end of file