0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-03-10 22:22:45 -05:00
logto/packages/console/src/hooks/use-track-user-id.ts
Gao Sun 748878ce5b
feat(app-insights): add React context provider and hook
and fix AppInsights init issue for frontend projects.
2023-04-21 00:29:53 +08:00

45 lines
1.1 KiB
TypeScript

import { useAppInsights } from '@logto/app-insights/react';
import { useLogto } from '@logto/react';
import { trySafe } from '@silverhand/essentials';
import { useEffect } from 'react';
class NoIdTokenClaimsError extends Error {
name = 'NoIdTokenClaimsError';
message = 'Cloud not fetch ID Token claims where user is authenticated.';
}
const useTrackUserId = () => {
const { isAuthenticated, getIdTokenClaims } = useLogto();
const {
initialized,
appInsights: { instance },
} = useAppInsights();
useEffect(() => {
const setUserId = async () => {
if (!instance) {
return;
}
if (!isAuthenticated) {
instance.clearAuthenticatedUserContext();
return;
}
const claims = await trySafe(getIdTokenClaims());
if (claims) {
instance.setAuthenticatedUserContext(claims.sub, claims.sub, true);
} else {
instance.trackException({ exception: new NoIdTokenClaimsError() });
}
};
if (initialized) {
void setUserId();
}
}, [getIdTokenClaims, initialized, instance, isAuthenticated]);
};
export default useTrackUserId;