@azure/msal-browser 3.0.0-alpha.1 → 3.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 (142) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +213 -213
  3. package/dist/app/IPublicClientApplication.d.ts +45 -45
  4. package/dist/app/IPublicClientApplication.js +96 -96
  5. package/dist/app/PublicClientApplication.d.ts +244 -244
  6. package/dist/app/PublicClientApplication.js +307 -307
  7. package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +63 -63
  8. package/dist/broker/nativeBroker/NativeMessageHandler.js +255 -255
  9. package/dist/broker/nativeBroker/NativeRequest.d.ts +43 -43
  10. package/dist/broker/nativeBroker/NativeResponse.d.ts +48 -48
  11. package/dist/cache/AsyncMemoryStorage.d.ts +51 -51
  12. package/dist/cache/AsyncMemoryStorage.js +132 -132
  13. package/dist/cache/BrowserCacheManager.d.ts +377 -377
  14. package/dist/cache/BrowserCacheManager.js +1276 -1276
  15. package/dist/cache/BrowserStorage.d.ts +11 -11
  16. package/dist/cache/BrowserStorage.js +35 -35
  17. package/dist/cache/CryptoKeyStore.d.ts +17 -17
  18. package/dist/cache/CryptoKeyStore.js +41 -41
  19. package/dist/cache/DatabaseStorage.d.ts +56 -56
  20. package/dist/cache/DatabaseStorage.js +190 -190
  21. package/dist/cache/IAsyncMemoryStorage.d.ts +27 -27
  22. package/dist/cache/ITokenCache.d.ts +10 -10
  23. package/dist/cache/IWindowStorage.d.ts +27 -27
  24. package/dist/cache/MemoryStorage.d.ts +11 -11
  25. package/dist/cache/MemoryStorage.js +31 -31
  26. package/dist/cache/TokenCache.d.ts +76 -76
  27. package/dist/cache/TokenCache.js +225 -225
  28. package/dist/config/Configuration.d.ts +203 -203
  29. package/dist/config/Configuration.js +101 -101
  30. package/dist/controllers/ControllerFactory.d.ts +9 -9
  31. package/dist/controllers/ControllerFactory.js +37 -37
  32. package/dist/controllers/IController.d.ts +66 -66
  33. package/dist/controllers/StandardController.d.ts +413 -413
  34. package/dist/controllers/StandardController.js +1272 -1272
  35. package/dist/crypto/BrowserCrypto.d.ts +61 -61
  36. package/dist/crypto/BrowserCrypto.js +131 -131
  37. package/dist/crypto/CryptoOps.d.ts +73 -73
  38. package/dist/crypto/CryptoOps.js +150 -150
  39. package/dist/crypto/GuidGenerator.d.ts +12 -12
  40. package/dist/crypto/GuidGenerator.js +96 -96
  41. package/dist/crypto/ISubtleCrypto.d.ts +9 -9
  42. package/dist/crypto/ModernBrowserCrypto.d.ts +9 -9
  43. package/dist/crypto/ModernBrowserCrypto.js +24 -24
  44. package/dist/crypto/MsBrowserCrypto.d.ts +9 -9
  45. package/dist/crypto/MsBrowserCrypto.js +79 -79
  46. package/dist/crypto/MsrBrowserCrypto.d.ts +17 -17
  47. package/dist/crypto/MsrBrowserCrypto.js +28 -28
  48. package/dist/crypto/PkceGenerator.d.ts +24 -24
  49. package/dist/crypto/PkceGenerator.js +58 -58
  50. package/dist/crypto/SignedHttpRequest.d.ts +30 -30
  51. package/dist/crypto/SignedHttpRequest.js +39 -39
  52. package/dist/encode/Base64Decode.d.ts +22 -22
  53. package/dist/encode/Base64Decode.js +73 -73
  54. package/dist/encode/Base64Encode.d.ts +31 -31
  55. package/dist/encode/Base64Encode.js +79 -79
  56. package/dist/error/BrowserAuthError.d.ts +382 -382
  57. package/dist/error/BrowserAuthError.js +483 -483
  58. package/dist/error/BrowserConfigurationAuthError.d.ts +70 -70
  59. package/dist/error/BrowserConfigurationAuthError.js +96 -96
  60. package/dist/error/NativeAuthError.d.ts +56 -56
  61. package/dist/error/NativeAuthError.js +88 -88
  62. package/dist/event/EventHandler.d.ts +41 -41
  63. package/dist/event/EventHandler.js +119 -119
  64. package/dist/event/EventMessage.d.ts +25 -25
  65. package/dist/event/EventMessage.js +67 -67
  66. package/dist/event/EventType.d.ts +26 -26
  67. package/dist/event/EventType.js +31 -31
  68. package/dist/index.d.ts +35 -35
  69. package/dist/index.js +1 -1
  70. package/dist/interaction_client/BaseInteractionClient.d.ts +52 -52
  71. package/dist/interaction_client/BaseInteractionClient.js +138 -138
  72. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.d.ts +4 -4
  73. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.js +10 -10
  74. package/dist/interaction_client/NativeInteractionClient.d.ts +148 -148
  75. package/dist/interaction_client/NativeInteractionClient.js +516 -516
  76. package/dist/interaction_client/PopupClient.d.ts +111 -111
  77. package/dist/interaction_client/PopupClient.js +476 -476
  78. package/dist/interaction_client/RedirectClient.d.ts +48 -48
  79. package/dist/interaction_client/RedirectClient.js +290 -290
  80. package/dist/interaction_client/SilentAuthCodeClient.d.ts +22 -22
  81. package/dist/interaction_client/SilentAuthCodeClient.js +62 -62
  82. package/dist/interaction_client/SilentCacheClient.d.ts +21 -21
  83. package/dist/interaction_client/SilentCacheClient.js +67 -67
  84. package/dist/interaction_client/SilentIframeClient.d.ts +31 -31
  85. package/dist/interaction_client/SilentIframeClient.js +127 -127
  86. package/dist/interaction_client/SilentRefreshClient.d.ts +19 -19
  87. package/dist/interaction_client/SilentRefreshClient.js +62 -62
  88. package/dist/interaction_client/StandardInteractionClient.d.ts +59 -59
  89. package/dist/interaction_client/StandardInteractionClient.js +259 -259
  90. package/dist/interaction_handler/InteractionHandler.d.ts +39 -39
  91. package/dist/interaction_handler/InteractionHandler.js +127 -127
  92. package/dist/interaction_handler/RedirectHandler.d.ts +24 -24
  93. package/dist/interaction_handler/RedirectHandler.js +118 -118
  94. package/dist/interaction_handler/SilentHandler.d.ts +47 -47
  95. package/dist/interaction_handler/SilentHandler.js +162 -162
  96. package/dist/internals.d.ts +23 -23
  97. package/dist/internals.js +4 -4
  98. package/dist/navigation/INavigationClient.d.ts +16 -16
  99. package/dist/navigation/NavigationClient.d.ts +22 -22
  100. package/dist/navigation/NavigationClient.js +40 -40
  101. package/dist/navigation/NavigationOptions.d.ts +12 -12
  102. package/dist/network/FetchClient.d.ts +26 -26
  103. package/dist/network/FetchClient.js +99 -99
  104. package/dist/network/XhrClient.d.ts +40 -40
  105. package/dist/network/XhrClient.js +117 -117
  106. package/dist/operatingcontext/BaseOperatingContext.d.ts +40 -40
  107. package/dist/operatingcontext/BaseOperatingContext.js +44 -44
  108. package/dist/operatingcontext/StandardOperatingContext.d.ts +25 -25
  109. package/dist/operatingcontext/StandardOperatingContext.js +43 -43
  110. package/dist/operatingcontext/TeamsAppOperatingContext.d.ts +25 -25
  111. package/dist/operatingcontext/TeamsAppOperatingContext.js +42 -42
  112. package/dist/packageMetadata.d.ts +2 -2
  113. package/dist/packageMetadata.js +4 -4
  114. package/dist/request/AuthorizationCodeRequest.d.ts +8 -8
  115. package/dist/request/AuthorizationUrlRequest.d.ts +8 -8
  116. package/dist/request/EndSessionPopupRequest.d.ts +18 -18
  117. package/dist/request/EndSessionRequest.d.ts +15 -15
  118. package/dist/request/PopupRequest.d.ts +32 -32
  119. package/dist/request/PopupWindowAttributes.d.ts +15 -15
  120. package/dist/request/RedirectRequest.d.ts +33 -33
  121. package/dist/request/SilentRequest.d.ts +30 -30
  122. package/dist/request/SsoSilentRequest.d.ts +26 -26
  123. package/dist/telemetry/BrowserPerformanceClient.d.ts +38 -38
  124. package/dist/telemetry/BrowserPerformanceClient.js +124 -124
  125. package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
  126. package/dist/telemetry/BrowserPerformanceMeasurement.js +92 -92
  127. package/dist/utils/BrowserConstants.d.ts +166 -166
  128. package/dist/utils/BrowserConstants.js +214 -214
  129. package/dist/utils/BrowserProtocolUtils.d.ts +18 -18
  130. package/dist/utils/BrowserProtocolUtils.js +34 -34
  131. package/dist/utils/BrowserStringUtils.d.ts +26 -26
  132. package/dist/utils/BrowserStringUtils.js +149 -149
  133. package/dist/utils/BrowserUtils.d.ts +65 -65
  134. package/dist/utils/BrowserUtils.js +138 -138
  135. package/dist/utils/MathUtils.d.ts +11 -11
  136. package/dist/utils/MathUtils.js +21 -21
  137. package/lib/msal-browser.cjs.js +18383 -0
  138. package/lib/msal-browser.cjs.js.map +1 -0
  139. package/lib/msal-browser.js +18389 -0
  140. package/lib/msal-browser.js.map +1 -0
  141. package/lib/msal-browser.min.js +74 -0
  142. package/package.json +97 -95
@@ -1,23 +1,23 @@
1
- /**
2
- * Class which exposes APIs to decode base64 strings to plaintext. See here for implementation details:
3
- * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64
4
- */
5
- export declare class Base64Decode {
6
- /**
7
- * Returns a URL-safe plaintext decoded string from b64 encoded input.
8
- * @param input
9
- */
10
- decode(input: string): string;
11
- /**
12
- * Decodes base64 into Uint8Array
13
- * @param base64String
14
- * @param nBlockSize
15
- */
16
- private base64DecToArr;
17
- /**
18
- * Base64 string to array decoding helper
19
- * @param charNum
20
- */
21
- private b64ToUint6;
22
- }
1
+ /**
2
+ * Class which exposes APIs to decode base64 strings to plaintext. See here for implementation details:
3
+ * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64
4
+ */
5
+ export declare class Base64Decode {
6
+ /**
7
+ * Returns a URL-safe plaintext decoded string from b64 encoded input.
8
+ * @param input
9
+ */
10
+ decode(input: string): string;
11
+ /**
12
+ * Decodes base64 into Uint8Array
13
+ * @param base64String
14
+ * @param nBlockSize
15
+ */
16
+ private base64DecToArr;
17
+ /**
18
+ * Base64 string to array decoding helper
19
+ * @param charNum
20
+ */
21
+ private b64ToUint6;
22
+ }
23
23
  //# sourceMappingURL=Base64Decode.d.ts.map
@@ -1,80 +1,80 @@
1
- /*! @azure/msal-browser v3.0.0-alpha.1 2023-05-08 */
1
+ /*! @azure/msal-browser v3.0.0-alpha.2 2023-05-17 */
2
2
  'use strict';
3
3
  import { Constants } from '@azure/msal-common';
4
4
  import { BrowserStringUtils } from '../utils/BrowserStringUtils.js';
5
5
 
6
- /*
7
- * Copyright (c) Microsoft Corporation. All rights reserved.
8
- * Licensed under the MIT License.
9
- */
10
- /**
11
- * Class which exposes APIs to decode base64 strings to plaintext. See here for implementation details:
12
- * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64
13
- */
14
- class Base64Decode {
15
- /**
16
- * Returns a URL-safe plaintext decoded string from b64 encoded input.
17
- * @param input
18
- */
19
- decode(input) {
20
- let encodedString = input.replace(/-/g, "+").replace(/_/g, "/");
21
- switch (encodedString.length % 4) {
22
- case 0:
23
- break;
24
- case 2:
25
- encodedString += "==";
26
- break;
27
- case 3:
28
- encodedString += "=";
29
- break;
30
- default:
31
- throw new Error("Invalid base64 string");
32
- }
33
- const inputUtf8Arr = this.base64DecToArr(encodedString);
34
- return BrowserStringUtils.utf8ArrToString(inputUtf8Arr);
35
- }
36
- /**
37
- * Decodes base64 into Uint8Array
38
- * @param base64String
39
- * @param nBlockSize
40
- */
41
- base64DecToArr(base64String, nBlockSize) {
42
- const sB64Enc = base64String.replace(/[^A-Za-z0-9\+\/]/g, Constants.EMPTY_STRING);
43
- const nInLen = sB64Enc.length;
44
- const nOutLen = nBlockSize
45
- ? Math.ceil(((nInLen * 3 + 1) >>> 2) / nBlockSize) * nBlockSize
46
- : (nInLen * 3 + 1) >>> 2;
47
- const aBytes = new Uint8Array(nOutLen);
48
- for (let nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx < nInLen; nInIdx++) {
49
- nMod4 = nInIdx & 3;
50
- nUint24 |=
51
- this.b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (18 - 6 * nMod4);
52
- if (nMod4 === 3 || nInLen - nInIdx === 1) {
53
- for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {
54
- aBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255;
55
- }
56
- nUint24 = 0;
57
- }
58
- }
59
- return aBytes;
60
- }
61
- /**
62
- * Base64 string to array decoding helper
63
- * @param charNum
64
- */
65
- b64ToUint6(charNum) {
66
- return charNum > 64 && charNum < 91
67
- ? charNum - 65
68
- : charNum > 96 && charNum < 123
69
- ? charNum - 71
70
- : charNum > 47 && charNum < 58
71
- ? charNum + 4
72
- : charNum === 43
73
- ? 62
74
- : charNum === 47
75
- ? 63
76
- : 0;
77
- }
6
+ /*
7
+ * Copyright (c) Microsoft Corporation. All rights reserved.
8
+ * Licensed under the MIT License.
9
+ */
10
+ /**
11
+ * Class which exposes APIs to decode base64 strings to plaintext. See here for implementation details:
12
+ * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64
13
+ */
14
+ class Base64Decode {
15
+ /**
16
+ * Returns a URL-safe plaintext decoded string from b64 encoded input.
17
+ * @param input
18
+ */
19
+ decode(input) {
20
+ let encodedString = input.replace(/-/g, "+").replace(/_/g, "/");
21
+ switch (encodedString.length % 4) {
22
+ case 0:
23
+ break;
24
+ case 2:
25
+ encodedString += "==";
26
+ break;
27
+ case 3:
28
+ encodedString += "=";
29
+ break;
30
+ default:
31
+ throw new Error("Invalid base64 string");
32
+ }
33
+ const inputUtf8Arr = this.base64DecToArr(encodedString);
34
+ return BrowserStringUtils.utf8ArrToString(inputUtf8Arr);
35
+ }
36
+ /**
37
+ * Decodes base64 into Uint8Array
38
+ * @param base64String
39
+ * @param nBlockSize
40
+ */
41
+ base64DecToArr(base64String, nBlockSize) {
42
+ const sB64Enc = base64String.replace(/[^A-Za-z0-9\+\/]/g, Constants.EMPTY_STRING);
43
+ const nInLen = sB64Enc.length;
44
+ const nOutLen = nBlockSize
45
+ ? Math.ceil(((nInLen * 3 + 1) >>> 2) / nBlockSize) * nBlockSize
46
+ : (nInLen * 3 + 1) >>> 2;
47
+ const aBytes = new Uint8Array(nOutLen);
48
+ for (let nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx < nInLen; nInIdx++) {
49
+ nMod4 = nInIdx & 3;
50
+ nUint24 |=
51
+ this.b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (18 - 6 * nMod4);
52
+ if (nMod4 === 3 || nInLen - nInIdx === 1) {
53
+ for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {
54
+ aBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255;
55
+ }
56
+ nUint24 = 0;
57
+ }
58
+ }
59
+ return aBytes;
60
+ }
61
+ /**
62
+ * Base64 string to array decoding helper
63
+ * @param charNum
64
+ */
65
+ b64ToUint6(charNum) {
66
+ return charNum > 64 && charNum < 91
67
+ ? charNum - 65
68
+ : charNum > 96 && charNum < 123
69
+ ? charNum - 71
70
+ : charNum > 47 && charNum < 58
71
+ ? charNum + 4
72
+ : charNum === 43
73
+ ? 62
74
+ : charNum === 47
75
+ ? 63
76
+ : 0;
77
+ }
78
78
  }
79
79
 
80
80
  export { Base64Decode };
@@ -1,32 +1,32 @@
1
- /**
2
- * Class which exposes APIs to encode plaintext to base64 encoded string. See here for implementation details:
3
- * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64
4
- */
5
- export declare class Base64Encode {
6
- /**
7
- * Returns URL Safe b64 encoded string from a plaintext string.
8
- * @param input
9
- */
10
- urlEncode(input: string): string;
11
- /**
12
- * Returns URL Safe b64 encoded string from an int8Array.
13
- * @param inputArr
14
- */
15
- urlEncodeArr(inputArr: Uint8Array): string;
16
- /**
17
- * Returns b64 encoded string from plaintext string.
18
- * @param input
19
- */
20
- encode(input: string): string;
21
- /**
22
- * Base64 encode byte array
23
- * @param aBytes
24
- */
25
- private base64EncArr;
26
- /**
27
- * Base64 string to array encoding helper
28
- * @param nUint6
29
- */
30
- private uint6ToB64;
31
- }
1
+ /**
2
+ * Class which exposes APIs to encode plaintext to base64 encoded string. See here for implementation details:
3
+ * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64
4
+ */
5
+ export declare class Base64Encode {
6
+ /**
7
+ * Returns URL Safe b64 encoded string from a plaintext string.
8
+ * @param input
9
+ */
10
+ urlEncode(input: string): string;
11
+ /**
12
+ * Returns URL Safe b64 encoded string from an int8Array.
13
+ * @param inputArr
14
+ */
15
+ urlEncodeArr(inputArr: Uint8Array): string;
16
+ /**
17
+ * Returns b64 encoded string from plaintext string.
18
+ * @param input
19
+ */
20
+ encode(input: string): string;
21
+ /**
22
+ * Base64 encode byte array
23
+ * @param aBytes
24
+ */
25
+ private base64EncArr;
26
+ /**
27
+ * Base64 string to array encoding helper
28
+ * @param nUint6
29
+ */
30
+ private uint6ToB64;
31
+ }
32
32
  //# sourceMappingURL=Base64Encode.d.ts.map
@@ -1,86 +1,86 @@
1
- /*! @azure/msal-browser v3.0.0-alpha.1 2023-05-08 */
1
+ /*! @azure/msal-browser v3.0.0-alpha.2 2023-05-17 */
2
2
  'use strict';
3
3
  import { Constants } from '@azure/msal-common';
4
4
  import { BrowserStringUtils } from '../utils/BrowserStringUtils.js';
5
5
 
6
- /*
7
- * Copyright (c) Microsoft Corporation. All rights reserved.
8
- * Licensed under the MIT License.
9
- */
10
- /**
11
- * Class which exposes APIs to encode plaintext to base64 encoded string. See here for implementation details:
12
- * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64
13
- */
14
- class Base64Encode {
15
- /**
16
- * Returns URL Safe b64 encoded string from a plaintext string.
17
- * @param input
18
- */
19
- urlEncode(input) {
20
- return encodeURIComponent(this.encode(input)
21
- .replace(/=/g, Constants.EMPTY_STRING)
22
- .replace(/\+/g, "-")
23
- .replace(/\//g, "_"));
24
- }
25
- /**
26
- * Returns URL Safe b64 encoded string from an int8Array.
27
- * @param inputArr
28
- */
29
- urlEncodeArr(inputArr) {
30
- return this.base64EncArr(inputArr)
31
- .replace(/=/g, Constants.EMPTY_STRING)
32
- .replace(/\+/g, "-")
33
- .replace(/\//g, "_");
34
- }
35
- /**
36
- * Returns b64 encoded string from plaintext string.
37
- * @param input
38
- */
39
- encode(input) {
40
- const inputUtf8Arr = BrowserStringUtils.stringToUtf8Arr(input);
41
- return this.base64EncArr(inputUtf8Arr);
42
- }
43
- /**
44
- * Base64 encode byte array
45
- * @param aBytes
46
- */
47
- base64EncArr(aBytes) {
48
- const eqLen = (3 - (aBytes.length % 3)) % 3;
49
- let sB64Enc = Constants.EMPTY_STRING;
50
- for (let nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {
51
- nMod3 = nIdx % 3;
52
- /* Uncomment the following line in order to split the output in lines 76-character long: */
53
- /*
54
- *if (nIdx > 0 && (nIdx * 4 / 3) % 76 === 0) { sB64Enc += "\r\n"; }
55
- */
56
- nUint24 |= aBytes[nIdx] << ((16 >>> nMod3) & 24);
57
- if (nMod3 === 2 || aBytes.length - nIdx === 1) {
58
- sB64Enc += String.fromCharCode(this.uint6ToB64((nUint24 >>> 18) & 63), this.uint6ToB64((nUint24 >>> 12) & 63), this.uint6ToB64((nUint24 >>> 6) & 63), this.uint6ToB64(nUint24 & 63));
59
- nUint24 = 0;
60
- }
61
- }
62
- return eqLen === 0
63
- ? sB64Enc
64
- : sB64Enc.substring(0, sB64Enc.length - eqLen) +
65
- (eqLen === 1 ? "=" : "==");
66
- }
67
- /**
68
- * Base64 string to array encoding helper
69
- * @param nUint6
70
- */
71
- uint6ToB64(nUint6) {
72
- return nUint6 < 26
73
- ? nUint6 + 65
74
- : nUint6 < 52
75
- ? nUint6 + 71
76
- : nUint6 < 62
77
- ? nUint6 - 4
78
- : nUint6 === 62
79
- ? 43
80
- : nUint6 === 63
81
- ? 47
82
- : 65;
83
- }
6
+ /*
7
+ * Copyright (c) Microsoft Corporation. All rights reserved.
8
+ * Licensed under the MIT License.
9
+ */
10
+ /**
11
+ * Class which exposes APIs to encode plaintext to base64 encoded string. See here for implementation details:
12
+ * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64
13
+ */
14
+ class Base64Encode {
15
+ /**
16
+ * Returns URL Safe b64 encoded string from a plaintext string.
17
+ * @param input
18
+ */
19
+ urlEncode(input) {
20
+ return encodeURIComponent(this.encode(input)
21
+ .replace(/=/g, Constants.EMPTY_STRING)
22
+ .replace(/\+/g, "-")
23
+ .replace(/\//g, "_"));
24
+ }
25
+ /**
26
+ * Returns URL Safe b64 encoded string from an int8Array.
27
+ * @param inputArr
28
+ */
29
+ urlEncodeArr(inputArr) {
30
+ return this.base64EncArr(inputArr)
31
+ .replace(/=/g, Constants.EMPTY_STRING)
32
+ .replace(/\+/g, "-")
33
+ .replace(/\//g, "_");
34
+ }
35
+ /**
36
+ * Returns b64 encoded string from plaintext string.
37
+ * @param input
38
+ */
39
+ encode(input) {
40
+ const inputUtf8Arr = BrowserStringUtils.stringToUtf8Arr(input);
41
+ return this.base64EncArr(inputUtf8Arr);
42
+ }
43
+ /**
44
+ * Base64 encode byte array
45
+ * @param aBytes
46
+ */
47
+ base64EncArr(aBytes) {
48
+ const eqLen = (3 - (aBytes.length % 3)) % 3;
49
+ let sB64Enc = Constants.EMPTY_STRING;
50
+ for (let nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {
51
+ nMod3 = nIdx % 3;
52
+ /* Uncomment the following line in order to split the output in lines 76-character long: */
53
+ /*
54
+ *if (nIdx > 0 && (nIdx * 4 / 3) % 76 === 0) { sB64Enc += "\r\n"; }
55
+ */
56
+ nUint24 |= aBytes[nIdx] << ((16 >>> nMod3) & 24);
57
+ if (nMod3 === 2 || aBytes.length - nIdx === 1) {
58
+ sB64Enc += String.fromCharCode(this.uint6ToB64((nUint24 >>> 18) & 63), this.uint6ToB64((nUint24 >>> 12) & 63), this.uint6ToB64((nUint24 >>> 6) & 63), this.uint6ToB64(nUint24 & 63));
59
+ nUint24 = 0;
60
+ }
61
+ }
62
+ return eqLen === 0
63
+ ? sB64Enc
64
+ : sB64Enc.substring(0, sB64Enc.length - eqLen) +
65
+ (eqLen === 1 ? "=" : "==");
66
+ }
67
+ /**
68
+ * Base64 string to array encoding helper
69
+ * @param nUint6
70
+ */
71
+ uint6ToB64(nUint6) {
72
+ return nUint6 < 26
73
+ ? nUint6 + 65
74
+ : nUint6 < 52
75
+ ? nUint6 + 71
76
+ : nUint6 < 62
77
+ ? nUint6 - 4
78
+ : nUint6 === 62
79
+ ? 43
80
+ : nUint6 === 63
81
+ ? 47
82
+ : 65;
83
+ }
84
84
  }
85
85
 
86
86
  export { Base64Encode };