UNPKG

4.98 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 });
9var tslib_1 = require("tslib");
10/**
11 * @module TelemetryHandler
12 */
13var GraphRequestUtil_1 = require("../GraphRequestUtil");
14var Version_1 = require("../Version");
15var MiddlewareControl_1 = require("./MiddlewareControl");
16var MiddlewareUtil_1 = require("./MiddlewareUtil");
17var TelemetryHandlerOptions_1 = require("./options/TelemetryHandlerOptions");
18/**
19 * @class
20 * @implements Middleware
21 * Class for TelemetryHandler
22 */
23var TelemetryHandler = /** @class */ (function () {
24 function TelemetryHandler() {
25 }
26 /**
27 * @public
28 * @async
29 * To execute the current middleware
30 * @param {Context} context - The context object of the request
31 * @returns A Promise that resolves to nothing
32 */
33 TelemetryHandler.prototype.execute = function (context) {
34 return tslib_1.__awaiter(this, void 0, void 0, function () {
35 var url, clientRequestId, sdkVersionValue, options, featureUsage, error_1;
36 return tslib_1.__generator(this, function (_a) {
37 switch (_a.label) {
38 case 0:
39 _a.trys.push([0, 2, , 3]);
40 url = typeof context.request === "string" ? context.request : context.request.url;
41 if (GraphRequestUtil_1.isGraphURL(url)) {
42 clientRequestId = MiddlewareUtil_1.getRequestHeader(context.request, context.options, TelemetryHandler.CLIENT_REQUEST_ID_HEADER);
43 if (!clientRequestId) {
44 clientRequestId = MiddlewareUtil_1.generateUUID();
45 MiddlewareUtil_1.setRequestHeader(context.request, context.options, TelemetryHandler.CLIENT_REQUEST_ID_HEADER, clientRequestId);
46 }
47 sdkVersionValue = TelemetryHandler.PRODUCT_NAME + "/" + 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 += " (" + TelemetryHandler.FEATURE_USAGE_STRING + "=" + featureUsage + ")";
55 }
56 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 case 2:
66 error_1 = _a.sent();
67 throw error_1;
68 case 3: return [2 /*return*/];
69 }
70 });
71 });
72 };
73 /**
74 * @public
75 * To set the next middleware in the chain
76 * @param {Middleware} next - The middleware instance
77 * @returns Nothing
78 */
79 TelemetryHandler.prototype.setNext = function (next) {
80 this.nextMiddleware = next;
81 };
82 /**
83 * @private
84 * @static
85 * A member holding the name of the client request id header
86 */
87 TelemetryHandler.CLIENT_REQUEST_ID_HEADER = "client-request-id";
88 /**
89 * @private
90 * @static
91 * A member holding the name of the sdk version header
92 */
93 TelemetryHandler.SDK_VERSION_HEADER = "SdkVersion";
94 /**
95 * @private
96 * @static
97 * A member holding the language prefix for the sdk version header value
98 */
99 TelemetryHandler.PRODUCT_NAME = "graph-js";
100 /**
101 * @private
102 * @static
103 * A member holding the key for the feature usage metrics
104 */
105 TelemetryHandler.FEATURE_USAGE_STRING = "featureUsage";
106 return TelemetryHandler;
107}());
108exports.TelemetryHandler = TelemetryHandler;
109//# sourceMappingURL=TelemetryHandler.js.map
\No newline at end of file