UNPKG

react-usehooks-ts

Version:

A collections of typescript supported react Custom hooks

79 lines (78 loc) 3.4 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.useAutoReadOtp = void 0; const react_1 = require("react"); const useAutoReadOtp = ({ startOtpDetection = false, timeoutInMin = 5, }) => { const [isOtpDetecting, setIsOtpDetecting] = (0, react_1.useState)(true); const [detectedOTP, setDetectedOTP] = (0, react_1.useState)(null); const [otpDetectError, setOtpDetectError] = (0, react_1.useState)(""); let timeId = null; let signalId = null; const autoReadSMS = () => { signalId = new AbortController(); timeId = setTimeout(() => { signalId.abort(); setIsOtpDetecting(false); }, 1000 * 60 * timeoutInMin); function main() { return __awaiter(this, void 0, void 0, function* () { if ("OTPCredential" in window) { try { if (navigator.credentials && "OTPCredential" in window) { try { const content = yield navigator.credentials.get({ abort: signalId, otp: { transport: ["sms"] }, }); if (content && content.code) { setDetectedOTP(content.code); } } catch (e) { setOtpDetectError("Error detecting OTP"); console.error(e); } } else { setOtpDetectError("Auto-detect OTP is not available in Desktop browsers"); setIsOtpDetecting(false); } } catch (err) { setOtpDetectError("Error detecting OTP"); console.error(err); } } else { setOtpDetectError("Auto-detect OTP is not available in Desktop browsers"); setIsOtpDetecting(false); } }); } main(); }; (0, react_1.useEffect)(() => { if (startOtpDetection) { autoReadSMS(); } return () => { if (signalId) { signalId.abort(); } if (timeId) { clearTimeout(timeId); } }; }, [startOtpDetection]); return [detectedOTP, isOtpDetecting, otpDetectError]; }; exports.useAutoReadOtp = useAutoReadOtp;