whodis-react
Version:
React hooks and components for secure, best practices authentication in seconds
42 lines • 2.56 kB
JavaScript
;
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