@azure/msal-common 14.14.0 → 14.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/dist/account/AccountInfo.d.ts +66 -66
  2. package/dist/account/AccountInfo.mjs +77 -77
  3. package/dist/account/AuthToken.d.ts +17 -17
  4. package/dist/account/AuthToken.mjs +58 -58
  5. package/dist/account/CcsCredential.d.ts +9 -9
  6. package/dist/account/CcsCredential.mjs +8 -8
  7. package/dist/account/ClientCredentials.d.ts +19 -19
  8. package/dist/account/ClientInfo.d.ts +18 -18
  9. package/dist/account/ClientInfo.mjs +37 -37
  10. package/dist/account/TokenClaims.d.ts +83 -83
  11. package/dist/account/TokenClaims.mjs +20 -20
  12. package/dist/authority/Authority.d.ts +254 -254
  13. package/dist/authority/Authority.mjs +836 -836
  14. package/dist/authority/AuthorityFactory.d.ts +18 -18
  15. package/dist/authority/AuthorityFactory.mjs +28 -28
  16. package/dist/authority/AuthorityMetadata.d.ts +43 -43
  17. package/dist/authority/AuthorityMetadata.mjs +137 -137
  18. package/dist/authority/AuthorityOptions.d.ts +27 -27
  19. package/dist/authority/AuthorityOptions.mjs +18 -18
  20. package/dist/authority/AuthorityType.d.ts +10 -10
  21. package/dist/authority/AuthorityType.mjs +13 -13
  22. package/dist/authority/AzureRegion.d.ts +1 -1
  23. package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
  24. package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
  25. package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
  26. package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs +8 -8
  27. package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
  28. package/dist/authority/CloudInstanceDiscoveryResponse.mjs +8 -8
  29. package/dist/authority/ImdsOptions.d.ts +5 -5
  30. package/dist/authority/OIDCOptions.d.ts +8 -8
  31. package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
  32. package/dist/authority/OpenIdConfigResponse.mjs +10 -10
  33. package/dist/authority/ProtocolMode.d.ts +8 -8
  34. package/dist/authority/ProtocolMode.mjs +11 -11
  35. package/dist/authority/RegionDiscovery.d.ts +32 -32
  36. package/dist/authority/RegionDiscovery.mjs +106 -106
  37. package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
  38. package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
  39. package/dist/cache/CacheManager.d.ts +497 -497
  40. package/dist/cache/CacheManager.mjs +1249 -1249
  41. package/dist/cache/entities/AccessTokenEntity.d.ts +25 -25
  42. package/dist/cache/entities/AccountEntity.d.ts +106 -106
  43. package/dist/cache/entities/AccountEntity.mjs +240 -240
  44. package/dist/cache/entities/AppMetadataEntity.d.ts +11 -11
  45. package/dist/cache/entities/AuthorityMetadataEntity.d.ts +15 -15
  46. package/dist/cache/entities/CacheRecord.d.ts +13 -13
  47. package/dist/cache/entities/CredentialEntity.d.ts +30 -30
  48. package/dist/cache/entities/IdTokenEntity.d.ts +8 -8
  49. package/dist/cache/entities/RefreshTokenEntity.d.ts +7 -7
  50. package/dist/cache/entities/ServerTelemetryEntity.d.ts +6 -6
  51. package/dist/cache/entities/ThrottlingEntity.d.ts +7 -7
  52. package/dist/cache/interface/ICacheManager.d.ts +166 -166
  53. package/dist/cache/interface/ICachePlugin.d.ts +5 -5
  54. package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
  55. package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
  56. package/dist/cache/persistence/TokenCacheContext.mjs +25 -25
  57. package/dist/cache/utils/CacheHelpers.d.ts +94 -94
  58. package/dist/cache/utils/CacheHelpers.mjs +324 -324
  59. package/dist/cache/utils/CacheTypes.d.ts +69 -69
  60. package/dist/client/AuthorizationCodeClient.d.ts +74 -74
  61. package/dist/client/AuthorizationCodeClient.mjs +420 -420
  62. package/dist/client/BaseClient.d.ts +51 -51
  63. package/dist/client/BaseClient.mjs +100 -100
  64. package/dist/client/RefreshTokenClient.d.ts +35 -35
  65. package/dist/client/RefreshTokenClient.mjs +211 -211
  66. package/dist/client/SilentFlowClient.d.ts +27 -27
  67. package/dist/client/SilentFlowClient.mjs +133 -133
  68. package/dist/config/AppTokenProvider.d.ts +38 -38
  69. package/dist/config/ClientConfiguration.d.ts +150 -150
  70. package/dist/config/ClientConfiguration.mjs +95 -95
  71. package/dist/constants/AADServerParamKeys.d.ts +53 -53
  72. package/dist/constants/AADServerParamKeys.mjs +57 -57
  73. package/dist/crypto/ICrypto.d.ts +68 -68
  74. package/dist/crypto/ICrypto.mjs +36 -36
  75. package/dist/crypto/IGuidGenerator.d.ts +4 -4
  76. package/dist/crypto/JoseHeader.d.ts +22 -22
  77. package/dist/crypto/JoseHeader.mjs +37 -37
  78. package/dist/crypto/PopTokenGenerator.d.ts +59 -59
  79. package/dist/crypto/PopTokenGenerator.mjs +81 -81
  80. package/dist/crypto/SignedHttpRequest.d.ts +15 -15
  81. package/dist/error/AuthError.d.ts +44 -44
  82. package/dist/error/AuthError.mjs +46 -46
  83. package/dist/error/AuthErrorCodes.d.ts +5 -5
  84. package/dist/error/AuthErrorCodes.mjs +9 -9
  85. package/dist/error/CacheError.d.ts +20 -20
  86. package/dist/error/CacheError.mjs +24 -24
  87. package/dist/error/CacheErrorCodes.d.ts +2 -2
  88. package/dist/error/CacheErrorCodes.mjs +6 -6
  89. package/dist/error/ClientAuthError.d.ts +237 -237
  90. package/dist/error/ClientAuthError.mjs +249 -249
  91. package/dist/error/ClientAuthErrorCodes.d.ts +44 -44
  92. package/dist/error/ClientAuthErrorCodes.mjs +48 -48
  93. package/dist/error/ClientConfigurationError.d.ts +128 -128
  94. package/dist/error/ClientConfigurationError.mjs +135 -135
  95. package/dist/error/ClientConfigurationErrorCodes.d.ts +22 -22
  96. package/dist/error/ClientConfigurationErrorCodes.mjs +26 -26
  97. package/dist/error/InteractionRequiredAuthError.d.ts +65 -65
  98. package/dist/error/InteractionRequiredAuthError.mjs +85 -85
  99. package/dist/error/InteractionRequiredAuthErrorCodes.d.ts +7 -7
  100. package/dist/error/InteractionRequiredAuthErrorCodes.mjs +13 -13
  101. package/dist/error/JoseHeaderError.d.ts +15 -15
  102. package/dist/error/JoseHeaderError.mjs +22 -22
  103. package/dist/error/JoseHeaderErrorCodes.d.ts +2 -2
  104. package/dist/error/JoseHeaderErrorCodes.mjs +6 -6
  105. package/dist/error/ServerError.d.ts +15 -15
  106. package/dist/error/ServerError.mjs +16 -16
  107. package/dist/index.cjs +8658 -8658
  108. package/dist/index.cjs.map +1 -1
  109. package/dist/index.d.ts +107 -107
  110. package/dist/index.mjs +1 -1
  111. package/dist/logger/Logger.d.ts +95 -95
  112. package/dist/logger/Logger.mjs +188 -188
  113. package/dist/network/INetworkModule.d.ts +29 -29
  114. package/dist/network/INetworkModule.mjs +12 -12
  115. package/dist/network/NetworkManager.d.ts +33 -33
  116. package/dist/network/NetworkManager.mjs +34 -34
  117. package/dist/network/RequestThumbprint.d.ts +18 -18
  118. package/dist/network/ThrottlingUtils.d.ts +42 -42
  119. package/dist/network/ThrottlingUtils.mjs +95 -95
  120. package/dist/packageMetadata.d.ts +2 -2
  121. package/dist/packageMetadata.mjs +4 -4
  122. package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
  123. package/dist/request/AuthenticationHeaderParser.mjs +55 -55
  124. package/dist/request/BaseAuthRequest.d.ts +47 -47
  125. package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
  126. package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
  127. package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
  128. package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
  129. package/dist/request/CommonEndSessionRequest.d.ts +21 -21
  130. package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
  131. package/dist/request/CommonRefreshTokenRequest.d.ts +22 -22
  132. package/dist/request/CommonSilentFlowRequest.d.ts +27 -27
  133. package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
  134. package/dist/request/NativeRequest.d.ts +19 -19
  135. package/dist/request/NativeSignOutRequest.d.ts +5 -5
  136. package/dist/request/RequestParameterBuilder.d.ts +217 -217
  137. package/dist/request/RequestParameterBuilder.mjs +382 -382
  138. package/dist/request/RequestValidator.d.ts +27 -27
  139. package/dist/request/RequestValidator.mjs +64 -64
  140. package/dist/request/ScopeSet.d.ts +88 -88
  141. package/dist/request/ScopeSet.mjs +197 -197
  142. package/dist/request/StoreInCache.d.ts +8 -8
  143. package/dist/response/AuthenticationResult.d.ts +41 -41
  144. package/dist/response/AuthorizationCodePayload.d.ts +13 -13
  145. package/dist/response/DeviceCodeResponse.d.ts +25 -25
  146. package/dist/response/ExternalTokenResponse.d.ts +15 -15
  147. package/dist/response/IMDSBadResponse.d.ts +4 -4
  148. package/dist/response/ResponseHandler.d.ts +69 -69
  149. package/dist/response/ResponseHandler.mjs +374 -374
  150. package/dist/response/ServerAuthorizationCodeResponse.d.ts +26 -26
  151. package/dist/response/ServerAuthorizationTokenResponse.d.ts +47 -47
  152. package/dist/telemetry/performance/IPerformanceClient.d.ts +57 -57
  153. package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
  154. package/dist/telemetry/performance/PerformanceClient.d.ts +242 -242
  155. package/dist/telemetry/performance/PerformanceClient.mjs +587 -587
  156. package/dist/telemetry/performance/PerformanceEvent.d.ts +511 -505
  157. package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
  158. package/dist/telemetry/performance/PerformanceEvent.mjs +480 -480
  159. package/dist/telemetry/performance/PerformanceEvent.mjs.map +1 -1
  160. package/dist/telemetry/performance/StubPerformanceClient.d.ts +24 -24
  161. package/dist/telemetry/performance/StubPerformanceClient.mjs +76 -76
  162. package/dist/telemetry/server/ServerTelemetryManager.d.ts +78 -78
  163. package/dist/telemetry/server/ServerTelemetryManager.mjs +260 -260
  164. package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
  165. package/dist/url/IUri.d.ts +12 -12
  166. package/dist/url/UrlString.d.ts +48 -48
  167. package/dist/url/UrlString.mjs +161 -161
  168. package/dist/utils/ClientAssertionUtils.d.ts +2 -2
  169. package/dist/utils/ClientAssertionUtils.mjs +16 -16
  170. package/dist/utils/Constants.d.ts +309 -309
  171. package/dist/utils/Constants.mjs +322 -322
  172. package/dist/utils/FunctionWrappers.d.ts +27 -27
  173. package/dist/utils/FunctionWrappers.mjs +94 -94
  174. package/dist/utils/MsalTypes.d.ts +6 -6
  175. package/dist/utils/ProtocolUtils.d.ts +42 -42
  176. package/dist/utils/ProtocolUtils.mjs +69 -69
  177. package/dist/utils/StringUtils.d.ts +40 -40
  178. package/dist/utils/StringUtils.mjs +95 -95
  179. package/dist/utils/TimeUtils.d.ts +25 -25
  180. package/dist/utils/TimeUtils.mjs +43 -43
  181. package/dist/utils/UrlUtils.d.ts +10 -10
  182. package/dist/utils/UrlUtils.mjs +44 -44
  183. package/package.json +1 -1
  184. package/src/packageMetadata.ts +1 -1
  185. package/src/telemetry/performance/PerformanceEvent.ts +7 -0
@@ -1,267 +1,267 @@
1
- /*! @azure/msal-common v14.14.0 2024-07-23 */
1
+ /*! @azure/msal-common v14.14.2 2024-08-28 */
2
2
  'use strict';
3
3
  import { CacheOutcome, Constants, SERVER_TELEM_CONSTANTS, Separators } from '../../utils/Constants.mjs';
4
4
  import { AuthError } from '../../error/AuthError.mjs';
5
5
 
6
- /*
7
- * Copyright (c) Microsoft Corporation. All rights reserved.
8
- * Licensed under the MIT License.
9
- */
10
- const skuGroupSeparator = ",";
11
- const skuValueSeparator = "|";
12
- function makeExtraSkuString(params) {
13
- const { skus, libraryName, libraryVersion, extensionName, extensionVersion, } = params;
14
- const skuMap = new Map([
15
- [0, [libraryName, libraryVersion]],
16
- [2, [extensionName, extensionVersion]],
17
- ]);
18
- let skuArr = [];
19
- if (skus?.length) {
20
- skuArr = skus.split(skuGroupSeparator);
21
- // Ignore invalid input sku param
22
- if (skuArr.length < 4) {
23
- return skus;
24
- }
25
- }
26
- else {
27
- skuArr = Array.from({ length: 4 }, () => skuValueSeparator);
28
- }
29
- skuMap.forEach((value, key) => {
30
- if (value.length === 2 && value[0]?.length && value[1]?.length) {
31
- setSku({
32
- skuArr,
33
- index: key,
34
- skuName: value[0],
35
- skuVersion: value[1],
36
- });
37
- }
38
- });
39
- return skuArr.join(skuGroupSeparator);
40
- }
41
- function setSku(params) {
42
- const { skuArr, index, skuName, skuVersion } = params;
43
- if (index >= skuArr.length) {
44
- return;
45
- }
46
- skuArr[index] = [skuName, skuVersion].join(skuValueSeparator);
47
- }
48
- /** @internal */
49
- class ServerTelemetryManager {
50
- constructor(telemetryRequest, cacheManager) {
51
- this.cacheOutcome = CacheOutcome.NOT_APPLICABLE;
52
- this.cacheManager = cacheManager;
53
- this.apiId = telemetryRequest.apiId;
54
- this.correlationId = telemetryRequest.correlationId;
55
- this.wrapperSKU = telemetryRequest.wrapperSKU || Constants.EMPTY_STRING;
56
- this.wrapperVer = telemetryRequest.wrapperVer || Constants.EMPTY_STRING;
57
- this.telemetryCacheKey =
58
- SERVER_TELEM_CONSTANTS.CACHE_KEY +
59
- Separators.CACHE_KEY_SEPARATOR +
60
- telemetryRequest.clientId;
61
- }
62
- /**
63
- * API to add MSER Telemetry to request
64
- */
65
- generateCurrentRequestHeaderValue() {
66
- const request = `${this.apiId}${SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR}${this.cacheOutcome}`;
67
- const platformFieldsArr = [this.wrapperSKU, this.wrapperVer];
68
- const nativeBrokerErrorCode = this.getNativeBrokerErrorCode();
69
- if (nativeBrokerErrorCode?.length) {
70
- platformFieldsArr.push(`broker_error=${nativeBrokerErrorCode}`);
71
- }
72
- const platformFields = platformFieldsArr.join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);
73
- const regionDiscoveryFields = this.getRegionDiscoveryFields();
74
- const requestWithRegionDiscoveryFields = [
75
- request,
76
- regionDiscoveryFields,
77
- ].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);
78
- return [
79
- SERVER_TELEM_CONSTANTS.SCHEMA_VERSION,
80
- requestWithRegionDiscoveryFields,
81
- platformFields,
82
- ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);
83
- }
84
- /**
85
- * API to add MSER Telemetry for the last failed request
86
- */
87
- generateLastRequestHeaderValue() {
88
- const lastRequests = this.getLastRequests();
89
- const maxErrors = ServerTelemetryManager.maxErrorsToSend(lastRequests);
90
- const failedRequests = lastRequests.failedRequests
91
- .slice(0, 2 * maxErrors)
92
- .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);
93
- const errors = lastRequests.errors
94
- .slice(0, maxErrors)
95
- .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);
96
- const errorCount = lastRequests.errors.length;
97
- // Indicate whether this header contains all data or partial data
98
- const overflow = maxErrors < errorCount
99
- ? SERVER_TELEM_CONSTANTS.OVERFLOW_TRUE
100
- : SERVER_TELEM_CONSTANTS.OVERFLOW_FALSE;
101
- const platformFields = [errorCount, overflow].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);
102
- return [
103
- SERVER_TELEM_CONSTANTS.SCHEMA_VERSION,
104
- lastRequests.cacheHits,
105
- failedRequests,
106
- errors,
107
- platformFields,
108
- ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);
109
- }
110
- /**
111
- * API to cache token failures for MSER data capture
112
- * @param error
113
- */
114
- cacheFailedRequest(error) {
115
- const lastRequests = this.getLastRequests();
116
- if (lastRequests.errors.length >=
117
- SERVER_TELEM_CONSTANTS.MAX_CACHED_ERRORS) {
118
- // Remove a cached error to make room, first in first out
119
- lastRequests.failedRequests.shift(); // apiId
120
- lastRequests.failedRequests.shift(); // correlationId
121
- lastRequests.errors.shift();
122
- }
123
- lastRequests.failedRequests.push(this.apiId, this.correlationId);
124
- if (error instanceof Error && !!error && error.toString()) {
125
- if (error instanceof AuthError) {
126
- if (error.subError) {
127
- lastRequests.errors.push(error.subError);
128
- }
129
- else if (error.errorCode) {
130
- lastRequests.errors.push(error.errorCode);
131
- }
132
- else {
133
- lastRequests.errors.push(error.toString());
134
- }
135
- }
136
- else {
137
- lastRequests.errors.push(error.toString());
138
- }
139
- }
140
- else {
141
- lastRequests.errors.push(SERVER_TELEM_CONSTANTS.UNKNOWN_ERROR);
142
- }
143
- this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);
144
- return;
145
- }
146
- /**
147
- * Update server telemetry cache entry by incrementing cache hit counter
148
- */
149
- incrementCacheHits() {
150
- const lastRequests = this.getLastRequests();
151
- lastRequests.cacheHits += 1;
152
- this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);
153
- return lastRequests.cacheHits;
154
- }
155
- /**
156
- * Get the server telemetry entity from cache or initialize a new one
157
- */
158
- getLastRequests() {
159
- const initialValue = {
160
- failedRequests: [],
161
- errors: [],
162
- cacheHits: 0,
163
- };
164
- const lastRequests = this.cacheManager.getServerTelemetry(this.telemetryCacheKey);
165
- return lastRequests || initialValue;
166
- }
167
- /**
168
- * Remove server telemetry cache entry
169
- */
170
- clearTelemetryCache() {
171
- const lastRequests = this.getLastRequests();
172
- const numErrorsFlushed = ServerTelemetryManager.maxErrorsToSend(lastRequests);
173
- const errorCount = lastRequests.errors.length;
174
- if (numErrorsFlushed === errorCount) {
175
- // All errors were sent on last request, clear Telemetry cache
176
- this.cacheManager.removeItem(this.telemetryCacheKey);
177
- }
178
- else {
179
- // Partial data was flushed to server, construct a new telemetry cache item with errors that were not flushed
180
- const serverTelemEntity = {
181
- failedRequests: lastRequests.failedRequests.slice(numErrorsFlushed * 2),
182
- errors: lastRequests.errors.slice(numErrorsFlushed),
183
- cacheHits: 0,
184
- };
185
- this.cacheManager.setServerTelemetry(this.telemetryCacheKey, serverTelemEntity);
186
- }
187
- }
188
- /**
189
- * Returns the maximum number of errors that can be flushed to the server in the next network request
190
- * @param serverTelemetryEntity
191
- */
192
- static maxErrorsToSend(serverTelemetryEntity) {
193
- let i;
194
- let maxErrors = 0;
195
- let dataSize = 0;
196
- const errorCount = serverTelemetryEntity.errors.length;
197
- for (i = 0; i < errorCount; i++) {
198
- // failedRequests parameter contains pairs of apiId and correlationId, multiply index by 2 to preserve pairs
199
- const apiId = serverTelemetryEntity.failedRequests[2 * i] ||
200
- Constants.EMPTY_STRING;
201
- const correlationId = serverTelemetryEntity.failedRequests[2 * i + 1] ||
202
- Constants.EMPTY_STRING;
203
- const errorCode = serverTelemetryEntity.errors[i] || Constants.EMPTY_STRING;
204
- // Count number of characters that would be added to header, each character is 1 byte. Add 3 at the end to account for separators
205
- dataSize +=
206
- apiId.toString().length +
207
- correlationId.toString().length +
208
- errorCode.length +
209
- 3;
210
- if (dataSize < SERVER_TELEM_CONSTANTS.MAX_LAST_HEADER_BYTES) {
211
- // Adding this entry to the header would still keep header size below the limit
212
- maxErrors += 1;
213
- }
214
- else {
215
- break;
216
- }
217
- }
218
- return maxErrors;
219
- }
220
- /**
221
- * Get the region discovery fields
222
- *
223
- * @returns string
224
- */
225
- getRegionDiscoveryFields() {
226
- const regionDiscoveryFields = [];
227
- regionDiscoveryFields.push(this.regionUsed || Constants.EMPTY_STRING);
228
- regionDiscoveryFields.push(this.regionSource || Constants.EMPTY_STRING);
229
- regionDiscoveryFields.push(this.regionOutcome || Constants.EMPTY_STRING);
230
- return regionDiscoveryFields.join(",");
231
- }
232
- /**
233
- * Update the region discovery metadata
234
- *
235
- * @param regionDiscoveryMetadata
236
- * @returns void
237
- */
238
- updateRegionDiscoveryMetadata(regionDiscoveryMetadata) {
239
- this.regionUsed = regionDiscoveryMetadata.region_used;
240
- this.regionSource = regionDiscoveryMetadata.region_source;
241
- this.regionOutcome = regionDiscoveryMetadata.region_outcome;
242
- }
243
- /**
244
- * Set cache outcome
245
- */
246
- setCacheOutcome(cacheOutcome) {
247
- this.cacheOutcome = cacheOutcome;
248
- }
249
- setNativeBrokerErrorCode(errorCode) {
250
- const lastRequests = this.getLastRequests();
251
- lastRequests.nativeBrokerErrorCode = errorCode;
252
- this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);
253
- }
254
- getNativeBrokerErrorCode() {
255
- return this.getLastRequests().nativeBrokerErrorCode;
256
- }
257
- clearNativeBrokerErrorCode() {
258
- const lastRequests = this.getLastRequests();
259
- delete lastRequests.nativeBrokerErrorCode;
260
- this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);
261
- }
262
- static makeExtraSkuString(params) {
263
- return makeExtraSkuString(params);
264
- }
6
+ /*
7
+ * Copyright (c) Microsoft Corporation. All rights reserved.
8
+ * Licensed under the MIT License.
9
+ */
10
+ const skuGroupSeparator = ",";
11
+ const skuValueSeparator = "|";
12
+ function makeExtraSkuString(params) {
13
+ const { skus, libraryName, libraryVersion, extensionName, extensionVersion, } = params;
14
+ const skuMap = new Map([
15
+ [0, [libraryName, libraryVersion]],
16
+ [2, [extensionName, extensionVersion]],
17
+ ]);
18
+ let skuArr = [];
19
+ if (skus?.length) {
20
+ skuArr = skus.split(skuGroupSeparator);
21
+ // Ignore invalid input sku param
22
+ if (skuArr.length < 4) {
23
+ return skus;
24
+ }
25
+ }
26
+ else {
27
+ skuArr = Array.from({ length: 4 }, () => skuValueSeparator);
28
+ }
29
+ skuMap.forEach((value, key) => {
30
+ if (value.length === 2 && value[0]?.length && value[1]?.length) {
31
+ setSku({
32
+ skuArr,
33
+ index: key,
34
+ skuName: value[0],
35
+ skuVersion: value[1],
36
+ });
37
+ }
38
+ });
39
+ return skuArr.join(skuGroupSeparator);
40
+ }
41
+ function setSku(params) {
42
+ const { skuArr, index, skuName, skuVersion } = params;
43
+ if (index >= skuArr.length) {
44
+ return;
45
+ }
46
+ skuArr[index] = [skuName, skuVersion].join(skuValueSeparator);
47
+ }
48
+ /** @internal */
49
+ class ServerTelemetryManager {
50
+ constructor(telemetryRequest, cacheManager) {
51
+ this.cacheOutcome = CacheOutcome.NOT_APPLICABLE;
52
+ this.cacheManager = cacheManager;
53
+ this.apiId = telemetryRequest.apiId;
54
+ this.correlationId = telemetryRequest.correlationId;
55
+ this.wrapperSKU = telemetryRequest.wrapperSKU || Constants.EMPTY_STRING;
56
+ this.wrapperVer = telemetryRequest.wrapperVer || Constants.EMPTY_STRING;
57
+ this.telemetryCacheKey =
58
+ SERVER_TELEM_CONSTANTS.CACHE_KEY +
59
+ Separators.CACHE_KEY_SEPARATOR +
60
+ telemetryRequest.clientId;
61
+ }
62
+ /**
63
+ * API to add MSER Telemetry to request
64
+ */
65
+ generateCurrentRequestHeaderValue() {
66
+ const request = `${this.apiId}${SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR}${this.cacheOutcome}`;
67
+ const platformFieldsArr = [this.wrapperSKU, this.wrapperVer];
68
+ const nativeBrokerErrorCode = this.getNativeBrokerErrorCode();
69
+ if (nativeBrokerErrorCode?.length) {
70
+ platformFieldsArr.push(`broker_error=${nativeBrokerErrorCode}`);
71
+ }
72
+ const platformFields = platformFieldsArr.join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);
73
+ const regionDiscoveryFields = this.getRegionDiscoveryFields();
74
+ const requestWithRegionDiscoveryFields = [
75
+ request,
76
+ regionDiscoveryFields,
77
+ ].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);
78
+ return [
79
+ SERVER_TELEM_CONSTANTS.SCHEMA_VERSION,
80
+ requestWithRegionDiscoveryFields,
81
+ platformFields,
82
+ ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);
83
+ }
84
+ /**
85
+ * API to add MSER Telemetry for the last failed request
86
+ */
87
+ generateLastRequestHeaderValue() {
88
+ const lastRequests = this.getLastRequests();
89
+ const maxErrors = ServerTelemetryManager.maxErrorsToSend(lastRequests);
90
+ const failedRequests = lastRequests.failedRequests
91
+ .slice(0, 2 * maxErrors)
92
+ .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);
93
+ const errors = lastRequests.errors
94
+ .slice(0, maxErrors)
95
+ .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);
96
+ const errorCount = lastRequests.errors.length;
97
+ // Indicate whether this header contains all data or partial data
98
+ const overflow = maxErrors < errorCount
99
+ ? SERVER_TELEM_CONSTANTS.OVERFLOW_TRUE
100
+ : SERVER_TELEM_CONSTANTS.OVERFLOW_FALSE;
101
+ const platformFields = [errorCount, overflow].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);
102
+ return [
103
+ SERVER_TELEM_CONSTANTS.SCHEMA_VERSION,
104
+ lastRequests.cacheHits,
105
+ failedRequests,
106
+ errors,
107
+ platformFields,
108
+ ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);
109
+ }
110
+ /**
111
+ * API to cache token failures for MSER data capture
112
+ * @param error
113
+ */
114
+ cacheFailedRequest(error) {
115
+ const lastRequests = this.getLastRequests();
116
+ if (lastRequests.errors.length >=
117
+ SERVER_TELEM_CONSTANTS.MAX_CACHED_ERRORS) {
118
+ // Remove a cached error to make room, first in first out
119
+ lastRequests.failedRequests.shift(); // apiId
120
+ lastRequests.failedRequests.shift(); // correlationId
121
+ lastRequests.errors.shift();
122
+ }
123
+ lastRequests.failedRequests.push(this.apiId, this.correlationId);
124
+ if (error instanceof Error && !!error && error.toString()) {
125
+ if (error instanceof AuthError) {
126
+ if (error.subError) {
127
+ lastRequests.errors.push(error.subError);
128
+ }
129
+ else if (error.errorCode) {
130
+ lastRequests.errors.push(error.errorCode);
131
+ }
132
+ else {
133
+ lastRequests.errors.push(error.toString());
134
+ }
135
+ }
136
+ else {
137
+ lastRequests.errors.push(error.toString());
138
+ }
139
+ }
140
+ else {
141
+ lastRequests.errors.push(SERVER_TELEM_CONSTANTS.UNKNOWN_ERROR);
142
+ }
143
+ this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);
144
+ return;
145
+ }
146
+ /**
147
+ * Update server telemetry cache entry by incrementing cache hit counter
148
+ */
149
+ incrementCacheHits() {
150
+ const lastRequests = this.getLastRequests();
151
+ lastRequests.cacheHits += 1;
152
+ this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);
153
+ return lastRequests.cacheHits;
154
+ }
155
+ /**
156
+ * Get the server telemetry entity from cache or initialize a new one
157
+ */
158
+ getLastRequests() {
159
+ const initialValue = {
160
+ failedRequests: [],
161
+ errors: [],
162
+ cacheHits: 0,
163
+ };
164
+ const lastRequests = this.cacheManager.getServerTelemetry(this.telemetryCacheKey);
165
+ return lastRequests || initialValue;
166
+ }
167
+ /**
168
+ * Remove server telemetry cache entry
169
+ */
170
+ clearTelemetryCache() {
171
+ const lastRequests = this.getLastRequests();
172
+ const numErrorsFlushed = ServerTelemetryManager.maxErrorsToSend(lastRequests);
173
+ const errorCount = lastRequests.errors.length;
174
+ if (numErrorsFlushed === errorCount) {
175
+ // All errors were sent on last request, clear Telemetry cache
176
+ this.cacheManager.removeItem(this.telemetryCacheKey);
177
+ }
178
+ else {
179
+ // Partial data was flushed to server, construct a new telemetry cache item with errors that were not flushed
180
+ const serverTelemEntity = {
181
+ failedRequests: lastRequests.failedRequests.slice(numErrorsFlushed * 2),
182
+ errors: lastRequests.errors.slice(numErrorsFlushed),
183
+ cacheHits: 0,
184
+ };
185
+ this.cacheManager.setServerTelemetry(this.telemetryCacheKey, serverTelemEntity);
186
+ }
187
+ }
188
+ /**
189
+ * Returns the maximum number of errors that can be flushed to the server in the next network request
190
+ * @param serverTelemetryEntity
191
+ */
192
+ static maxErrorsToSend(serverTelemetryEntity) {
193
+ let i;
194
+ let maxErrors = 0;
195
+ let dataSize = 0;
196
+ const errorCount = serverTelemetryEntity.errors.length;
197
+ for (i = 0; i < errorCount; i++) {
198
+ // failedRequests parameter contains pairs of apiId and correlationId, multiply index by 2 to preserve pairs
199
+ const apiId = serverTelemetryEntity.failedRequests[2 * i] ||
200
+ Constants.EMPTY_STRING;
201
+ const correlationId = serverTelemetryEntity.failedRequests[2 * i + 1] ||
202
+ Constants.EMPTY_STRING;
203
+ const errorCode = serverTelemetryEntity.errors[i] || Constants.EMPTY_STRING;
204
+ // Count number of characters that would be added to header, each character is 1 byte. Add 3 at the end to account for separators
205
+ dataSize +=
206
+ apiId.toString().length +
207
+ correlationId.toString().length +
208
+ errorCode.length +
209
+ 3;
210
+ if (dataSize < SERVER_TELEM_CONSTANTS.MAX_LAST_HEADER_BYTES) {
211
+ // Adding this entry to the header would still keep header size below the limit
212
+ maxErrors += 1;
213
+ }
214
+ else {
215
+ break;
216
+ }
217
+ }
218
+ return maxErrors;
219
+ }
220
+ /**
221
+ * Get the region discovery fields
222
+ *
223
+ * @returns string
224
+ */
225
+ getRegionDiscoveryFields() {
226
+ const regionDiscoveryFields = [];
227
+ regionDiscoveryFields.push(this.regionUsed || Constants.EMPTY_STRING);
228
+ regionDiscoveryFields.push(this.regionSource || Constants.EMPTY_STRING);
229
+ regionDiscoveryFields.push(this.regionOutcome || Constants.EMPTY_STRING);
230
+ return regionDiscoveryFields.join(",");
231
+ }
232
+ /**
233
+ * Update the region discovery metadata
234
+ *
235
+ * @param regionDiscoveryMetadata
236
+ * @returns void
237
+ */
238
+ updateRegionDiscoveryMetadata(regionDiscoveryMetadata) {
239
+ this.regionUsed = regionDiscoveryMetadata.region_used;
240
+ this.regionSource = regionDiscoveryMetadata.region_source;
241
+ this.regionOutcome = regionDiscoveryMetadata.region_outcome;
242
+ }
243
+ /**
244
+ * Set cache outcome
245
+ */
246
+ setCacheOutcome(cacheOutcome) {
247
+ this.cacheOutcome = cacheOutcome;
248
+ }
249
+ setNativeBrokerErrorCode(errorCode) {
250
+ const lastRequests = this.getLastRequests();
251
+ lastRequests.nativeBrokerErrorCode = errorCode;
252
+ this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);
253
+ }
254
+ getNativeBrokerErrorCode() {
255
+ return this.getLastRequests().nativeBrokerErrorCode;
256
+ }
257
+ clearNativeBrokerErrorCode() {
258
+ const lastRequests = this.getLastRequests();
259
+ delete lastRequests.nativeBrokerErrorCode;
260
+ this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);
261
+ }
262
+ static makeExtraSkuString(params) {
263
+ return makeExtraSkuString(params);
264
+ }
265
265
  }
266
266
 
267
267
  export { ServerTelemetryManager };
@@ -1,9 +1,9 @@
1
- export type ServerTelemetryRequest = {
2
- clientId: string;
3
- apiId: number;
4
- correlationId: string;
5
- forceRefresh?: boolean;
6
- wrapperSKU?: string;
7
- wrapperVer?: string;
8
- };
1
+ export type ServerTelemetryRequest = {
2
+ clientId: string;
3
+ apiId: number;
4
+ correlationId: string;
5
+ forceRefresh?: boolean;
6
+ wrapperSKU?: string;
7
+ wrapperVer?: string;
8
+ };
9
9
  //# sourceMappingURL=ServerTelemetryRequest.d.ts.map
@@ -1,13 +1,13 @@
1
- /**
2
- * Interface which describes URI components.
3
- */
4
- export interface IUri {
5
- Protocol: string;
6
- HostNameAndPort: string;
7
- AbsolutePath: string;
8
- Search: string;
9
- Hash: string;
10
- PathSegments: string[];
11
- QueryString: string;
12
- }
1
+ /**
2
+ * Interface which describes URI components.
3
+ */
4
+ export interface IUri {
5
+ Protocol: string;
6
+ HostNameAndPort: string;
7
+ AbsolutePath: string;
8
+ Search: string;
9
+ Hash: string;
10
+ PathSegments: string[];
11
+ QueryString: string;
12
+ }
13
13
  //# sourceMappingURL=IUri.d.ts.map