@conduit-d365/auth 0.2.0 → 0.2.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.
- package/dist/AuthProvider.d.ts +2 -12
- package/dist/AuthProvider.d.ts.map +1 -1
- package/dist/AuthProvider.js +11 -17
- package/dist/AuthProvider.js.map +1 -1
- package/dist/ProtectedRoute.d.ts +2 -2
- package/dist/ProtectedRoute.d.ts.map +1 -1
- package/dist/ProtectedRoute.js +8 -3
- package/dist/ProtectedRoute.js.map +1 -1
- package/package.json +1 -1
package/dist/AuthProvider.d.ts
CHANGED
|
@@ -16,18 +16,8 @@ interface AuthProviderProps {
|
|
|
16
16
|
* Wraps the app in an MSAL authentication context.
|
|
17
17
|
*
|
|
18
18
|
* Handles MSAL initialisation, redirect callbacks, and active account
|
|
19
|
-
* management.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* Children are NOT rendered until MSAL has initialised and any pending
|
|
23
|
-
* redirect promise has been processed. This prevents the race condition
|
|
24
|
-
* where ProtectedRoute calls login() before handleRedirectPromise()
|
|
25
|
-
* completes, causing an infinite redirect loop.
|
|
26
|
-
*
|
|
27
|
-
* Usage:
|
|
28
|
-
* <AuthProvider clientId={import.meta.env.VITE_ENTRA_CLIENT_ID}>
|
|
29
|
-
* <App />
|
|
30
|
-
* </AuthProvider>
|
|
19
|
+
* management. Children are NOT rendered until MSAL has initialised and
|
|
20
|
+
* any pending redirect promise has been processed.
|
|
31
21
|
*/
|
|
32
22
|
export declare function AuthProvider({ clientId, redirectUri, scopes, children, }: AuthProviderProps): import("react/jsx-runtime").JSX.Element | null;
|
|
33
23
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../src/AuthProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqD,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../src/AuthProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqD,MAAM,OAAO,CAAC;AAY1E,qEAAqE;AACrE,eAAO,MAAM,aAAa,qCAAiD,CAAC;AAE5E,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,wBAAgC,CAAC;AAE9D,UAAU,iBAAiB;IACzB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EACX,MAAM,EACN,QAAQ,GACT,EAAE,iBAAiB,kDA6DnB"}
|
package/dist/AuthProvider.js
CHANGED
|
@@ -11,18 +11,8 @@ export const MsalReadyContext = createContext(false);
|
|
|
11
11
|
* Wraps the app in an MSAL authentication context.
|
|
12
12
|
*
|
|
13
13
|
* Handles MSAL initialisation, redirect callbacks, and active account
|
|
14
|
-
* management.
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* Children are NOT rendered until MSAL has initialised and any pending
|
|
18
|
-
* redirect promise has been processed. This prevents the race condition
|
|
19
|
-
* where ProtectedRoute calls login() before handleRedirectPromise()
|
|
20
|
-
* completes, causing an infinite redirect loop.
|
|
21
|
-
*
|
|
22
|
-
* Usage:
|
|
23
|
-
* <AuthProvider clientId={import.meta.env.VITE_ENTRA_CLIENT_ID}>
|
|
24
|
-
* <App />
|
|
25
|
-
* </AuthProvider>
|
|
14
|
+
* management. Children are NOT rendered until MSAL has initialised and
|
|
15
|
+
* any pending redirect promise has been processed.
|
|
26
16
|
*/
|
|
27
17
|
export function AuthProvider({ clientId, redirectUri, scopes, children, }) {
|
|
28
18
|
const msalInstanceRef = useRef(null);
|
|
@@ -35,13 +25,18 @@ export function AuthProvider({ clientId, redirectUri, scopes, children, }) {
|
|
|
35
25
|
useEffect(() => {
|
|
36
26
|
const init = async () => {
|
|
37
27
|
await msalInstance.initialize();
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (
|
|
28
|
+
// Process any pending redirect response BEFORE rendering children
|
|
29
|
+
const response = await msalInstance.handleRedirectPromise();
|
|
30
|
+
if (response?.account) {
|
|
31
|
+
// Returning from a login redirect — set the account immediately
|
|
32
|
+
msalInstance.setActiveAccount(response.account);
|
|
33
|
+
}
|
|
34
|
+
else if (!msalInstance.getActiveAccount() &&
|
|
41
35
|
msalInstance.getAllAccounts().length > 0) {
|
|
36
|
+
// Existing session — set first account as active
|
|
42
37
|
msalInstance.setActiveAccount(msalInstance.getAllAccounts()[0]);
|
|
43
38
|
}
|
|
44
|
-
//
|
|
39
|
+
// Listen for future login successes
|
|
45
40
|
msalInstance.addEventCallback((event) => {
|
|
46
41
|
if (event.eventType === EventType.LOGIN_SUCCESS &&
|
|
47
42
|
event.payload) {
|
|
@@ -55,7 +50,6 @@ export function AuthProvider({ clientId, redirectUri, scopes, children, }) {
|
|
|
55
50
|
};
|
|
56
51
|
init();
|
|
57
52
|
}, [msalInstance]);
|
|
58
|
-
// Block rendering until MSAL has initialised and processed any redirect
|
|
59
53
|
if (!msalReady) {
|
|
60
54
|
return null;
|
|
61
55
|
}
|
package/dist/AuthProvider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../src/AuthProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EACL,YAAY,
|
|
1
|
+
{"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../src/AuthProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EACL,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,SAAS,EACT,uBAAuB,GAGxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,qEAAqE;AACrE,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAuB,SAAS,CAAC,CAAC;AAE5E,mEAAmE;AACnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAU,KAAK,CAAC,CAAC;AAY9D;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EACX,MAAM,EACN,QAAQ,GACU;IAClB,MAAM,eAAe,GAAG,MAAM,CAAiC,IAAI,CAAC,CAAC;IACrE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3D,eAAe,CAAC,OAAO,GAAG,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;YAEhC,kEAAkE;YAClE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,qBAAqB,EAAE,CAAC;YAE5D,IAAI,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACtB,gEAAgE;gBAChE,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;iBAAM,IACL,CAAC,YAAY,CAAC,gBAAgB,EAAE;gBAChC,YAAY,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,EACxC,CAAC;gBACD,iDAAiD;gBACjD,YAAY,CAAC,gBAAgB,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC;YAED,oCAAoC;YACpC,YAAY,CAAC,gBAAgB,CAAC,CAAC,KAAmB,EAAE,EAAE;gBACpD,IACE,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,aAAa;oBAC3C,KAAK,CAAC,OAAO,EACb,CAAC;oBACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAA+B,CAAC;oBACrD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;wBACnB,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAChD,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,IAAI,EAAE,CAAC;IACT,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,YAAY,IAAC,QAAQ,EAAE,YAAY,YAClC,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,SAAS,YACzC,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YAClC,QAAQ,GACc,GACC,GACf,CAChB,CAAC;AACJ,CAAC"}
|
package/dist/ProtectedRoute.d.ts
CHANGED
|
@@ -8,8 +8,8 @@ interface ProtectedRouteProps {
|
|
|
8
8
|
* Route guard that requires authentication.
|
|
9
9
|
*
|
|
10
10
|
* While MSAL is initialising, shows a loading indicator. If the user
|
|
11
|
-
* is not authenticated, triggers a login redirect
|
|
12
|
-
* the children.
|
|
11
|
+
* is not authenticated, triggers a login redirect (once only per mount).
|
|
12
|
+
* Otherwise renders the children.
|
|
13
13
|
*
|
|
14
14
|
* Usage:
|
|
15
15
|
* <Route path="/projects" element={
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProtectedRoute.d.ts","sourceRoot":"","sources":["../src/ProtectedRoute.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ProtectedRoute.d.ts","sourceRoot":"","sources":["../src/ProtectedRoute.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAGtC,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,gBAAgB,GACjB,EAAE,mBAAmB,2CAiBrB"}
|
package/dist/ProtectedRoute.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useRef } from "react";
|
|
2
3
|
import { useAuth } from "./useAuth";
|
|
3
4
|
/**
|
|
4
5
|
* Route guard that requires authentication.
|
|
5
6
|
*
|
|
6
7
|
* While MSAL is initialising, shows a loading indicator. If the user
|
|
7
|
-
* is not authenticated, triggers a login redirect
|
|
8
|
-
* the children.
|
|
8
|
+
* is not authenticated, triggers a login redirect (once only per mount).
|
|
9
|
+
* Otherwise renders the children.
|
|
9
10
|
*
|
|
10
11
|
* Usage:
|
|
11
12
|
* <Route path="/projects" element={
|
|
@@ -16,11 +17,15 @@ import { useAuth } from "./useAuth";
|
|
|
16
17
|
*/
|
|
17
18
|
export function ProtectedRoute({ children, loadingComponent, }) {
|
|
18
19
|
const { isAuthenticated, isLoading, login } = useAuth();
|
|
20
|
+
const loginTriggered = useRef(false);
|
|
19
21
|
if (isLoading) {
|
|
20
22
|
return _jsx(_Fragment, { children: loadingComponent ?? _jsx("div", { children: "Loading..." }) });
|
|
21
23
|
}
|
|
22
24
|
if (!isAuthenticated) {
|
|
23
|
-
|
|
25
|
+
if (!loginTriggered.current) {
|
|
26
|
+
loginTriggered.current = true;
|
|
27
|
+
login();
|
|
28
|
+
}
|
|
24
29
|
return _jsx("div", { children: "Redirecting to login..." });
|
|
25
30
|
}
|
|
26
31
|
return _jsx(_Fragment, { children: children });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProtectedRoute.js","sourceRoot":"","sources":["../src/ProtectedRoute.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"ProtectedRoute.js","sourceRoot":"","sources":["../src/ProtectedRoute.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,gBAAgB,GACI;IACpB,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;IACxD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAErC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,4BAAG,gBAAgB,IAAI,uCAAqB,GAAI,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC5B,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,KAAK,EAAE,CAAC;QACV,CAAC;QACD,OAAO,oDAAkC,CAAC;IAC5C,CAAC;IAED,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC"}
|