UNPKG

whodis-react

Version:

React hooks and components for secure, best practices authentication in seconds

42 lines 2.56 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useAuthableTokenClaims = void 0; const react_1 = require("react"); const getUniOnScreenFocusEventStream_1 = require("../../utils/rheuse/getUniOnScreenFocusEventStream"); const getAuthableTokenClaims_1 = require("./getAuthableTokenClaims"); const useAuthableTokenClaims = ({ storage, }) => { // initialize the state const [claims, setClaims] = (0, react_1.useState)(undefined); // undefined until we check storage // define a consumer that updates the state based on the authableTokenUpdatedEventStream const consumer = () => __awaiter(void 0, void 0, void 0, function* () { setClaims(yield (0, getAuthableTokenClaims_1.getAuthableTokenClaims)({ storage })); }); // subscribe to that event stream (in useEffect, so that its only done once) (0, react_1.useEffect)(() => { // kick off checking storage for claims void consumer(); // subscribe the auth token updated events, so we have the latest state of the token at all time storage.on.set.subscribe({ consumer }); // subscribe on mount // subscribe to window focus events, so we recheck whenever window regains focus const onScreenFocusEventStream = (0, getUniOnScreenFocusEventStream_1.getUniOnScreenFocusEventStream)(); onScreenFocusEventStream.subscribe({ consumer }); // and ensure that we unsubscribe on unmount to cleanup after ourselves return () => { storage.on.set.unsubscribe({ consumer }); // unsubscribe on unmount onScreenFocusEventStream.unsubscribe({ consumer }); }; }, []); // [] -> never rerun this - only run on mount // and expose the claims return { claims }; }; exports.useAuthableTokenClaims = useAuthableTokenClaims; //# sourceMappingURL=useAuthableTokenClaims.js.map