@equinor/fusion-framework-module-msal 10.0.1 → 11.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 +173 -0
- package/README.md +17 -368
- package/dist/esm/MsalClient.js +9 -0
- package/dist/esm/MsalClient.js.map +1 -1
- package/dist/esm/MsalConfigurator.js +178 -88
- package/dist/esm/MsalConfigurator.js.map +1 -1
- package/dist/esm/MsalProvider.js +20 -1
- package/dist/esm/MsalProvider.js.map +1 -1
- package/dist/esm/__tests__/MsalConfigurator.test.js +75 -0
- package/dist/esm/__tests__/MsalConfigurator.test.js.map +1 -1
- package/dist/esm/__tests__/create-proxy-provider.test.js +53 -0
- package/dist/esm/__tests__/create-proxy-provider.test.js.map +1 -0
- package/dist/esm/__tests__/mock/msal-mock.test.js +399 -0
- package/dist/esm/__tests__/mock/msal-mock.test.js.map +1 -0
- package/dist/esm/create-client-log-callback.js +1 -0
- package/dist/esm/create-client-log-callback.js.map +1 -1
- package/dist/esm/create-proxy-provider.js +5 -0
- package/dist/esm/create-proxy-provider.js.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mock/MsalMockClient.js +467 -0
- package/dist/esm/mock/MsalMockClient.js.map +1 -0
- package/dist/esm/mock/MsalMockConfigurator.js +187 -0
- package/dist/esm/mock/MsalMockConfigurator.js.map +1 -0
- package/dist/esm/mock/create-mock-token.js +60 -0
- package/dist/esm/mock/create-mock-token.js.map +1 -0
- package/dist/esm/mock/create-msal-mock-client.js +20 -0
- package/dist/esm/mock/create-msal-mock-client.js.map +1 -0
- package/dist/esm/mock/decode-jwt-segment.js +22 -0
- package/dist/esm/mock/decode-jwt-segment.js.map +1 -0
- package/dist/esm/mock/index.js +30 -0
- package/dist/esm/mock/index.js.map +1 -0
- package/dist/esm/mock/module.js +38 -0
- package/dist/esm/mock/module.js.map +1 -0
- package/dist/esm/module.js +3 -2
- package/dist/esm/module.js.map +1 -1
- package/dist/esm/msal-config-schema.js +37 -0
- package/dist/esm/msal-config-schema.js.map +1 -0
- package/dist/esm/telemetry-config-schema.js +16 -0
- package/dist/esm/telemetry-config-schema.js.map +1 -0
- package/dist/esm/util/normalize-uri.js.map +1 -1
- package/dist/esm/v2/Logger.js +173 -0
- package/dist/esm/v2/Logger.js.map +1 -0
- package/dist/esm/v2/create-proxy-client.js +6 -0
- package/dist/esm/v2/create-proxy-client.js.map +1 -1
- package/dist/esm/v2/create-proxy-provider.js +4 -0
- package/dist/esm/v2/create-proxy-provider.js.map +1 -1
- package/dist/esm/v2/types.js +3 -124
- package/dist/esm/v2/types.js.map +1 -1
- package/dist/esm/v4/create-proxy-provider.js +1 -0
- package/dist/esm/v4/create-proxy-provider.js.map +1 -1
- package/dist/esm/v4/types.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/versioning/VersionError.js.map +1 -1
- package/dist/esm/versioning/resolve-version.js +4 -1
- package/dist/esm/versioning/resolve-version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/MsalClient.d.ts +4 -0
- package/dist/types/MsalConfigurator.d.ts +97 -20
- package/dist/types/MsalProvider.d.ts +13 -0
- package/dist/types/__tests__/create-proxy-provider.test.d.ts +1 -0
- package/dist/types/__tests__/mock/msal-mock.test.d.ts +1 -0
- package/dist/types/create-proxy-provider.d.ts +3 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/mock/MsalMockClient.d.ts +270 -0
- package/dist/types/mock/MsalMockConfigurator.d.ts +156 -0
- package/dist/types/mock/create-mock-token.d.ts +54 -0
- package/dist/types/mock/create-msal-mock-client.d.ts +14 -0
- package/dist/types/mock/decode-jwt-segment.d.ts +13 -0
- package/dist/types/mock/index.d.ts +29 -0
- package/dist/types/mock/module.d.ts +35 -0
- package/dist/types/msal-config-schema.d.ts +64 -0
- package/dist/types/static.d.ts +1 -1
- package/dist/types/telemetry-config-schema.d.ts +8 -0
- package/dist/types/v2/IAuthClient.interface.d.ts +2 -2
- package/dist/types/v2/Logger.d.ts +92 -0
- package/dist/types/v2/MsalProvider.interface.d.ts +1 -1
- package/dist/types/v2/types.d.ts +3 -49
- package/dist/types/v4/types.d.ts +1 -3
- package/dist/types/version.d.ts +1 -1
- package/docs/api-reference.md +85 -0
- package/docs/auth-code-flow.md +86 -0
- package/docs/migration-v2-to-v4.md +115 -0
- package/docs/testing.md +167 -0
- package/docs/troubleshooting.md +17 -0
- package/docs/version-management.md +67 -0
- package/package.json +14 -7
- package/src/MsalClient.ts +9 -0
- package/src/MsalConfigurator.ts +204 -115
- package/src/MsalProvider.ts +20 -1
- package/src/__tests__/MsalConfigurator.test.ts +106 -0
- package/src/__tests__/create-proxy-provider.test.ts +77 -0
- package/src/__tests__/mock/msal-mock.test.ts +544 -0
- package/src/create-client-log-callback.ts +1 -0
- package/src/create-proxy-provider.ts +5 -0
- package/src/index.ts +6 -0
- package/src/mock/MsalMockClient.ts +599 -0
- package/src/mock/MsalMockConfigurator.ts +241 -0
- package/src/mock/create-mock-token.ts +92 -0
- package/src/mock/create-msal-mock-client.ts +25 -0
- package/src/mock/decode-jwt-segment.ts +22 -0
- package/src/mock/index.ts +29 -0
- package/src/mock/module.ts +54 -0
- package/src/module.ts +3 -2
- package/src/msal-config-schema.ts +81 -0
- package/src/telemetry-config-schema.ts +25 -0
- package/src/v2/IAuthClient.interface.ts +2 -2
- package/src/v2/Logger.ts +204 -0
- package/src/v2/MsalProvider.interface.ts +1 -1
- package/src/v2/create-proxy-client.ts +6 -0
- package/src/v2/create-proxy-provider.ts +4 -0
- package/src/v2/types.ts +8 -158
- package/src/v4/create-proxy-provider.ts +1 -0
- package/src/v4/types.ts +3 -3
- package/src/version.ts +1 -1
- package/src/versioning/resolve-version.ts +4 -1
- package/vitest.config.ts +1 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encodes a value as base64url without padding, as used in JWT segments.
|
|
3
|
+
*
|
|
4
|
+
* @param value - Raw string to encode.
|
|
5
|
+
* @returns The base64url representation.
|
|
6
|
+
*/
|
|
7
|
+
const base64Url = (value) => {
|
|
8
|
+
// btoa operates on latin1; encodeURIComponent round-trip keeps non-ASCII names intact
|
|
9
|
+
const bytes = new TextEncoder().encode(value);
|
|
10
|
+
let binary = '';
|
|
11
|
+
// Iterate over encoded bytes so Unicode claims are preserved before base64url encoding.
|
|
12
|
+
for (const byte of bytes) {
|
|
13
|
+
binary += String.fromCharCode(byte);
|
|
14
|
+
}
|
|
15
|
+
return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Creates a structurally valid, unsigned JWT for use in tests.
|
|
19
|
+
*
|
|
20
|
+
* The token has three base64url segments and decodes to the supplied claims, so
|
|
21
|
+
* code that splits, decodes, or inspects token claims behaves exactly as it does
|
|
22
|
+
* in production. The signature segment is a fixed placeholder — the token is
|
|
23
|
+
* **not** cryptographically valid and will be rejected by any real service.
|
|
24
|
+
*
|
|
25
|
+
* @remarks
|
|
26
|
+
* Timestamps default to a fixed issue time and a one-hour lifetime so repeated
|
|
27
|
+
* runs produce byte-identical tokens. A test that needs an expired token can set
|
|
28
|
+
* `exp` in the past.
|
|
29
|
+
*
|
|
30
|
+
* @param claims - Claims to embed in the token payload.
|
|
31
|
+
* @returns An unsigned JWT string in `header.payload.signature` form.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const token = createMockToken({ name: 'Test User', scp: 'Files.Read' });
|
|
36
|
+
* const [, payload] = token.split('.');
|
|
37
|
+
* JSON.parse(decodeJwtSegment(payload)).name; // 'Test User'
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export const createMockToken = (claims = {}) => {
|
|
41
|
+
const header = { alg: 'none', typ: 'JWT' };
|
|
42
|
+
// Fixed default clock keeps generated tokens byte-identical between runs
|
|
43
|
+
const issuedAt = claims.iat ?? 1_700_000_000;
|
|
44
|
+
const payload = {
|
|
45
|
+
iss: 'https://login.microsoftonline.com/fusion-test-tenant/v2.0',
|
|
46
|
+
aud: 'fusion-test-client',
|
|
47
|
+
tid: 'fusion-test-tenant',
|
|
48
|
+
oid: 'fusion-test-user',
|
|
49
|
+
iat: issuedAt,
|
|
50
|
+
nbf: issuedAt,
|
|
51
|
+
exp: issuedAt + 3600,
|
|
52
|
+
...claims,
|
|
53
|
+
};
|
|
54
|
+
return [
|
|
55
|
+
base64Url(JSON.stringify(header)),
|
|
56
|
+
base64Url(JSON.stringify(payload)),
|
|
57
|
+
'fusion-test-signature',
|
|
58
|
+
].join('.');
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=create-mock-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-mock-token.js","sourceRoot":"","sources":["../../../src/mock/create-mock-token.ts"],"names":[],"mappings":"AA+BA;;;;;GAKG;AACH,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE;IAC1C,sFAAsF;IACtF,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,wFAAwF;IACxF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,GAAoB,EAAE,EAAU,EAAE;IACtE,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAC3C,yEAAyE;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC;IAC7C,MAAM,OAAO,GAAoB;QAC/B,GAAG,EAAE,2DAA2D;QAChE,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,QAAQ;QACb,GAAG,EAAE,QAAQ;QACb,GAAG,EAAE,QAAQ,GAAG,IAAI;QACpB,GAAG,MAAM;KACV,CAAC;IAEF,OAAO;QACL,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,uBAAuB;KACxB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { MsalMockClient } from './MsalMockClient';
|
|
2
|
+
/**
|
|
3
|
+
* Convenience helper that creates a mock client instance.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* The class form is preferred for a more familiar configuration pattern.
|
|
7
|
+
*
|
|
8
|
+
* @param config - The same client configuration the real client is built from.
|
|
9
|
+
* @param user - Optional user to sign in, applied after construction.
|
|
10
|
+
* @returns A client that resolves tokens in-process.
|
|
11
|
+
*/
|
|
12
|
+
export const createMsalMockClient = (config, user) => {
|
|
13
|
+
const client = new MsalMockClient(config);
|
|
14
|
+
// Apply the optional identity after construction so the helper matches setUser semantics.
|
|
15
|
+
if (user) {
|
|
16
|
+
client.setUser(user);
|
|
17
|
+
}
|
|
18
|
+
return client;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=create-msal-mock-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-msal-mock-client.js","sourceRoot":"","sources":["../../../src/mock/create-msal-mock-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAqB,MAAM,kBAAkB,CAAC;AAErE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAAwB,EACxB,IAAmB,EACN,EAAE;IACf,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1C,0FAA0F;IAC1F,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decodes a base64url segment of a {@link createMockToken} JWT back to its JSON string.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Plain `atob` alone mangles non-ASCII claims: it treats its output as latin1,
|
|
6
|
+
* while segments are UTF-8 encoded. This reverses that encoding and also
|
|
7
|
+
* restores the standard base64 alphabet/padding `atob` expects.
|
|
8
|
+
*
|
|
9
|
+
* @param segment - A base64url segment, e.g. from splitting a JWT on `.`.
|
|
10
|
+
* @returns The decoded UTF-8 string.
|
|
11
|
+
*/
|
|
12
|
+
export function decodeJwtSegment(segment) {
|
|
13
|
+
const base64 = segment
|
|
14
|
+
.replace(/-/g, '+')
|
|
15
|
+
.replace(/_/g, '/')
|
|
16
|
+
.padEnd(segment.length + ((4 - (segment.length % 4)) % 4), '=');
|
|
17
|
+
const binary = atob(base64);
|
|
18
|
+
const bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0));
|
|
19
|
+
return new TextDecoder().decode(bytes);
|
|
20
|
+
}
|
|
21
|
+
export default decodeJwtSegment;
|
|
22
|
+
//# sourceMappingURL=decode-jwt-segment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode-jwt-segment.js","sourceRoot":"","sources":["../../../src/mock/decode-jwt-segment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock MSAL for tests: real provider, real configurator, fake client.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Substituting the client is the smallest change that removes Entra ID from a test.
|
|
6
|
+
* Everything above it — scope resolution, silent-first token acquisition, account
|
|
7
|
+
* handling, proxy providers, telemetry — is the production code path.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { enableMsalMock } from '@equinor/fusion-framework-module-msal/mock';
|
|
12
|
+
*
|
|
13
|
+
* // default mock user
|
|
14
|
+
* enableMsalMock(configurator);
|
|
15
|
+
*
|
|
16
|
+
* // or a specific one
|
|
17
|
+
* enableMsalMock(configurator, (builder) => {
|
|
18
|
+
* builder.setAccount({ name: 'Ada Lovelace', signedOut: true });
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @packageDocumentation
|
|
23
|
+
*/
|
|
24
|
+
export { MsalMockClient } from './MsalMockClient';
|
|
25
|
+
export { createMsalMockClient } from './create-msal-mock-client';
|
|
26
|
+
export { MsalMockConfigurator } from './MsalMockConfigurator';
|
|
27
|
+
export { enableMsalMock, msalMockModule } from './module';
|
|
28
|
+
export { createMockToken } from './create-mock-token';
|
|
29
|
+
export { decodeJwtSegment } from './decode-jwt-segment';
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mock/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,cAAc,EAAqB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAyB,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,eAAe,EAAwB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { module } from '../module';
|
|
2
|
+
import { MsalMockConfigurator } from './MsalMockConfigurator';
|
|
3
|
+
/**
|
|
4
|
+
* The MSAL module with a mock client instead of a live connection to Entra ID.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* Only `configure` differs from the real module. `initialize` is the production
|
|
8
|
+
* one, untouched, so proxy providers, host-provider hoisting and provider
|
|
9
|
+
* initialization all behave exactly as they do in production — and a test
|
|
10
|
+
* observes the real start-up path rather than a rehearsal of it.
|
|
11
|
+
*/
|
|
12
|
+
export const msalMockModule = {
|
|
13
|
+
...module,
|
|
14
|
+
configure: () => new MsalMockConfigurator(),
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Enables MSAL against a mock client, so a test needs no credentials and no network.
|
|
18
|
+
*
|
|
19
|
+
* @remarks
|
|
20
|
+
* Registered last, this replaces whichever auth module the configurator already
|
|
21
|
+
* carries, so it works on a `FrameworkConfigurator` that pre-registers the real one.
|
|
22
|
+
*
|
|
23
|
+
* @param configurator - The modules configurator to register on.
|
|
24
|
+
* @param configure - Optional callback to override the default mock client.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* enableMsalMock(configurator, (builder) => {
|
|
29
|
+
* builder.setAccount({ name: 'Ada Lovelace' });
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export const enableMsalMock = (
|
|
34
|
+
// biome-ignore lint/suspicious/noExplicitAny: must be any to support all module types
|
|
35
|
+
configurator, configure) => {
|
|
36
|
+
configurator.addConfig({ module: msalMockModule, configure });
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/mock/module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAmB,MAAM,WAAW,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,GAAG,MAAM;IACT,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,oBAAoB,EAAE;CAC5C,CAAC;AAUF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;AAC5B,sFAAsF;AACtF,YAA4C,EAC5C,SAA4B,EACtB,EAAE;IACR,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAEzD,CAAC,CAAC;AACL,CAAC,CAAC"}
|
package/dist/esm/module.js
CHANGED
|
@@ -27,6 +27,7 @@ export const module = {
|
|
|
27
27
|
// Priority 2: Check if provider exists in parent module (proxy compatibility)
|
|
28
28
|
// This allows child applications to reuse parent's authentication provider
|
|
29
29
|
const hostProvider = init.ref?.auth;
|
|
30
|
+
// Reuse the parent's provider (via a version-compatible proxy) when available
|
|
30
31
|
if (hostProvider) {
|
|
31
32
|
try {
|
|
32
33
|
const proxyProvider = hostProvider.createProxyProvider(config.version);
|
|
@@ -35,7 +36,7 @@ export const module = {
|
|
|
35
36
|
catch (error) {
|
|
36
37
|
console.error('MsalModule::Failed to create proxy provider', error);
|
|
37
38
|
// Fallback to host provider to prevent app breakage during migration
|
|
38
|
-
// TODO: Consider throwing error instead once all apps are migrated to v4
|
|
39
|
+
// TODO(#5114): Consider throwing error instead once all apps are migrated to v4
|
|
39
40
|
return hostProvider;
|
|
40
41
|
}
|
|
41
42
|
}
|
|
@@ -70,7 +71,7 @@ export const module = {
|
|
|
70
71
|
* ```
|
|
71
72
|
*/
|
|
72
73
|
export const enableMSAL = (
|
|
73
|
-
//
|
|
74
|
+
// biome-ignore lint/suspicious/noExplicitAny: must be any to support all module types
|
|
74
75
|
configurator, configure) => {
|
|
75
76
|
const config = configure ? configureMsal(configure) : { module };
|
|
76
77
|
configurator.addConfig(config);
|
package/dist/esm/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAElE,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,
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAElE,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,8EAA8E;QAC9E,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,gFAAgF;gBAChF,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;AAaF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;AACxB,sFAAsF;AACtF,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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
import semver from 'semver';
|
|
3
|
+
import { CacheLookupPolicy } from '@azure/msal-browser';
|
|
4
|
+
import { TelemetryConfigSchema } from './telemetry-config-schema';
|
|
5
|
+
/**
|
|
6
|
+
* Zod schema for MSAL module configuration validation.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* Kept in its own module so the configuration can be extended at its source.
|
|
10
|
+
* The schema itself describes what reaches `MsalProvider` and strips anything
|
|
11
|
+
* else; keys a variant of this module needs only while the configuration is
|
|
12
|
+
* being built are declared on {@link MsalConfigExtension} instead.
|
|
13
|
+
*/
|
|
14
|
+
export const MsalConfigSchema = z.object({
|
|
15
|
+
client: z.custom().optional(),
|
|
16
|
+
provider: z.custom().optional(),
|
|
17
|
+
requiresAuth: z.boolean().optional(),
|
|
18
|
+
redirectUri: z.string().optional(),
|
|
19
|
+
loginHint: z.string().optional(),
|
|
20
|
+
authCode: z.string().optional(),
|
|
21
|
+
cacheLookupPolicy: z
|
|
22
|
+
.custom((val) => typeof val === 'number' &&
|
|
23
|
+
Object.values(CacheLookupPolicy).includes(val))
|
|
24
|
+
.optional(),
|
|
25
|
+
version: z.string().transform((value, ctx) => {
|
|
26
|
+
const coerced = semver.coerce(value);
|
|
27
|
+
// `semver.coerce` returns `null` for an unparseable version; without this guard it
|
|
28
|
+
// would silently become the literal string "null" instead of failing validation.
|
|
29
|
+
if (!coerced) {
|
|
30
|
+
ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'Invalid MSAL module version' });
|
|
31
|
+
return z.NEVER;
|
|
32
|
+
}
|
|
33
|
+
return coerced.version;
|
|
34
|
+
}),
|
|
35
|
+
telemetry: TelemetryConfigSchema,
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=msal-config-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"msal-config-schema.js","sourceRoot":"","sources":["../../src/msal-config-schema.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAe,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAiB,CAAC,QAAQ,EAAE;IAC9C,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,iBAAiB,EAAE,CAAC;SACjB,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CACN,OAAO,GAAG,KAAK,QAAQ;QACvB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,GAAwB,CAAC,CACtE;SACA,QAAQ,EAAE;IACb,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,mFAAmF;QACnF,iFAAiF;QACjF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;YACtF,OAAO,CAAC,CAAC,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC,CAAC;IACF,SAAS,EAAE,qBAAqB;CACjC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
import { version } from './version';
|
|
3
|
+
/**
|
|
4
|
+
* Zod schema for telemetry configuration validation.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export const TelemetryConfigSchema = z.object({
|
|
9
|
+
provider: z.custom().optional(),
|
|
10
|
+
metadata: z.record(z.string(), z.unknown()).optional().default({
|
|
11
|
+
module: 'msal',
|
|
12
|
+
version,
|
|
13
|
+
}),
|
|
14
|
+
scope: z.array(z.string()).optional().default(['framework', 'authentication']),
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=telemetry-config-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-config-schema.js","sourceRoot":"","sources":["../../src/telemetry-config-schema.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAsB,CAAC,QAAQ,EAAE;IACnD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;QAC7D,MAAM,EAAE,MAAM;QACd,OAAO;KACR,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;CAC/E,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-uri.js","sourceRoot":"","sources":["../../../src/util/normalize-uri.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"normalize-uri.js","sourceRoot":"","sources":["../../../src/util/normalize-uri.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,IAAI,GAAW,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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { LogLevel } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Class which facilitates logging of messages to a specific place
|
|
4
|
+
*/
|
|
5
|
+
export class Logger {
|
|
6
|
+
// Correlation ID for request, usually set by user.
|
|
7
|
+
correlationId;
|
|
8
|
+
// Current log level, defaults to info.
|
|
9
|
+
level = LogLevel.Info;
|
|
10
|
+
// Boolean describing whether PII logging is allowed.
|
|
11
|
+
piiLoggingEnabled;
|
|
12
|
+
// Callback to send messages to.
|
|
13
|
+
localCallback;
|
|
14
|
+
// Package name implementing this logger
|
|
15
|
+
packageName;
|
|
16
|
+
// Package version implementing this logger
|
|
17
|
+
packageVersion;
|
|
18
|
+
/**
|
|
19
|
+
* Creates a new `Logger`.
|
|
20
|
+
*
|
|
21
|
+
* @param loggerOptions - Logger configuration, including callback, PII, and log level settings.
|
|
22
|
+
* @param packageName - Name of the package implementing this logger.
|
|
23
|
+
* @param packageVersion - Version of the package implementing this logger.
|
|
24
|
+
*/
|
|
25
|
+
constructor(loggerOptions, packageName, packageVersion) {
|
|
26
|
+
const defaultLoggerCallback = () => {
|
|
27
|
+
return;
|
|
28
|
+
};
|
|
29
|
+
const setLoggerOptions = loggerOptions || Logger.createDefaultLoggerOptions();
|
|
30
|
+
this.localCallback = setLoggerOptions.loggerCallback || defaultLoggerCallback;
|
|
31
|
+
this.piiLoggingEnabled = setLoggerOptions.piiLoggingEnabled || false;
|
|
32
|
+
this.level =
|
|
33
|
+
typeof setLoggerOptions.logLevel === 'number' ? setLoggerOptions.logLevel : LogLevel.Info;
|
|
34
|
+
this.correlationId = setLoggerOptions.correlationId || '';
|
|
35
|
+
this.packageName = packageName || '';
|
|
36
|
+
this.packageVersion = packageVersion || '';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Creates the default logger options used when none are provided.
|
|
40
|
+
*
|
|
41
|
+
* @returns Default logger options with a no-op callback, PII logging disabled, and Info level.
|
|
42
|
+
*/
|
|
43
|
+
static createDefaultLoggerOptions() {
|
|
44
|
+
return {
|
|
45
|
+
loggerCallback: () => {
|
|
46
|
+
// allow users to not set loggerCallback
|
|
47
|
+
},
|
|
48
|
+
piiLoggingEnabled: false,
|
|
49
|
+
logLevel: LogLevel.Info,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create new Logger with existing configurations.
|
|
54
|
+
*
|
|
55
|
+
* @param packageName - Name of the package implementing this logger.
|
|
56
|
+
* @param packageVersion - Version of the package implementing this logger.
|
|
57
|
+
* @param correlationId - Correlation ID to use, falling back to this logger's own if omitted.
|
|
58
|
+
* @returns A new `Logger` instance cloned from this one.
|
|
59
|
+
*/
|
|
60
|
+
clone(packageName, packageVersion, correlationId) {
|
|
61
|
+
return new Logger({
|
|
62
|
+
loggerCallback: this.localCallback,
|
|
63
|
+
piiLoggingEnabled: this.piiLoggingEnabled,
|
|
64
|
+
logLevel: this.level,
|
|
65
|
+
correlationId: correlationId || this.correlationId,
|
|
66
|
+
}, packageName, packageVersion);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Logs error messages.
|
|
70
|
+
*
|
|
71
|
+
* @param message - The message to log.
|
|
72
|
+
* @param correlationId - Correlation ID to attach to the log entry, if any.
|
|
73
|
+
*/
|
|
74
|
+
error(message, correlationId) {
|
|
75
|
+
this.logMessage(message, {
|
|
76
|
+
logLevel: LogLevel.Error,
|
|
77
|
+
containsPii: false,
|
|
78
|
+
correlationId: correlationId || '',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Logs warning messages.
|
|
83
|
+
*
|
|
84
|
+
* @param message - The message to log.
|
|
85
|
+
* @param correlationId - Correlation ID to attach to the log entry, if any.
|
|
86
|
+
*/
|
|
87
|
+
warning(message, correlationId) {
|
|
88
|
+
this.logMessage(message, {
|
|
89
|
+
logLevel: LogLevel.Warning,
|
|
90
|
+
containsPii: false,
|
|
91
|
+
correlationId: correlationId || '',
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Logs info messages.
|
|
96
|
+
*
|
|
97
|
+
* @param message - The message to log.
|
|
98
|
+
* @param correlationId - Correlation ID to attach to the log entry, if any.
|
|
99
|
+
*/
|
|
100
|
+
info(message, correlationId) {
|
|
101
|
+
this.logMessage(message, {
|
|
102
|
+
logLevel: LogLevel.Info,
|
|
103
|
+
containsPii: false,
|
|
104
|
+
correlationId: correlationId || '',
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Logs verbose messages.
|
|
109
|
+
*
|
|
110
|
+
* @param message - The message to log.
|
|
111
|
+
* @param correlationId - Correlation ID to attach to the log entry, if any.
|
|
112
|
+
*/
|
|
113
|
+
verbose(message, correlationId) {
|
|
114
|
+
this.logMessage(message, {
|
|
115
|
+
logLevel: LogLevel.Verbose,
|
|
116
|
+
containsPii: false,
|
|
117
|
+
correlationId: correlationId || '',
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Logs trace messages.
|
|
122
|
+
*
|
|
123
|
+
* @param message - The message to log.
|
|
124
|
+
* @param correlationId - Correlation ID to attach to the log entry, if any.
|
|
125
|
+
*/
|
|
126
|
+
trace(message, correlationId) {
|
|
127
|
+
this.logMessage(message, {
|
|
128
|
+
logLevel: LogLevel.Trace,
|
|
129
|
+
containsPii: false,
|
|
130
|
+
correlationId: correlationId || '',
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Returns whether PII Logging is enabled or not.
|
|
135
|
+
*
|
|
136
|
+
* @returns `true` when PII logging is enabled, otherwise `false`.
|
|
137
|
+
*/
|
|
138
|
+
isPiiLoggingEnabled() {
|
|
139
|
+
return this.piiLoggingEnabled || false;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Formats and dispatches a log message to the configured callback, unless it
|
|
143
|
+
* is below the configured log level or contains PII while PII logging is disabled.
|
|
144
|
+
*
|
|
145
|
+
* @param logMessage - The raw message to log.
|
|
146
|
+
* @param options - Log level, PII flag, and correlation ID for this message.
|
|
147
|
+
*/
|
|
148
|
+
logMessage(logMessage, options) {
|
|
149
|
+
// Skip messages below the configured level or containing PII when PII logging is disabled
|
|
150
|
+
if (options.logLevel > this.level || (!this.piiLoggingEnabled && options.containsPii)) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const timestamp = new Date().toUTCString();
|
|
154
|
+
// Add correlationId to logs if set, correlationId provided on log messages take precedence
|
|
155
|
+
const logHeader = `[${timestamp}] : [${options.correlationId || this.correlationId || ''}]`;
|
|
156
|
+
const log = `${logHeader} : ${this.packageName}@${this.packageVersion} : ${LogLevel[options.logLevel]} - ${logMessage}`;
|
|
157
|
+
this.executeCallback(options.logLevel, log, options.containsPii || false);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Execute callback with message.
|
|
161
|
+
*
|
|
162
|
+
* @param level - The log level of the message.
|
|
163
|
+
* @param message - The formatted message to send to the callback.
|
|
164
|
+
* @param containsPii - Whether the message contains personally identifiable information.
|
|
165
|
+
*/
|
|
166
|
+
executeCallback(level, message, containsPii) {
|
|
167
|
+
// Only invoke the callback when one has been configured
|
|
168
|
+
if (this.localCallback) {
|
|
169
|
+
this.localCallback(level, message, containsPii);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=Logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../../src/v2/Logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,9 +24,11 @@ import { mapAuthenticationResult } from './map-authentication-result';
|
|
|
24
24
|
export function createProxyClient(client) {
|
|
25
25
|
const proxy = new Proxy(client, {
|
|
26
26
|
get: (target, prop) => {
|
|
27
|
+
// Adapt each v4 client member to the v2-compatible shape expected by callers
|
|
27
28
|
switch (prop) {
|
|
28
29
|
case 'getAllAccounts': {
|
|
29
30
|
return () => {
|
|
31
|
+
// Map each v4 account shape to its v2-compatible equivalent
|
|
30
32
|
return target.getAllAccounts().map(mapAccountInfo);
|
|
31
33
|
};
|
|
32
34
|
}
|
|
@@ -58,6 +60,7 @@ export function createProxyClient(client) {
|
|
|
58
60
|
case 'handleRedirectPromise': {
|
|
59
61
|
return async () => {
|
|
60
62
|
const result = await target.handleRedirectPromise();
|
|
63
|
+
// No redirect result means there's nothing pending to map
|
|
61
64
|
if (!result) {
|
|
62
65
|
return null;
|
|
63
66
|
}
|
|
@@ -67,6 +70,7 @@ export function createProxyClient(client) {
|
|
|
67
70
|
case 'getActiveAccount': {
|
|
68
71
|
return () => {
|
|
69
72
|
const account = target.getActiveAccount();
|
|
73
|
+
// No active account means there's nothing to map
|
|
70
74
|
if (!account) {
|
|
71
75
|
return null;
|
|
72
76
|
}
|
|
@@ -153,6 +157,8 @@ export function createProxyClient(client) {
|
|
|
153
157
|
}
|
|
154
158
|
},
|
|
155
159
|
});
|
|
160
|
+
// The Proxy handler above implements every member of `IAuthClient` at runtime via its `get`
|
|
161
|
+
// trap, but TypeScript can't verify a `Proxy<T>` satisfies `T` structurally.
|
|
156
162
|
return proxy;
|
|
157
163
|
}
|
|
158
164
|
//# sourceMappingURL=create-proxy-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-proxy-client.js","sourceRoot":"","sources":["../../../src/v2/create-proxy-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAGtE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;QAC9B,GAAG,EAAE,CAAC,MAAmB,EAAE,IAAuB,EAAE,EAAE;YACpD,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"create-proxy-client.js","sourceRoot":"","sources":["../../../src/v2/create-proxy-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { MsalModuleVersion } from '../static';
|
|
|
8
8
|
* @returns True if the request is in v4 format (has a `request` property with `scopes` and `account`)
|
|
9
9
|
*/
|
|
10
10
|
function isRequestV4(req) {
|
|
11
|
+
// Non-object/null values can never match the v4 request shape
|
|
11
12
|
if (typeof req !== 'object' || req === null) {
|
|
12
13
|
return false;
|
|
13
14
|
}
|
|
@@ -41,6 +42,7 @@ export function createProxyProvider(provider) {
|
|
|
41
42
|
// Use Proxy to intercept property access and provide v2-compatible implementations
|
|
42
43
|
const proxy = new Proxy(provider, {
|
|
43
44
|
get: (target, prop) => {
|
|
45
|
+
// Adapt each v4 provider member to the v2-compatible shape expected by callers
|
|
44
46
|
switch (prop) {
|
|
45
47
|
case 'version': {
|
|
46
48
|
return provider.version;
|
|
@@ -55,6 +57,7 @@ export function createProxyProvider(provider) {
|
|
|
55
57
|
case 'defaultClient': {
|
|
56
58
|
// Deprecated property - redirect to client with warning
|
|
57
59
|
console.warn('defaultClient is deprecated, use client instead');
|
|
60
|
+
// Same v2-compatible client wrapper as the `client` case above.
|
|
58
61
|
return v2Client;
|
|
59
62
|
}
|
|
60
63
|
case 'defaultAccount': {
|
|
@@ -138,6 +141,7 @@ export function createProxyProvider(provider) {
|
|
|
138
141
|
};
|
|
139
142
|
}
|
|
140
143
|
default: {
|
|
144
|
+
// The proxy is awaited in some contexts, so `then` must resolve to undefined
|
|
141
145
|
if (prop === 'then') {
|
|
142
146
|
return undefined;
|
|
143
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-proxy-provider.js","sourceRoot":"","sources":["../../../src/v2/create-proxy-provider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;;;GAKG;AACH,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,GAA0B,CAAC;IAC7C,OAAO,SAAS,IAAI,SAAS,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAuB;IACzD,mEAAmE;IACnE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEpD,mFAAmF;IACnF,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE;QAChC,GAAG,EAAE,CAAC,MAAqB,EAAE,IAA4B,EAAE,EAAE;YAC3D,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"create-proxy-provider.js","sourceRoot":"","sources":["../../../src/v2/create-proxy-provider.ts"],"names":[],"mappings":"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"}
|