@equinor/fusion-framework-module-msal 5.1.2 → 6.0.0-next.0
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.
- package/CHANGELOG.md +98 -0
- package/README.md +237 -40
- package/dist/esm/MsalClient.interface.js +2 -0
- package/dist/esm/MsalClient.interface.js.map +1 -0
- package/dist/esm/MsalClient.js +215 -0
- package/dist/esm/MsalClient.js.map +1 -0
- package/dist/esm/MsalConfigurator.js +248 -0
- package/dist/esm/MsalConfigurator.js.map +1 -0
- package/dist/esm/MsalProvider.interface.js +2 -0
- package/dist/esm/MsalProvider.interface.js.map +1 -0
- package/dist/esm/MsalProvider.js +525 -0
- package/dist/esm/MsalProvider.js.map +1 -0
- package/dist/esm/MsalProxyProvider.interface.js +2 -0
- package/dist/esm/MsalProxyProvider.interface.js.map +1 -0
- package/dist/esm/__tests__/versioning/resolve-version.test.js +29 -38
- package/dist/esm/__tests__/versioning/resolve-version.test.js.map +1 -1
- package/dist/esm/create-client-log-callback.js +87 -0
- package/dist/esm/create-client-log-callback.js.map +1 -0
- package/dist/esm/create-proxy-provider.js +84 -0
- package/dist/esm/create-proxy-provider.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/module.js +64 -16
- package/dist/esm/module.js.map +1 -1
- package/dist/esm/static.js +32 -2
- package/dist/esm/static.js.map +1 -1
- package/dist/esm/types.js +9 -0
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/util/compare-origin.js +11 -0
- package/dist/esm/util/compare-origin.js.map +1 -0
- package/dist/esm/{v2/client/util/url.js → util/normalize-uri.js} +1 -10
- package/dist/esm/util/normalize-uri.js.map +1 -0
- package/dist/esm/{v2/client/util/browser.js → util/redirect.js} +1 -1
- package/dist/esm/util/redirect.js.map +1 -0
- package/dist/esm/v2/IAuthClient.interface.js +2 -0
- package/dist/esm/v2/IAuthClient.interface.js.map +1 -0
- package/dist/esm/v2/IPublicClientApplication.interface.js +2 -0
- package/dist/esm/v2/IPublicClientApplication.interface.js.map +1 -0
- package/dist/esm/v2/MsalProvider.interface.js +2 -0
- package/dist/esm/v2/MsalProvider.interface.js.map +1 -0
- package/dist/esm/v2/create-proxy-client.js +155 -0
- package/dist/esm/v2/create-proxy-client.js.map +1 -0
- package/dist/esm/v2/create-proxy-provider.js +140 -0
- package/dist/esm/v2/create-proxy-provider.js.map +1 -0
- package/dist/esm/v2/map-account-info.js +18 -0
- package/dist/esm/v2/map-account-info.js.map +1 -0
- package/dist/esm/v2/map-authentication-result.js +22 -0
- package/dist/esm/v2/map-authentication-result.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/versioning/resolve-version.js +28 -16
- package/dist/esm/versioning/resolve-version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/MsalClient.d.ts +141 -0
- package/dist/types/MsalClient.interface.d.ts +103 -0
- package/dist/types/MsalConfigurator.d.ts +147 -0
- package/dist/types/MsalProvider.d.ts +291 -0
- package/dist/types/MsalProvider.interface.d.ts +159 -0
- package/dist/types/MsalProxyProvider.interface.d.ts +52 -0
- package/dist/types/create-client-log-callback.d.ts +38 -0
- package/dist/types/create-proxy-provider.d.ts +19 -0
- package/dist/types/index.d.ts +5 -4
- package/dist/types/module.d.ts +70 -4
- package/dist/types/static.d.ts +32 -1
- package/dist/types/types.d.ts +14 -6
- package/dist/types/util/redirect.d.ts +1 -0
- package/dist/types/v2/IAuthClient.interface.d.ts +68 -0
- package/dist/types/v2/IPublicClientApplication.interface.d.ts +68 -0
- package/dist/types/v2/MsalProvider.interface.d.ts +85 -0
- package/dist/types/v2/create-proxy-client.d.ts +22 -0
- package/dist/types/v2/create-proxy-provider.d.ts +24 -0
- package/dist/types/v2/map-account-info.d.ts +9 -0
- package/dist/types/v2/map-authentication-result.d.ts +9 -0
- package/dist/types/v2/types.d.ts +12 -0
- package/dist/types/version.d.ts +1 -1
- package/dist/types/versioning/resolve-version.d.ts +1 -1
- package/package.json +11 -6
- package/src/MsalClient.interface.ts +121 -0
- package/src/MsalClient.ts +274 -0
- package/src/MsalConfigurator.ts +289 -0
- package/src/MsalProvider.interface.ts +175 -0
- package/src/MsalProvider.ts +597 -0
- package/src/MsalProxyProvider.interface.ts +71 -0
- package/src/__tests__/versioning/resolve-version.test.ts +29 -42
- package/src/create-client-log-callback.ts +101 -0
- package/src/create-proxy-provider.ts +89 -0
- package/src/index.ts +6 -7
- package/src/module.ts +88 -20
- package/src/static.ts +32 -3
- package/src/types.ts +15 -7
- package/src/util/compare-origin.ts +11 -0
- package/src/{v2/client/util/url.ts → util/normalize-uri.ts} +0 -10
- package/src/v2/IAuthClient.interface.ts +91 -0
- package/src/v2/IPublicClientApplication.interface.ts +71 -0
- package/src/v2/MsalProvider.interface.ts +92 -0
- package/src/v2/create-proxy-client.ts +186 -0
- package/src/v2/create-proxy-provider.ts +156 -0
- package/src/v2/map-account-info.ts +20 -0
- package/src/v2/map-authentication-result.ts +24 -0
- package/src/v2/types.ts +12 -0
- package/src/version.ts +1 -1
- package/src/versioning/resolve-version.ts +35 -28
- package/tsconfig.json +3 -0
- package/dist/esm/v2/client/behavior.js +0 -5
- package/dist/esm/v2/client/behavior.js.map +0 -1
- package/dist/esm/v2/client/client.js +0 -142
- package/dist/esm/v2/client/client.js.map +0 -1
- package/dist/esm/v2/client/create-auth-client.js +0 -36
- package/dist/esm/v2/client/create-auth-client.js.map +0 -1
- package/dist/esm/v2/client/index.js +0 -5
- package/dist/esm/v2/client/index.js.map +0 -1
- package/dist/esm/v2/client/log/console.js +0 -45
- package/dist/esm/v2/client/log/console.js.map +0 -1
- package/dist/esm/v2/client/request.js +0 -2
- package/dist/esm/v2/client/request.js.map +0 -1
- package/dist/esm/v2/client/util/browser.js.map +0 -1
- package/dist/esm/v2/client/util/url.js.map +0 -1
- package/dist/esm/v2/configurator.js +0 -42
- package/dist/esm/v2/configurator.js.map +0 -1
- package/dist/esm/v2/index.js +0 -3
- package/dist/esm/v2/index.js.map +0 -1
- package/dist/esm/v2/provider.js +0 -115
- package/dist/esm/v2/provider.js.map +0 -1
- package/dist/types/v2/client/behavior.d.ts +0 -13
- package/dist/types/v2/client/client.d.ts +0 -89
- package/dist/types/v2/client/create-auth-client.d.ts +0 -27
- package/dist/types/v2/client/index.d.ts +0 -5
- package/dist/types/v2/client/log/console.d.ts +0 -28
- package/dist/types/v2/client/request.d.ts +0 -65
- package/dist/types/v2/configurator.d.ts +0 -32
- package/dist/types/v2/index.d.ts +0 -2
- package/dist/types/v2/provider.d.ts +0 -59
- package/src/v2/client/behavior.ts +0 -14
- package/src/v2/client/client.ts +0 -180
- package/src/v2/client/create-auth-client.ts +0 -48
- package/src/v2/client/index.ts +0 -8
- package/src/v2/client/log/console.ts +0 -58
- package/src/v2/client/request.ts +0 -66
- package/src/v2/configurator.ts +0 -58
- package/src/v2/index.ts +0 -2
- package/src/v2/provider.ts +0 -178
- /package/dist/types/{v2/client/util/browser.d.ts → util/compare-origin.d.ts} +0 -0
- /package/dist/types/{v2/client/util/url.d.ts → util/normalize-uri.d.ts} +0 -0
- /package/src/{v2/client/util/browser.ts → util/redirect.ts} +0 -0
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from 'vitest';
|
|
2
2
|
import { SemVer } from 'semver';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
vi.mock('../../static', () => ({
|
|
7
|
-
MsalModuleVersion: {
|
|
8
|
-
V2: 'v2',
|
|
9
|
-
Latest: '4.0.9', // Fixed version for consistent testing
|
|
10
|
-
},
|
|
3
|
+
// Mock the version first (hoisted)
|
|
4
|
+
vi.mock('../../version', () => ({
|
|
5
|
+
version: '6.1.2-next.0+1493919587',
|
|
11
6
|
}));
|
|
12
|
-
|
|
7
|
+
import { resolveVersion } from '../../versioning/resolve-version';
|
|
13
8
|
import { MsalModuleVersion } from '../../static';
|
|
14
9
|
describe('resolveVersion', () => {
|
|
15
10
|
describe('successful version resolution', () => {
|
|
@@ -19,68 +14,64 @@ describe('resolveVersion', () => {
|
|
|
19
14
|
wantedVersion: expect.any(SemVer),
|
|
20
15
|
latestVersion: expect.any(SemVer),
|
|
21
16
|
isLatest: false,
|
|
22
|
-
satisfiesLatest: false, // 2.x is not compatible with
|
|
17
|
+
satisfiesLatest: false, // 2.x is not compatible with 5.x
|
|
23
18
|
enumVersion: MsalModuleVersion.V2,
|
|
24
19
|
});
|
|
25
20
|
expect(result.wantedVersion.version).toBe('2.1.0');
|
|
26
|
-
expect(result.latestVersion.version).toBe('
|
|
21
|
+
expect(result.latestVersion.version).toBe('6.1.2');
|
|
27
22
|
});
|
|
28
23
|
it('should resolve with SemVer object', () => {
|
|
29
24
|
const semver = new SemVer('2.0.0');
|
|
30
25
|
const result = resolveVersion(semver);
|
|
31
26
|
expect(result.wantedVersion).toBe(semver);
|
|
32
|
-
expect(result.satisfiesLatest).toBe(false); // 2.x is not compatible with
|
|
27
|
+
expect(result.satisfiesLatest).toBe(false); // 2.x is not compatible with 5.x
|
|
33
28
|
});
|
|
34
29
|
it('should resolve latest version when no version provided', () => {
|
|
35
30
|
const result = resolveVersion();
|
|
36
|
-
expect(result.wantedVersion.version).toBe('
|
|
37
|
-
expect(result.latestVersion.version).toBe('
|
|
31
|
+
expect(result.wantedVersion.version).toBe('6.1.2');
|
|
32
|
+
expect(result.latestVersion.version).toBe('6.1.2');
|
|
38
33
|
expect(result.isLatest).toBe(true);
|
|
39
34
|
expect(result.satisfiesLatest).toBe(true);
|
|
40
35
|
});
|
|
41
36
|
it('should resolve latest version when empty string provided', () => {
|
|
42
37
|
const result = resolveVersion('');
|
|
43
|
-
expect(result.wantedVersion.version).toBe('
|
|
38
|
+
expect(result.wantedVersion.version).toBe('6.1.2');
|
|
44
39
|
expect(result.isLatest).toBe(true);
|
|
45
40
|
});
|
|
46
41
|
it('should find correct enum version for major version', () => {
|
|
47
42
|
const result = resolveVersion('2.5.0');
|
|
48
43
|
expect(result.enumVersion).toBe(MsalModuleVersion.V2);
|
|
49
|
-
expect(result.satisfiesLatest).toBe(false); // 2.x is not compatible with
|
|
44
|
+
expect(result.satisfiesLatest).toBe(false); // 2.x is not compatible with 5.x
|
|
50
45
|
});
|
|
51
46
|
});
|
|
52
47
|
describe('version comparison and warnings', () => {
|
|
53
48
|
it('should identify version states correctly', () => {
|
|
54
49
|
// Exact latest version
|
|
55
|
-
expect(resolveVersion('
|
|
50
|
+
expect(resolveVersion('6.1.2-next.0+1493919587').isLatest).toBe(true);
|
|
56
51
|
// Patch difference (satisfies but not latest)
|
|
57
|
-
const patchResult = resolveVersion('
|
|
52
|
+
const patchResult = resolveVersion('6.1.1');
|
|
58
53
|
expect(patchResult.isLatest).toBe(false);
|
|
59
54
|
expect(patchResult.satisfiesLatest).toBe(true);
|
|
60
55
|
expect(patchResult.warnings).toBeUndefined();
|
|
61
|
-
// Minor difference (satisfies
|
|
62
|
-
const minorResult = resolveVersion('
|
|
56
|
+
// Minor difference (satisfies)
|
|
57
|
+
const minorResult = resolveVersion('6.0.0');
|
|
63
58
|
expect(minorResult.isLatest).toBe(false);
|
|
64
59
|
expect(minorResult.satisfiesLatest).toBe(true);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
// Major difference (doesn't satisfy with warning)
|
|
68
|
-
const majorResult = resolveVersion('5.0.0');
|
|
60
|
+
// Major difference (doesn't satisfy)
|
|
61
|
+
const majorResult = resolveVersion('7.0.0');
|
|
69
62
|
expect(majorResult.satisfiesLatest).toBe(false);
|
|
70
|
-
expect(majorResult.warnings).toBeDefined();
|
|
71
|
-
expect(majorResult.warnings?.[0]).toContain('Requested major version 5 is greater than the latest major version 4');
|
|
72
63
|
});
|
|
73
64
|
it('should handle versions without matching enum with warnings', () => {
|
|
74
|
-
// Lower major version
|
|
65
|
+
// Lower major version - should map to V2
|
|
75
66
|
const lowerResult = resolveVersion('3.0.0');
|
|
76
|
-
expect(lowerResult.enumVersion).toBe(
|
|
67
|
+
expect(lowerResult.enumVersion).toBe(MsalModuleVersion.V2);
|
|
77
68
|
expect(lowerResult.warnings).toBeDefined();
|
|
78
|
-
expect(lowerResult.warnings?.[0]).toContain('Requested major version 3 is behind the latest major version
|
|
79
|
-
// Zero version
|
|
69
|
+
expect(lowerResult.warnings?.[0]).toContain('Requested major version 3 is behind the latest major version 6');
|
|
70
|
+
// Zero version - should map to V2
|
|
80
71
|
const zeroResult = resolveVersion('0.0.0');
|
|
81
|
-
expect(zeroResult.enumVersion).toBe(
|
|
72
|
+
expect(zeroResult.enumVersion).toBe(MsalModuleVersion.V2);
|
|
82
73
|
expect(zeroResult.warnings).toBeDefined();
|
|
83
|
-
expect(zeroResult.warnings?.[0]).toContain('Requested major version 0 is behind the latest major version
|
|
74
|
+
expect(zeroResult.warnings?.[0]).toContain('Requested major version 0 is behind the latest major version 6');
|
|
84
75
|
});
|
|
85
76
|
});
|
|
86
77
|
describe('error handling', () => {
|
|
@@ -91,8 +82,8 @@ describe('resolveVersion', () => {
|
|
|
91
82
|
expect(result.warnings).toBeDefined();
|
|
92
83
|
expect(result.warnings).toHaveLength(1);
|
|
93
84
|
expect(result.warnings?.[0]).toContain(`Failed to parse requested version "${invalidVersion}"`);
|
|
94
|
-
// Should fall back to latest version
|
|
95
|
-
expect(result.wantedVersion.version).toBe('
|
|
85
|
+
// Should fall back to latest version (coerced)
|
|
86
|
+
expect(result.wantedVersion.version).toBe('6.1.2');
|
|
96
87
|
});
|
|
97
88
|
});
|
|
98
89
|
it('should handle malformed but coercible versions', () => {
|
|
@@ -104,9 +95,9 @@ describe('resolveVersion', () => {
|
|
|
104
95
|
describe('edge cases', () => {
|
|
105
96
|
it('should handle complex version strings with pre-release and build metadata', () => {
|
|
106
97
|
const testCases = [
|
|
107
|
-
{ input: '
|
|
108
|
-
{ input: '
|
|
109
|
-
{ input: '
|
|
98
|
+
{ input: '6.1.2-next.0+1493919587-beta.1', expected: '6.1.2' },
|
|
99
|
+
{ input: '6.1.2-next.0+1493919587+build.123', expected: '6.1.2' },
|
|
100
|
+
{ input: '6.1.2-next.0+1493919587-beta.1.alpha.2+build.123.456', expected: '6.1.2' },
|
|
110
101
|
];
|
|
111
102
|
testCases.forEach(({ input, expected }) => {
|
|
112
103
|
const result = resolveVersion(input);
|
|
@@ -119,7 +110,7 @@ describe('resolveVersion', () => {
|
|
|
119
110
|
const result2 = resolveVersion('4.0.0');
|
|
120
111
|
// Latest version should be consistent
|
|
121
112
|
expect(result1.latestVersion.version).toBe(result2.latestVersion.version);
|
|
122
|
-
expect(result1.latestVersion.version).toBe('
|
|
113
|
+
expect(result1.latestVersion.version).toBe('6.1.2');
|
|
123
114
|
// Structure should be consistent
|
|
124
115
|
expect(result1).toHaveProperty('wantedVersion');
|
|
125
116
|
expect(result1).toHaveProperty('latestVersion');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-version.test.js","sourceRoot":"","sources":["../../../../src/__tests__/versioning/resolve-version.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-version.test.js","sourceRoot":"","sources":["../../../../src/__tests__/versioning/resolve-version.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { LogLevel } from '@azure/msal-browser';
|
|
2
|
+
import { TelemetryLevel, } from '@equinor/fusion-framework-module-telemetry';
|
|
3
|
+
/**
|
|
4
|
+
* Maps MSAL log levels to corresponding telemetry levels.
|
|
5
|
+
*
|
|
6
|
+
* This mapping ensures consistent log level translation between MSAL's logging
|
|
7
|
+
* system and the framework's telemetry system.
|
|
8
|
+
*/
|
|
9
|
+
const levelMap = {
|
|
10
|
+
[LogLevel.Verbose]: TelemetryLevel.Debug,
|
|
11
|
+
[LogLevel.Info]: TelemetryLevel.Information,
|
|
12
|
+
[LogLevel.Warning]: TelemetryLevel.Warning,
|
|
13
|
+
[LogLevel.Error]: TelemetryLevel.Error,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Parses MSAL log message into structured components.
|
|
17
|
+
*
|
|
18
|
+
* MSAL log messages follow the format:
|
|
19
|
+
* [timestamp] : [correlationId] : [package] : [level] - [component] - [message]
|
|
20
|
+
*
|
|
21
|
+
* @param message - Raw MSAL log message
|
|
22
|
+
* @returns Parsed message components
|
|
23
|
+
*/
|
|
24
|
+
const parseMsalMessage = (message) => {
|
|
25
|
+
// Match the structured format: [timestamp] : [correlationId] : [package] : [level] - [component] - [message]
|
|
26
|
+
const match = message.match(/^\[([^\]]+)\]\s*:\s*\[([^\]]*)\]\s*:\s*([^:]+)\s*:\s*(\w+)\s*-\s*([^-]+)\s*-\s*(.*)$/);
|
|
27
|
+
if (match) {
|
|
28
|
+
const [, _timestamp, _correlationId, packageInfo, _logLevel, component, logMessage] = match;
|
|
29
|
+
return {
|
|
30
|
+
package: packageInfo.trim() ?? undefined,
|
|
31
|
+
component: component.trim() ?? undefined,
|
|
32
|
+
message: logMessage.trim() ?? undefined,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Fallback for non-structured messages
|
|
36
|
+
return { message: message.trim() };
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Creates a telemetry callback function for MSAL logging integration.
|
|
40
|
+
*
|
|
41
|
+
* This function bridges MSAL's internal logging system with the framework's
|
|
42
|
+
* telemetry infrastructure. It maps MSAL log levels to telemetry levels and
|
|
43
|
+
* forwards log events to the provided telemetry provider with structured metadata.
|
|
44
|
+
*
|
|
45
|
+
* The callback function returned by this method will be called by MSAL whenever
|
|
46
|
+
* a log event occurs, allowing for centralized logging and monitoring of
|
|
47
|
+
* authentication-related events.
|
|
48
|
+
*
|
|
49
|
+
* @param provider - Telemetry provider instance to receive log events
|
|
50
|
+
* @param metadata - Additional metadata to include with each telemetry event (e.g., module version, environment)
|
|
51
|
+
* @param scope - Telemetry scope identifiers for categorization and filtering
|
|
52
|
+
* @returns Logger callback function for MSAL that forwards events to telemetry provider
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const callback = createClientLogCallback(
|
|
57
|
+
* telemetryProvider,
|
|
58
|
+
* { module: 'msal', version: '4.0.0' },
|
|
59
|
+
* ['framework', 'authentication']
|
|
60
|
+
* );
|
|
61
|
+
*
|
|
62
|
+
* // Use with MSAL configuration
|
|
63
|
+
* const config = {
|
|
64
|
+
* system: {
|
|
65
|
+
* loggerOptions: {
|
|
66
|
+
* loggerCallback: callback,
|
|
67
|
+
* piiLoggingEnabled: false
|
|
68
|
+
* }
|
|
69
|
+
* }
|
|
70
|
+
* };
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export const createClientLogCallback = (provider, metadata, scope) => {
|
|
74
|
+
return (level, message, _containsPii) => {
|
|
75
|
+
const parsedMessage = parseMsalMessage(message);
|
|
76
|
+
provider.trackEvent({
|
|
77
|
+
name: 'MsalClient',
|
|
78
|
+
level: levelMap[level] ?? TelemetryLevel.Information,
|
|
79
|
+
scope,
|
|
80
|
+
metadata,
|
|
81
|
+
properties: {
|
|
82
|
+
...parsedMessage,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=create-client-log-callback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-client-log-callback.js","sourceRoot":"","sources":["../../src/create-client-log-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAEL,cAAc,GACf,MAAM,4CAA4C,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,QAAQ,GAA8C;IAC1D,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,KAAK;IACxC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,WAAW;IAC3C,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO;IAC1C,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,KAAK;CACvC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,EAAE;IAC3C,6GAA6G;IAC7G,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CACzB,sFAAsF,CACvF,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;QAC5F,OAAO;YACL,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,SAAS;YACxC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,SAAS;YACxC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,SAAS;SACxC,CAAC;IACJ,CAAC;IAED,uCAAuC;IACvC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,QAA4B,EAC5B,QAAiC,EACjC,KAAe,EACc,EAAE;IAC/B,OAAO,CAAC,KAAe,EAAE,OAAe,EAAE,YAAqB,EAAE,EAAE;QACjE,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEhD,QAAQ,CAAC,UAAU,CAAC;YAClB,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,WAAW;YACpD,KAAK;YACL,QAAQ;YACR,UAAU,EAAE;gBACV,GAAG,aAAa;aACjB;SACF,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { MsalModuleVersion } from './static';
|
|
2
|
+
import { resolveVersion } from './versioning/resolve-version';
|
|
3
|
+
import { createProxyProvider as createProxyProvider_v2 } from './v2/create-proxy-provider';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a proxy provider for version compatibility.
|
|
6
|
+
*
|
|
7
|
+
* This function handles the creation of proxy providers that maintain
|
|
8
|
+
* backward compatibility with different MSAL versions while using the
|
|
9
|
+
* latest MSAL v4 implementation under the hood.
|
|
10
|
+
*
|
|
11
|
+
* @param provider - The base MSAL provider instance
|
|
12
|
+
* @param version - The target version string (e.g., '2.0.0', '4.0.0')
|
|
13
|
+
* @returns A proxy provider compatible with the specified version
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const baseProvider = new MsalProvider(config);
|
|
18
|
+
* const v2Proxy = createProxyProvider(baseProvider, '2.0.0');
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function createProxyProvider(provider, version) {
|
|
22
|
+
// Resolve the requested version to determine which proxy to create
|
|
23
|
+
const { enumVersion } = resolveVersion(version);
|
|
24
|
+
switch (enumVersion) {
|
|
25
|
+
case MsalModuleVersion.V2:
|
|
26
|
+
// Create v2-compatible proxy with legacy API adapters
|
|
27
|
+
return createProxyProvider_v2(provider);
|
|
28
|
+
case MsalModuleVersion.V4:
|
|
29
|
+
// Create transparent proxy for v4 - passes through to original provider
|
|
30
|
+
// This allows v4 code to be used where any version is expected
|
|
31
|
+
return new Proxy(provider, {
|
|
32
|
+
get: (target, prop) => {
|
|
33
|
+
switch (prop) {
|
|
34
|
+
case 'version': {
|
|
35
|
+
return target.version;
|
|
36
|
+
}
|
|
37
|
+
case 'msalVersion': {
|
|
38
|
+
return enumVersion;
|
|
39
|
+
}
|
|
40
|
+
case 'client': {
|
|
41
|
+
return target.client;
|
|
42
|
+
}
|
|
43
|
+
case 'account': {
|
|
44
|
+
return target.account;
|
|
45
|
+
}
|
|
46
|
+
case 'acquireAccessToken': {
|
|
47
|
+
return target.acquireAccessToken.bind(target);
|
|
48
|
+
}
|
|
49
|
+
case 'acquireToken': {
|
|
50
|
+
return target.acquireToken.bind(target);
|
|
51
|
+
}
|
|
52
|
+
case 'login': {
|
|
53
|
+
return target.login.bind(target);
|
|
54
|
+
}
|
|
55
|
+
case 'logout': {
|
|
56
|
+
return target.logout.bind(target);
|
|
57
|
+
}
|
|
58
|
+
case 'handleRedirect': {
|
|
59
|
+
return target.handleRedirect.bind(target);
|
|
60
|
+
}
|
|
61
|
+
case 'createProxyProvider': {
|
|
62
|
+
return target.createProxyProvider.bind(target);
|
|
63
|
+
}
|
|
64
|
+
case 'initialize': {
|
|
65
|
+
return () => {
|
|
66
|
+
// noop - initialize is handled by the provider, not the proxy
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
default: {
|
|
70
|
+
// backstop to prevent then from being called - this is not an async operation
|
|
71
|
+
if (prop === 'then')
|
|
72
|
+
return undefined;
|
|
73
|
+
// Exhaustive check: TypeScript-only guard to ensure all IMsalProvider keys are handled
|
|
74
|
+
const exhausted = prop;
|
|
75
|
+
return target[exhausted];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
default:
|
|
81
|
+
throw new Error(`Version ${version} is not supported`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=create-proxy-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-proxy-provider.js","sourceRoot":"","sources":["../../src/create-proxy-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,IAAI,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAE3F;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAuB,EACvB,OAAe;IAEf,mEAAmE;IACnE,MAAM,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAEhD,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,iBAAiB,CAAC,EAAE;YACvB,sDAAsD;YACtD,OAAO,sBAAsB,CAAC,QAAQ,CAAM,CAAC;QAC/C,KAAK,iBAAiB,CAAC,EAAE;YACvB,wEAAwE;YACxE,+DAA+D;YAC/D,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;gBACzB,GAAG,EAAE,CAAC,MAAqB,EAAE,IAAyB,EAAE,EAAE;oBACxD,QAAQ,IAAI,EAAE,CAAC;wBACb,KAAK,SAAS,CAAC,CAAC,CAAC;4BACf,OAAO,MAAM,CAAC,OAAO,CAAC;wBACxB,CAAC;wBACD,KAAK,aAAa,CAAC,CAAC,CAAC;4BACnB,OAAO,WAAW,CAAC;wBACrB,CAAC;wBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;4BACd,OAAO,MAAM,CAAC,MAAM,CAAC;wBACvB,CAAC;wBACD,KAAK,SAAS,CAAC,CAAC,CAAC;4BACf,OAAO,MAAM,CAAC,OAAO,CAAC;wBACxB,CAAC;wBACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;4BAC1B,OAAO,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAChD,CAAC;wBACD,KAAK,cAAc,CAAC,CAAC,CAAC;4BACpB,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC1C,CAAC;wBACD,KAAK,OAAO,CAAC,CAAC,CAAC;4BACb,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACnC,CAAC;wBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;4BACd,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACpC,CAAC;wBACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;4BACtB,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC5C,CAAC;wBACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;4BAC3B,OAAO,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACjD,CAAC;wBACD,KAAK,YAAY,CAAC,CAAC,CAAC;4BAClB,OAAO,GAAG,EAAE;gCACV,8DAA8D;4BAChE,CAAC,CAAC;wBACJ,CAAC;wBACD,OAAO,CAAC,CAAC,CAAC;4BACR,8EAA8E;4BAC9E,IAAI,IAAI,KAAK,MAAM;gCAAE,OAAO,SAAS,CAAC;4BAEtC,uFAAuF;4BACvF,MAAM,SAAS,GAAU,IAAI,CAAC;4BAC9B,OAAQ,MAAwB,CAAC,SAAS,CAAC,CAAC;wBAC9C,CAAC;oBACH,CAAC;gBACH,CAAC;aACF,CAAM,CAAC;QACV;YACE,MAAM,IAAI,KAAK,CAAC,WAAW,OAAO,mBAAmB,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,UAAU,GAGX,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAE,UAAU,EAAyB,MAAM,cAAc,CAAC;AAIjE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/esm/module.js
CHANGED
|
@@ -1,46 +1,94 @@
|
|
|
1
1
|
import { SemanticVersion, } from '@equinor/fusion-framework-module';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { MsalConfigurator } from './MsalConfigurator';
|
|
3
|
+
import { MsalProvider } from './MsalProvider';
|
|
4
|
+
import { version } from './version';
|
|
5
|
+
/**
|
|
6
|
+
* MSAL authentication module definition.
|
|
7
|
+
*
|
|
8
|
+
* This module manages authentication providers with the following initialization flow:
|
|
9
|
+
* 1. Check for custom provider configuration
|
|
10
|
+
* 2. Check for existing provider in parent module (for proxy compatibility)
|
|
11
|
+
* 3. Create new provider with client configuration
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* The module supports proxy providers for version compatibility, allowing v4 implementations
|
|
15
|
+
* to work with v2-compatible code during migration periods.
|
|
16
|
+
*/
|
|
4
17
|
export const module = {
|
|
5
18
|
name: 'auth',
|
|
6
|
-
version: new SemanticVersion(
|
|
7
|
-
configure: () => new
|
|
19
|
+
version: new SemanticVersion(version),
|
|
20
|
+
configure: () => new MsalConfigurator(),
|
|
8
21
|
initialize: async (init) => {
|
|
9
22
|
const config = await init.config.createConfigAsync(init);
|
|
10
|
-
//
|
|
23
|
+
// Priority 1: Use custom provider if explicitly configured
|
|
11
24
|
if (config.provider) {
|
|
12
25
|
return config.provider;
|
|
13
26
|
}
|
|
14
|
-
//
|
|
27
|
+
// Priority 2: Check if provider exists in parent module (proxy compatibility)
|
|
28
|
+
// This allows child applications to reuse parent's authentication provider
|
|
15
29
|
const hostProvider = init.ref?.auth;
|
|
16
30
|
if (hostProvider) {
|
|
17
31
|
try {
|
|
18
|
-
|
|
32
|
+
const proxyProvider = hostProvider.createProxyProvider(config.version);
|
|
33
|
+
return proxyProvider;
|
|
19
34
|
}
|
|
20
35
|
catch (error) {
|
|
21
36
|
console.error('MsalModule::Failed to create proxy provider', error);
|
|
22
|
-
//
|
|
37
|
+
// Fallback to host provider to prevent app breakage during migration
|
|
38
|
+
// TODO: Consider throwing error instead once all apps are migrated to v4
|
|
23
39
|
return hostProvider;
|
|
24
40
|
}
|
|
25
41
|
}
|
|
42
|
+
// Priority 3: Validate client configuration is provided
|
|
26
43
|
if (!config.client) {
|
|
27
44
|
throw new Error('Client configuration is required when provider is not in the parent module nor defined');
|
|
28
45
|
}
|
|
29
|
-
//
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
return authProvider;
|
|
46
|
+
// Create new MSAL provider instance
|
|
47
|
+
const provider = new MsalProvider(config);
|
|
48
|
+
// Initialize the provider (handles redirect callbacks, SSO, etc.)
|
|
49
|
+
await provider.initialize();
|
|
50
|
+
return provider;
|
|
36
51
|
},
|
|
37
52
|
};
|
|
53
|
+
/**
|
|
54
|
+
* Enables MSAL authentication module in the framework.
|
|
55
|
+
*
|
|
56
|
+
* This is a convenience function that adds the MSAL module configuration to the
|
|
57
|
+
* framework configurator with optional configuration callback.
|
|
58
|
+
*
|
|
59
|
+
* @param configurator - The framework modules configurator instance
|
|
60
|
+
* @param configure - Optional configuration callback for MSAL setup
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* enableMSAL(frameworkConfigurator, (builder) => {
|
|
65
|
+
* builder.setClientConfig({
|
|
66
|
+
* auth: { clientId: 'your-client-id', tenantId: 'your-tenant-id' }
|
|
67
|
+
* });
|
|
68
|
+
* builder.setRequiresAuth(true);
|
|
69
|
+
* });
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
38
72
|
export const enableMSAL = (
|
|
39
|
-
//
|
|
73
|
+
// @biome-ignore lint/suspicious/noExplicitAny: must be any to support all module types
|
|
40
74
|
configurator, configure) => {
|
|
41
75
|
const config = configure ? configureMsal(configure) : { module };
|
|
42
76
|
configurator.addConfig(config);
|
|
43
77
|
};
|
|
78
|
+
/**
|
|
79
|
+
* Creates MSAL module configuration with custom setup.
|
|
80
|
+
*
|
|
81
|
+
* @param configure - Configuration callback function
|
|
82
|
+
* @returns Module configuration object ready for framework integration
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const msalConfig = configureMsal((builder) => {
|
|
87
|
+
* builder.setClientConfig(msalClientConfig);
|
|
88
|
+
* builder.setRequiresAuth(true);
|
|
89
|
+
* });
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
44
92
|
export const configureMsal = (configure) => ({
|
|
45
93
|
module,
|
|
46
94
|
configure,
|
package/dist/esm/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAGlE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,MAAM,GAAe;IAChC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,IAAI,eAAe,CAAC,OAAO,CAAC;IACrC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,gBAAgB,EAAE;IACvC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAEzD,2DAA2D;QAC3D,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,8EAA8E;QAC9E,2EAA2E;QAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;QACpC,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,YAAY,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACvE,OAAO,aAAa,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;gBACpE,qEAAqE;gBACrE,yEAAyE;gBACzE,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QAE1C,kEAAkE;QAClE,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAE5B,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAqBF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;AACxB,uFAAuF;AACvF,YAA4C,EAC5C,SAAwB,EAClB,EAAE;IACR,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IACjE,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAuB,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM;IACN,SAAS;CACV,CAAC,CAAC;AAQH,eAAe,MAAM,CAAC"}
|
package/dist/esm/static.js
CHANGED
|
@@ -1,8 +1,38 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Module identifier for the MSAL authentication module.
|
|
3
|
+
*
|
|
4
|
+
* This constant is used to register and identify the MSAL module within the Fusion Framework.
|
|
5
|
+
*/
|
|
2
6
|
export const ModuleName = 'msal';
|
|
7
|
+
/**
|
|
8
|
+
* Enumeration of supported MSAL module versions.
|
|
9
|
+
*
|
|
10
|
+
* This enum defines the available MSAL versions and provides type-safe access to version identifiers.
|
|
11
|
+
* The `Latest` value is automatically set to the current module version at build time.
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* - `V2`: MSAL v2 compatibility (legacy support)
|
|
15
|
+
* - `V4`: MSAL v4 (current major version)
|
|
16
|
+
* - `Latest`: Always points to the current module version (5.1.0)
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { MsalModuleVersion } from '@equinor/fusion-framework-module-msal';
|
|
21
|
+
*
|
|
22
|
+
* // Check version
|
|
23
|
+
* if (version === MsalModuleVersion.Latest) {
|
|
24
|
+
* console.log('Using latest MSAL version');
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* // Create version-specific proxy
|
|
28
|
+
* const proxy = provider.createProxyProvider(MsalModuleVersion.V2);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
3
31
|
export var MsalModuleVersion;
|
|
4
32
|
(function (MsalModuleVersion) {
|
|
33
|
+
/** MSAL v2 compatibility version */
|
|
5
34
|
MsalModuleVersion["V2"] = "v2";
|
|
6
|
-
|
|
35
|
+
/** MSAL v4 (current major version) */
|
|
36
|
+
MsalModuleVersion["V4"] = "v4";
|
|
7
37
|
})(MsalModuleVersion || (MsalModuleVersion = {}));
|
|
8
38
|
//# sourceMappingURL=static.js.map
|
package/dist/esm/static.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/static.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/static.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,MAAe,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,oCAAoC;IACpC,8BAAS,CAAA;IACT,sCAAsC;IACtC,8BAAS,CAAA;AACX,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B"}
|
package/dist/esm/types.js
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-exports of core MSAL types from @azure/msal-browser.
|
|
3
|
+
*
|
|
4
|
+
* This module provides convenient access to commonly used MSAL types without
|
|
5
|
+
* requiring direct imports from @azure/msal-browser. These types represent
|
|
6
|
+
* fundamental authentication entities used throughout the MSAL module.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
1
10
|
export {};
|
|
2
11
|
//# sourceMappingURL=types.js.map
|
package/dist/esm/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { normalizeUri } from './normalize-uri';
|
|
2
|
+
/**
|
|
3
|
+
* Compares normalized version of urls
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export const compareOrigin = (a, b) => {
|
|
8
|
+
const url = { a: normalizeUri(a), b: normalizeUri(b) };
|
|
9
|
+
return url.a === url.b;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=compare-origin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-origin.js","sourceRoot":"","sources":["../../../src/util/compare-origin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE;IAC7D,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACzB,CAAC,CAAC"}
|
|
@@ -12,13 +12,4 @@ export const normalizeUri = (uri, home = window.location.origin) => {
|
|
|
12
12
|
const { origin, pathname } = new URL(uri);
|
|
13
13
|
return origin + pathname.replace(/([^:]\/)\/+/g, '$1');
|
|
14
14
|
};
|
|
15
|
-
|
|
16
|
-
* Compares normalized version of urls
|
|
17
|
-
*
|
|
18
|
-
* @internal
|
|
19
|
-
*/
|
|
20
|
-
export const compareOrigin = (a, b) => {
|
|
21
|
-
const url = { a: normalizeUri(a), b: normalizeUri(b) };
|
|
22
|
-
return url.a === url.b;
|
|
23
|
-
};
|
|
24
|
-
//# sourceMappingURL=url.js.map
|
|
15
|
+
//# sourceMappingURL=normalize-uri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-uri.js","sourceRoot":"","sources":["../../../src/util/normalize-uri.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,OAAe,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAU,EAAE;IACzF,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;IAChD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC,CAAC"}
|
|
@@ -12,4 +12,4 @@ export const redirect = (url, timeout = 3000, history) => {
|
|
|
12
12
|
history ? window.location.assign(url) : window.location.replace(url);
|
|
13
13
|
return new Promise((_, reject) => setTimeout(reject, timeout));
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=redirect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../../src/util/redirect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,OAAO,GAAG,IAAI,EAAE,OAAiB,EAAiB,EAAE;IACxF,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrE,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IAuthClient.interface.js","sourceRoot":"","sources":["../../../src/v2/IAuthClient.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IPublicClientApplication.interface.js","sourceRoot":"","sources":["../../../src/v2/IPublicClientApplication.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MsalProvider.interface.js","sourceRoot":"","sources":["../../../src/v2/MsalProvider.interface.ts"],"names":[],"mappings":""}
|