@azure/msal-common 14.0.0-alpha.1 → 14.0.0-alpha.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 (167) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +62 -62
  3. package/dist/account/AccountInfo.d.ts +31 -31
  4. package/dist/account/AuthToken.d.ts +20 -20
  5. package/dist/account/AuthToken.js +48 -48
  6. package/dist/account/CcsCredential.d.ts +8 -8
  7. package/dist/account/CcsCredential.js +9 -9
  8. package/dist/account/ClientCredentials.d.ts +14 -14
  9. package/dist/account/ClientInfo.d.ts +19 -19
  10. package/dist/account/ClientInfo.js +37 -37
  11. package/dist/account/DecodedAuthToken.d.ts +8 -8
  12. package/dist/account/TokenClaims.d.ts +65 -65
  13. package/dist/authority/Authority.d.ts +228 -215
  14. package/dist/authority/Authority.d.ts.map +1 -1
  15. package/dist/authority/Authority.js +716 -682
  16. package/dist/authority/Authority.js.map +1 -1
  17. package/dist/authority/AuthorityFactory.d.ts +30 -30
  18. package/dist/authority/AuthorityFactory.js +47 -47
  19. package/dist/authority/AuthorityMetadata.d.ts +622 -622
  20. package/dist/authority/AuthorityMetadata.js +876 -876
  21. package/dist/authority/AuthorityOptions.d.ts +18 -18
  22. package/dist/authority/AuthorityOptions.js +19 -19
  23. package/dist/authority/AuthorityType.d.ts +9 -9
  24. package/dist/authority/AuthorityType.js +14 -14
  25. package/dist/authority/AzureRegion.d.ts +1 -1
  26. package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
  27. package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
  28. package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
  29. package/dist/authority/CloudInstanceDiscoveryErrorResponse.js +8 -8
  30. package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
  31. package/dist/authority/CloudInstanceDiscoveryResponse.js +8 -8
  32. package/dist/authority/ImdsOptions.d.ts +5 -5
  33. package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
  34. package/dist/authority/OpenIdConfigResponse.js +10 -10
  35. package/dist/authority/ProtocolMode.d.ts +7 -7
  36. package/dist/authority/ProtocolMode.js +12 -12
  37. package/dist/authority/RegionDiscovery.d.ts +30 -30
  38. package/dist/authority/RegionDiscovery.js +108 -108
  39. package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
  40. package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
  41. package/dist/cache/CacheManager.d.ts +443 -443
  42. package/dist/cache/CacheManager.js +1011 -1011
  43. package/dist/cache/entities/AccessTokenEntity.d.ts +56 -56
  44. package/dist/cache/entities/AccessTokenEntity.js +111 -111
  45. package/dist/cache/entities/AccountEntity.d.ts +99 -99
  46. package/dist/cache/entities/AccountEntity.js +248 -248
  47. package/dist/cache/entities/AppMetadataEntity.d.ts +39 -39
  48. package/dist/cache/entities/AppMetadataEntity.js +66 -66
  49. package/dist/cache/entities/AuthorityMetadataEntity.d.ts +47 -47
  50. package/dist/cache/entities/AuthorityMetadataEntity.js +77 -77
  51. package/dist/cache/entities/CacheRecord.d.ts +13 -13
  52. package/dist/cache/entities/CacheRecord.js +13 -13
  53. package/dist/cache/entities/CredentialEntity.d.ts +88 -88
  54. package/dist/cache/entities/CredentialEntity.js +136 -136
  55. package/dist/cache/entities/IdTokenEntity.d.ts +34 -34
  56. package/dist/cache/entities/IdTokenEntity.js +56 -56
  57. package/dist/cache/entities/RefreshTokenEntity.d.ts +36 -36
  58. package/dist/cache/entities/RefreshTokenEntity.js +59 -59
  59. package/dist/cache/entities/ServerTelemetryEntity.d.ts +12 -12
  60. package/dist/cache/entities/ServerTelemetryEntity.js +27 -27
  61. package/dist/cache/entities/ThrottlingEntity.d.ts +13 -13
  62. package/dist/cache/entities/ThrottlingEntity.js +23 -23
  63. package/dist/cache/interface/ICacheManager.d.ts +165 -165
  64. package/dist/cache/interface/ICachePlugin.d.ts +5 -5
  65. package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
  66. package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
  67. package/dist/cache/persistence/TokenCacheContext.js +25 -25
  68. package/dist/cache/utils/CacheTypes.d.ts +62 -62
  69. package/dist/client/AuthorizationCodeClient.d.ts +71 -71
  70. package/dist/client/AuthorizationCodeClient.js +433 -433
  71. package/dist/client/BaseClient.d.ts +50 -50
  72. package/dist/client/BaseClient.js +92 -92
  73. package/dist/client/RefreshTokenClient.d.ts +34 -34
  74. package/dist/client/RefreshTokenClient.js +239 -239
  75. package/dist/client/SilentFlowClient.d.ts +24 -24
  76. package/dist/client/SilentFlowClient.js +94 -94
  77. package/dist/config/AppTokenProvider.d.ts +38 -38
  78. package/dist/config/ClientConfiguration.d.ts +133 -133
  79. package/dist/config/ClientConfiguration.js +88 -88
  80. package/dist/crypto/ICrypto.d.ts +62 -62
  81. package/dist/crypto/ICrypto.js +42 -42
  82. package/dist/crypto/IGuidGenerator.d.ts +4 -4
  83. package/dist/crypto/JoseHeader.d.ts +21 -21
  84. package/dist/crypto/JoseHeader.js +36 -36
  85. package/dist/crypto/PopTokenGenerator.d.ts +57 -57
  86. package/dist/crypto/PopTokenGenerator.js +83 -83
  87. package/dist/crypto/SignedHttpRequest.d.ts +11 -11
  88. package/dist/error/AuthError.d.ts +47 -47
  89. package/dist/error/AuthError.js +51 -51
  90. package/dist/error/ClientAuthError.d.ts +412 -412
  91. package/dist/error/ClientAuthError.js +519 -519
  92. package/dist/error/ClientConfigurationError.d.ts +198 -198
  93. package/dist/error/ClientConfigurationError.js +249 -249
  94. package/dist/error/InteractionRequiredAuthError.d.ts +59 -59
  95. package/dist/error/InteractionRequiredAuthError.js +78 -78
  96. package/dist/error/JoseHeaderError.d.ts +28 -28
  97. package/dist/error/JoseHeaderError.js +39 -39
  98. package/dist/error/ServerError.d.ts +7 -7
  99. package/dist/error/ServerError.js +14 -14
  100. package/dist/index.cjs.js +8843 -8809
  101. package/dist/index.cjs.js.map +1 -1
  102. package/dist/index.d.ts +93 -93
  103. package/dist/index.js +1 -1
  104. package/dist/logger/Logger.d.ts +95 -95
  105. package/dist/logger/Logger.js +197 -197
  106. package/dist/network/INetworkModule.d.ts +29 -29
  107. package/dist/network/INetworkModule.js +14 -14
  108. package/dist/network/NetworkManager.d.ts +32 -32
  109. package/dist/network/NetworkManager.js +33 -33
  110. package/dist/network/RequestThumbprint.d.ts +16 -16
  111. package/dist/network/ThrottlingUtils.d.ts +41 -41
  112. package/dist/network/ThrottlingUtils.js +94 -94
  113. package/dist/packageMetadata.d.ts +2 -2
  114. package/dist/packageMetadata.js +4 -4
  115. package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
  116. package/dist/request/AuthenticationHeaderParser.js +55 -55
  117. package/dist/request/BaseAuthRequest.d.ts +37 -37
  118. package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
  119. package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
  120. package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
  121. package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
  122. package/dist/request/CommonEndSessionRequest.d.ts +21 -21
  123. package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
  124. package/dist/request/CommonRefreshTokenRequest.d.ts +19 -19
  125. package/dist/request/CommonSilentFlowRequest.d.ts +18 -18
  126. package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
  127. package/dist/request/NativeRequest.d.ts +19 -19
  128. package/dist/request/NativeSignOutRequest.d.ts +5 -5
  129. package/dist/request/RequestParameterBuilder.d.ts +216 -216
  130. package/dist/request/RequestParameterBuilder.js +374 -374
  131. package/dist/request/RequestValidator.d.ts +33 -33
  132. package/dist/request/RequestValidator.js +83 -83
  133. package/dist/request/ScopeSet.d.ts +88 -88
  134. package/dist/request/ScopeSet.js +197 -197
  135. package/dist/response/AuthenticationResult.d.ts +39 -39
  136. package/dist/response/AuthorizationCodePayload.d.ts +13 -13
  137. package/dist/response/DeviceCodeResponse.d.ts +25 -25
  138. package/dist/response/ExternalTokenResponse.d.ts +15 -15
  139. package/dist/response/IMDSBadResponse.d.ts +4 -4
  140. package/dist/response/ResponseHandler.d.ts +72 -72
  141. package/dist/response/ResponseHandler.js +300 -300
  142. package/dist/response/ServerAuthorizationCodeResponse.d.ts +25 -25
  143. package/dist/response/ServerAuthorizationTokenResponse.d.ts +44 -44
  144. package/dist/telemetry/performance/IPerformanceClient.d.ts +42 -42
  145. package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
  146. package/dist/telemetry/performance/PerformanceClient.d.ts +189 -189
  147. package/dist/telemetry/performance/PerformanceClient.js +406 -406
  148. package/dist/telemetry/performance/PerformanceEvent.d.ts +439 -439
  149. package/dist/telemetry/performance/PerformanceEvent.js +227 -227
  150. package/dist/telemetry/performance/StubPerformanceClient.d.ts +19 -19
  151. package/dist/telemetry/performance/StubPerformanceClient.js +36 -36
  152. package/dist/telemetry/server/ServerTelemetryManager.d.ts +65 -65
  153. package/dist/telemetry/server/ServerTelemetryManager.js +196 -196
  154. package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
  155. package/dist/url/IUri.d.ts +12 -12
  156. package/dist/url/UrlString.d.ts +70 -70
  157. package/dist/url/UrlString.js +242 -242
  158. package/dist/utils/Constants.d.ts +331 -331
  159. package/dist/utils/Constants.js +373 -373
  160. package/dist/utils/MsalTypes.d.ts +6 -6
  161. package/dist/utils/ProtocolUtils.d.ts +42 -42
  162. package/dist/utils/ProtocolUtils.js +71 -71
  163. package/dist/utils/StringUtils.d.ts +53 -53
  164. package/dist/utils/StringUtils.js +124 -124
  165. package/dist/utils/TimeUtils.d.ts +27 -27
  166. package/dist/utils/TimeUtils.js +45 -45
  167. package/package.json +79 -79
@@ -1,71 +1,71 @@
1
- import { ServerAuthorizationCodeResponse } from "../response/ServerAuthorizationCodeResponse";
2
- import { IUri } from "./IUri";
3
- /**
4
- * Url object class which can perform various transformations on url strings.
5
- */
6
- export declare class UrlString {
7
- private _urlString;
8
- get urlString(): string;
9
- constructor(url: string);
10
- /**
11
- * Ensure urls are lower case and end with a / character.
12
- * @param url
13
- */
14
- static canonicalizeUri(url: string): string;
15
- /**
16
- * Throws if urlString passed is not a valid authority URI string.
17
- */
18
- validateAsUri(): void;
19
- /**
20
- * Given a url and a query string return the url with provided query string appended
21
- * @param url
22
- * @param queryString
23
- */
24
- static appendQueryString(url: string, queryString: string): string;
25
- /**
26
- * Returns a url with the hash removed
27
- * @param url
28
- */
29
- static removeHashFromUrl(url: string): string;
30
- /**
31
- * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d
32
- * @param href The url
33
- * @param tenantId The tenant id to replace
34
- */
35
- replaceTenantPath(tenantId: string): UrlString;
36
- /**
37
- * Returns the anchor part(#) of the URL
38
- */
39
- getHash(): string;
40
- /**
41
- * Parses out the components from a url string.
42
- * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url.
43
- */
44
- getUrlComponents(): IUri;
45
- static getDomainFromUrl(url: string): string;
46
- static getAbsoluteUrl(relativeUrl: string, baseUrl: string): string;
47
- /**
48
- * Parses hash string from given string. Returns empty string if no hash symbol is found.
49
- * @param hashString
50
- */
51
- static parseHash(hashString: string): string;
52
- /**
53
- * Parses query string from given string. Returns empty string if no query symbol is found.
54
- * @param queryString
55
- */
56
- static parseQueryString(queryString: string): string;
57
- static constructAuthorityUriFromObject(urlObject: IUri): UrlString;
58
- /**
59
- * Returns URL hash as server auth code response object.
60
- */
61
- static getDeserializedHash(hash: string): ServerAuthorizationCodeResponse;
62
- /**
63
- * Returns URL query string as server auth code response object.
64
- */
65
- static getDeserializedQueryString(query: string): ServerAuthorizationCodeResponse;
66
- /**
67
- * Check if the hash of the URL string contains known properties
68
- */
69
- static hashContainsKnownProperties(hash: string): boolean;
70
- }
1
+ import { ServerAuthorizationCodeResponse } from "../response/ServerAuthorizationCodeResponse";
2
+ import { IUri } from "./IUri";
3
+ /**
4
+ * Url object class which can perform various transformations on url strings.
5
+ */
6
+ export declare class UrlString {
7
+ private _urlString;
8
+ get urlString(): string;
9
+ constructor(url: string);
10
+ /**
11
+ * Ensure urls are lower case and end with a / character.
12
+ * @param url
13
+ */
14
+ static canonicalizeUri(url: string): string;
15
+ /**
16
+ * Throws if urlString passed is not a valid authority URI string.
17
+ */
18
+ validateAsUri(): void;
19
+ /**
20
+ * Given a url and a query string return the url with provided query string appended
21
+ * @param url
22
+ * @param queryString
23
+ */
24
+ static appendQueryString(url: string, queryString: string): string;
25
+ /**
26
+ * Returns a url with the hash removed
27
+ * @param url
28
+ */
29
+ static removeHashFromUrl(url: string): string;
30
+ /**
31
+ * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d
32
+ * @param href The url
33
+ * @param tenantId The tenant id to replace
34
+ */
35
+ replaceTenantPath(tenantId: string): UrlString;
36
+ /**
37
+ * Returns the anchor part(#) of the URL
38
+ */
39
+ getHash(): string;
40
+ /**
41
+ * Parses out the components from a url string.
42
+ * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url.
43
+ */
44
+ getUrlComponents(): IUri;
45
+ static getDomainFromUrl(url: string): string;
46
+ static getAbsoluteUrl(relativeUrl: string, baseUrl: string): string;
47
+ /**
48
+ * Parses hash string from given string. Returns empty string if no hash symbol is found.
49
+ * @param hashString
50
+ */
51
+ static parseHash(hashString: string): string;
52
+ /**
53
+ * Parses query string from given string. Returns empty string if no query symbol is found.
54
+ * @param queryString
55
+ */
56
+ static parseQueryString(queryString: string): string;
57
+ static constructAuthorityUriFromObject(urlObject: IUri): UrlString;
58
+ /**
59
+ * Returns URL hash as server auth code response object.
60
+ */
61
+ static getDeserializedHash(hash: string): ServerAuthorizationCodeResponse;
62
+ /**
63
+ * Returns URL query string as server auth code response object.
64
+ */
65
+ static getDeserializedQueryString(query: string): ServerAuthorizationCodeResponse;
66
+ /**
67
+ * Check if the hash of the URL string contains known properties
68
+ */
69
+ static hashContainsKnownProperties(hash: string): boolean;
70
+ }
71
71
  //# sourceMappingURL=UrlString.d.ts.map
@@ -1,251 +1,251 @@
1
- /*! @azure/msal-common v14.0.0-alpha.1 2023-05-08 */
1
+ /*! @azure/msal-common v14.0.0-alpha.2 2023-05-17 */
2
2
  'use strict';
3
3
  import { ClientConfigurationError } from '../error/ClientConfigurationError.js';
4
4
  import { ClientAuthError } from '../error/ClientAuthError.js';
5
5
  import { StringUtils } from '../utils/StringUtils.js';
6
6
  import { AADAuthorityConstants, Constants } from '../utils/Constants.js';
7
7
 
8
- /*
9
- * Copyright (c) Microsoft Corporation. All rights reserved.
10
- * Licensed under the MIT License.
11
- */
12
- /**
13
- * Url object class which can perform various transformations on url strings.
14
- */
15
- class UrlString {
16
- get urlString() {
17
- return this._urlString;
18
- }
19
- constructor(url) {
20
- this._urlString = url;
21
- if (StringUtils.isEmpty(this._urlString)) {
22
- // Throws error if url is empty
23
- throw ClientConfigurationError.createUrlEmptyError();
24
- }
25
- if (StringUtils.isEmpty(this.getHash())) {
26
- this._urlString = UrlString.canonicalizeUri(url);
27
- }
28
- }
29
- /**
30
- * Ensure urls are lower case and end with a / character.
31
- * @param url
32
- */
33
- static canonicalizeUri(url) {
34
- if (url) {
35
- let lowerCaseUrl = url.toLowerCase();
36
- if (StringUtils.endsWith(lowerCaseUrl, "?")) {
37
- lowerCaseUrl = lowerCaseUrl.slice(0, -1);
38
- }
39
- else if (StringUtils.endsWith(lowerCaseUrl, "?/")) {
40
- lowerCaseUrl = lowerCaseUrl.slice(0, -2);
41
- }
42
- if (!StringUtils.endsWith(lowerCaseUrl, "/")) {
43
- lowerCaseUrl += "/";
44
- }
45
- return lowerCaseUrl;
46
- }
47
- return url;
48
- }
49
- /**
50
- * Throws if urlString passed is not a valid authority URI string.
51
- */
52
- validateAsUri() {
53
- // Attempts to parse url for uri components
54
- let components;
55
- try {
56
- components = this.getUrlComponents();
57
- }
58
- catch (e) {
59
- throw ClientConfigurationError.createUrlParseError(e);
60
- }
61
- // Throw error if URI or path segments are not parseable.
62
- if (!components.HostNameAndPort || !components.PathSegments) {
63
- throw ClientConfigurationError.createUrlParseError(`Given url string: ${this.urlString}`);
64
- }
65
- // Throw error if uri is insecure.
66
- if (!components.Protocol ||
67
- components.Protocol.toLowerCase() !== "https:") {
68
- throw ClientConfigurationError.createInsecureAuthorityUriError(this.urlString);
69
- }
70
- }
71
- /**
72
- * Given a url and a query string return the url with provided query string appended
73
- * @param url
74
- * @param queryString
75
- */
76
- static appendQueryString(url, queryString) {
77
- if (StringUtils.isEmpty(queryString)) {
78
- return url;
79
- }
80
- return url.indexOf("?") < 0
81
- ? `${url}?${queryString}`
82
- : `${url}&${queryString}`;
83
- }
84
- /**
85
- * Returns a url with the hash removed
86
- * @param url
87
- */
88
- static removeHashFromUrl(url) {
89
- return UrlString.canonicalizeUri(url.split("#")[0]);
90
- }
91
- /**
92
- * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d
93
- * @param href The url
94
- * @param tenantId The tenant id to replace
95
- */
96
- replaceTenantPath(tenantId) {
97
- const urlObject = this.getUrlComponents();
98
- const pathArray = urlObject.PathSegments;
99
- if (tenantId &&
100
- pathArray.length !== 0 &&
101
- (pathArray[0] === AADAuthorityConstants.COMMON ||
102
- pathArray[0] === AADAuthorityConstants.ORGANIZATIONS)) {
103
- pathArray[0] = tenantId;
104
- }
105
- return UrlString.constructAuthorityUriFromObject(urlObject);
106
- }
107
- /**
108
- * Returns the anchor part(#) of the URL
109
- */
110
- getHash() {
111
- return UrlString.parseHash(this.urlString);
112
- }
113
- /**
114
- * Parses out the components from a url string.
115
- * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url.
116
- */
117
- getUrlComponents() {
118
- // https://gist.github.com/curtisz/11139b2cfcaef4a261e0
119
- const regEx = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?");
120
- // If url string does not match regEx, we throw an error
121
- const match = this.urlString.match(regEx);
122
- if (!match) {
123
- throw ClientConfigurationError.createUrlParseError(`Given url string: ${this.urlString}`);
124
- }
125
- // Url component object
126
- const urlComponents = {
127
- Protocol: match[1],
128
- HostNameAndPort: match[4],
129
- AbsolutePath: match[5],
130
- QueryString: match[7],
131
- };
132
- let pathSegments = urlComponents.AbsolutePath.split("/");
133
- pathSegments = pathSegments.filter((val) => val && val.length > 0); // remove empty elements
134
- urlComponents.PathSegments = pathSegments;
135
- if (!StringUtils.isEmpty(urlComponents.QueryString) &&
136
- urlComponents.QueryString.endsWith("/")) {
137
- urlComponents.QueryString = urlComponents.QueryString.substring(0, urlComponents.QueryString.length - 1);
138
- }
139
- return urlComponents;
140
- }
141
- static getDomainFromUrl(url) {
142
- const regEx = RegExp("^([^:/?#]+://)?([^/?#]*)");
143
- const match = url.match(regEx);
144
- if (!match) {
145
- throw ClientConfigurationError.createUrlParseError(`Given url string: ${url}`);
146
- }
147
- return match[2];
148
- }
149
- static getAbsoluteUrl(relativeUrl, baseUrl) {
150
- if (relativeUrl[0] === Constants.FORWARD_SLASH) {
151
- const url = new UrlString(baseUrl);
152
- const baseComponents = url.getUrlComponents();
153
- return (baseComponents.Protocol +
154
- "//" +
155
- baseComponents.HostNameAndPort +
156
- relativeUrl);
157
- }
158
- return relativeUrl;
159
- }
160
- /**
161
- * Parses hash string from given string. Returns empty string if no hash symbol is found.
162
- * @param hashString
163
- */
164
- static parseHash(hashString) {
165
- const hashIndex1 = hashString.indexOf("#");
166
- const hashIndex2 = hashString.indexOf("#/");
167
- if (hashIndex2 > -1) {
168
- return hashString.substring(hashIndex2 + 2);
169
- }
170
- else if (hashIndex1 > -1) {
171
- return hashString.substring(hashIndex1 + 1);
172
- }
173
- return Constants.EMPTY_STRING;
174
- }
175
- /**
176
- * Parses query string from given string. Returns empty string if no query symbol is found.
177
- * @param queryString
178
- */
179
- static parseQueryString(queryString) {
180
- const queryIndex1 = queryString.indexOf("?");
181
- const queryIndex2 = queryString.indexOf("/?");
182
- if (queryIndex2 > -1) {
183
- return queryString.substring(queryIndex2 + 2);
184
- }
185
- else if (queryIndex1 > -1) {
186
- return queryString.substring(queryIndex1 + 1);
187
- }
188
- return Constants.EMPTY_STRING;
189
- }
190
- static constructAuthorityUriFromObject(urlObject) {
191
- return new UrlString(urlObject.Protocol +
192
- "//" +
193
- urlObject.HostNameAndPort +
194
- "/" +
195
- urlObject.PathSegments.join("/"));
196
- }
197
- /**
198
- * Returns URL hash as server auth code response object.
199
- */
200
- static getDeserializedHash(hash) {
201
- // Check if given hash is empty
202
- if (StringUtils.isEmpty(hash)) {
203
- return {};
204
- }
205
- // Strip the # symbol if present
206
- const parsedHash = UrlString.parseHash(hash);
207
- // If # symbol was not present, above will return empty string, so give original hash value
208
- const deserializedHash = StringUtils.queryStringToObject(StringUtils.isEmpty(parsedHash) ? hash : parsedHash);
209
- // Check if deserialization didn't work
210
- if (!deserializedHash) {
211
- throw ClientAuthError.createHashNotDeserializedError(JSON.stringify(deserializedHash));
212
- }
213
- return deserializedHash;
214
- }
215
- /**
216
- * Returns URL query string as server auth code response object.
217
- */
218
- static getDeserializedQueryString(query) {
219
- // Check if given query is empty
220
- if (StringUtils.isEmpty(query)) {
221
- return {};
222
- }
223
- // Strip the ? symbol if present
224
- const parsedQueryString = UrlString.parseQueryString(query);
225
- // If ? symbol was not present, above will return empty string, so give original query value
226
- const deserializedQueryString = StringUtils.queryStringToObject(StringUtils.isEmpty(parsedQueryString)
227
- ? query
228
- : parsedQueryString);
229
- // Check if deserialization didn't work
230
- if (!deserializedQueryString) {
231
- throw ClientAuthError.createHashNotDeserializedError(JSON.stringify(deserializedQueryString));
232
- }
233
- return deserializedQueryString;
234
- }
235
- /**
236
- * Check if the hash of the URL string contains known properties
237
- */
238
- static hashContainsKnownProperties(hash) {
239
- if (StringUtils.isEmpty(hash) || hash.indexOf("=") < 0) {
240
- // Hash doesn't contain key/value pairs
241
- return false;
242
- }
243
- const parameters = UrlString.getDeserializedHash(hash);
244
- return !!(parameters.code ||
245
- parameters.error_description ||
246
- parameters.error ||
247
- parameters.state);
248
- }
8
+ /*
9
+ * Copyright (c) Microsoft Corporation. All rights reserved.
10
+ * Licensed under the MIT License.
11
+ */
12
+ /**
13
+ * Url object class which can perform various transformations on url strings.
14
+ */
15
+ class UrlString {
16
+ get urlString() {
17
+ return this._urlString;
18
+ }
19
+ constructor(url) {
20
+ this._urlString = url;
21
+ if (StringUtils.isEmpty(this._urlString)) {
22
+ // Throws error if url is empty
23
+ throw ClientConfigurationError.createUrlEmptyError();
24
+ }
25
+ if (StringUtils.isEmpty(this.getHash())) {
26
+ this._urlString = UrlString.canonicalizeUri(url);
27
+ }
28
+ }
29
+ /**
30
+ * Ensure urls are lower case and end with a / character.
31
+ * @param url
32
+ */
33
+ static canonicalizeUri(url) {
34
+ if (url) {
35
+ let lowerCaseUrl = url.toLowerCase();
36
+ if (StringUtils.endsWith(lowerCaseUrl, "?")) {
37
+ lowerCaseUrl = lowerCaseUrl.slice(0, -1);
38
+ }
39
+ else if (StringUtils.endsWith(lowerCaseUrl, "?/")) {
40
+ lowerCaseUrl = lowerCaseUrl.slice(0, -2);
41
+ }
42
+ if (!StringUtils.endsWith(lowerCaseUrl, "/")) {
43
+ lowerCaseUrl += "/";
44
+ }
45
+ return lowerCaseUrl;
46
+ }
47
+ return url;
48
+ }
49
+ /**
50
+ * Throws if urlString passed is not a valid authority URI string.
51
+ */
52
+ validateAsUri() {
53
+ // Attempts to parse url for uri components
54
+ let components;
55
+ try {
56
+ components = this.getUrlComponents();
57
+ }
58
+ catch (e) {
59
+ throw ClientConfigurationError.createUrlParseError(e);
60
+ }
61
+ // Throw error if URI or path segments are not parseable.
62
+ if (!components.HostNameAndPort || !components.PathSegments) {
63
+ throw ClientConfigurationError.createUrlParseError(`Given url string: ${this.urlString}`);
64
+ }
65
+ // Throw error if uri is insecure.
66
+ if (!components.Protocol ||
67
+ components.Protocol.toLowerCase() !== "https:") {
68
+ throw ClientConfigurationError.createInsecureAuthorityUriError(this.urlString);
69
+ }
70
+ }
71
+ /**
72
+ * Given a url and a query string return the url with provided query string appended
73
+ * @param url
74
+ * @param queryString
75
+ */
76
+ static appendQueryString(url, queryString) {
77
+ if (StringUtils.isEmpty(queryString)) {
78
+ return url;
79
+ }
80
+ return url.indexOf("?") < 0
81
+ ? `${url}?${queryString}`
82
+ : `${url}&${queryString}`;
83
+ }
84
+ /**
85
+ * Returns a url with the hash removed
86
+ * @param url
87
+ */
88
+ static removeHashFromUrl(url) {
89
+ return UrlString.canonicalizeUri(url.split("#")[0]);
90
+ }
91
+ /**
92
+ * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d
93
+ * @param href The url
94
+ * @param tenantId The tenant id to replace
95
+ */
96
+ replaceTenantPath(tenantId) {
97
+ const urlObject = this.getUrlComponents();
98
+ const pathArray = urlObject.PathSegments;
99
+ if (tenantId &&
100
+ pathArray.length !== 0 &&
101
+ (pathArray[0] === AADAuthorityConstants.COMMON ||
102
+ pathArray[0] === AADAuthorityConstants.ORGANIZATIONS)) {
103
+ pathArray[0] = tenantId;
104
+ }
105
+ return UrlString.constructAuthorityUriFromObject(urlObject);
106
+ }
107
+ /**
108
+ * Returns the anchor part(#) of the URL
109
+ */
110
+ getHash() {
111
+ return UrlString.parseHash(this.urlString);
112
+ }
113
+ /**
114
+ * Parses out the components from a url string.
115
+ * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url.
116
+ */
117
+ getUrlComponents() {
118
+ // https://gist.github.com/curtisz/11139b2cfcaef4a261e0
119
+ const regEx = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?");
120
+ // If url string does not match regEx, we throw an error
121
+ const match = this.urlString.match(regEx);
122
+ if (!match) {
123
+ throw ClientConfigurationError.createUrlParseError(`Given url string: ${this.urlString}`);
124
+ }
125
+ // Url component object
126
+ const urlComponents = {
127
+ Protocol: match[1],
128
+ HostNameAndPort: match[4],
129
+ AbsolutePath: match[5],
130
+ QueryString: match[7],
131
+ };
132
+ let pathSegments = urlComponents.AbsolutePath.split("/");
133
+ pathSegments = pathSegments.filter((val) => val && val.length > 0); // remove empty elements
134
+ urlComponents.PathSegments = pathSegments;
135
+ if (!StringUtils.isEmpty(urlComponents.QueryString) &&
136
+ urlComponents.QueryString.endsWith("/")) {
137
+ urlComponents.QueryString = urlComponents.QueryString.substring(0, urlComponents.QueryString.length - 1);
138
+ }
139
+ return urlComponents;
140
+ }
141
+ static getDomainFromUrl(url) {
142
+ const regEx = RegExp("^([^:/?#]+://)?([^/?#]*)");
143
+ const match = url.match(regEx);
144
+ if (!match) {
145
+ throw ClientConfigurationError.createUrlParseError(`Given url string: ${url}`);
146
+ }
147
+ return match[2];
148
+ }
149
+ static getAbsoluteUrl(relativeUrl, baseUrl) {
150
+ if (relativeUrl[0] === Constants.FORWARD_SLASH) {
151
+ const url = new UrlString(baseUrl);
152
+ const baseComponents = url.getUrlComponents();
153
+ return (baseComponents.Protocol +
154
+ "//" +
155
+ baseComponents.HostNameAndPort +
156
+ relativeUrl);
157
+ }
158
+ return relativeUrl;
159
+ }
160
+ /**
161
+ * Parses hash string from given string. Returns empty string if no hash symbol is found.
162
+ * @param hashString
163
+ */
164
+ static parseHash(hashString) {
165
+ const hashIndex1 = hashString.indexOf("#");
166
+ const hashIndex2 = hashString.indexOf("#/");
167
+ if (hashIndex2 > -1) {
168
+ return hashString.substring(hashIndex2 + 2);
169
+ }
170
+ else if (hashIndex1 > -1) {
171
+ return hashString.substring(hashIndex1 + 1);
172
+ }
173
+ return Constants.EMPTY_STRING;
174
+ }
175
+ /**
176
+ * Parses query string from given string. Returns empty string if no query symbol is found.
177
+ * @param queryString
178
+ */
179
+ static parseQueryString(queryString) {
180
+ const queryIndex1 = queryString.indexOf("?");
181
+ const queryIndex2 = queryString.indexOf("/?");
182
+ if (queryIndex2 > -1) {
183
+ return queryString.substring(queryIndex2 + 2);
184
+ }
185
+ else if (queryIndex1 > -1) {
186
+ return queryString.substring(queryIndex1 + 1);
187
+ }
188
+ return Constants.EMPTY_STRING;
189
+ }
190
+ static constructAuthorityUriFromObject(urlObject) {
191
+ return new UrlString(urlObject.Protocol +
192
+ "//" +
193
+ urlObject.HostNameAndPort +
194
+ "/" +
195
+ urlObject.PathSegments.join("/"));
196
+ }
197
+ /**
198
+ * Returns URL hash as server auth code response object.
199
+ */
200
+ static getDeserializedHash(hash) {
201
+ // Check if given hash is empty
202
+ if (StringUtils.isEmpty(hash)) {
203
+ return {};
204
+ }
205
+ // Strip the # symbol if present
206
+ const parsedHash = UrlString.parseHash(hash);
207
+ // If # symbol was not present, above will return empty string, so give original hash value
208
+ const deserializedHash = StringUtils.queryStringToObject(StringUtils.isEmpty(parsedHash) ? hash : parsedHash);
209
+ // Check if deserialization didn't work
210
+ if (!deserializedHash) {
211
+ throw ClientAuthError.createHashNotDeserializedError(JSON.stringify(deserializedHash));
212
+ }
213
+ return deserializedHash;
214
+ }
215
+ /**
216
+ * Returns URL query string as server auth code response object.
217
+ */
218
+ static getDeserializedQueryString(query) {
219
+ // Check if given query is empty
220
+ if (StringUtils.isEmpty(query)) {
221
+ return {};
222
+ }
223
+ // Strip the ? symbol if present
224
+ const parsedQueryString = UrlString.parseQueryString(query);
225
+ // If ? symbol was not present, above will return empty string, so give original query value
226
+ const deserializedQueryString = StringUtils.queryStringToObject(StringUtils.isEmpty(parsedQueryString)
227
+ ? query
228
+ : parsedQueryString);
229
+ // Check if deserialization didn't work
230
+ if (!deserializedQueryString) {
231
+ throw ClientAuthError.createHashNotDeserializedError(JSON.stringify(deserializedQueryString));
232
+ }
233
+ return deserializedQueryString;
234
+ }
235
+ /**
236
+ * Check if the hash of the URL string contains known properties
237
+ */
238
+ static hashContainsKnownProperties(hash) {
239
+ if (StringUtils.isEmpty(hash) || hash.indexOf("=") < 0) {
240
+ // Hash doesn't contain key/value pairs
241
+ return false;
242
+ }
243
+ const parameters = UrlString.getDeserializedHash(hash);
244
+ return !!(parameters.code ||
245
+ parameters.error_description ||
246
+ parameters.error ||
247
+ parameters.state);
248
+ }
249
249
  }
250
250
 
251
251
  export { UrlString };