web-otp-angular
Version:
Angular library to automatically detect OTP from mobile device (Both mobile web site and Desktop)
44 lines • 4.63 kB
JavaScript
import { Directive, Input } from '@angular/core';
import * as i0 from "@angular/core";
export class WebOtpDirective {
constructor(el) {
this.el = el;
this.ac = new AbortController();
this.timer = null;
}
;
ngOnInit() {
const options = {
otp: { transport: ['sms'] },
signal: this.ac.signal
};
navigator.credentials.get(options).then((otp) => {
this.el.nativeElement.value = otp.code;
}).catch(err => {
console.log(err);
});
if (this.timeout) {
this.timer = setTimeout(() => {
this.ac.abort();
}, this.timeout);
}
}
ngOnDestroy() {
this.ac.abort();
if (this.timer) {
clearTimeout(this.timer);
}
}
}
WebOtpDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: WebOtpDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
WebOtpDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: WebOtpDirective, selector: "[appWebOtp]", inputs: { timeout: "timeout" }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: WebOtpDirective, decorators: [{
type: Directive,
args: [{
selector: '[appWebOtp]',
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { timeout: [{
type: Input,
args: ['timeout']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLW90cC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItb3RwLWFuZ3VsYXIvc3JjL2xpYi93ZWItb3RwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7O0FBU2hGLE1BQU0sT0FBTyxlQUFlO0lBRzFCLFlBQW9CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBRjFCLE9BQUUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzNCLFVBQUssR0FBMEIsSUFBSSxDQUFDO0lBQ04sQ0FBQztJQUFBLENBQUM7SUFJeEMsUUFBUTtRQUNOLE1BQU0sT0FBTyxHQUE2QjtZQUN4QyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNO1NBQ3ZCLENBQUE7UUFDRCxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1NBQ2pCO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDOzs2R0E1QlUsZUFBZTtpR0FBZixlQUFlOzRGQUFmLGVBQWU7a0JBSDNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7aUJBQ3hCO2lHQU1tQixPQUFPO3NCQUF4QixLQUFLO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW50ZXJmYWNlIENyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7XG4gIG90cDogYW55O1xuICBzaWduYWw6IGFueTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FwcFdlYk90cF0nLFxufSlcbmV4cG9ydCBjbGFzcyBXZWJPdHBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHByaXZhdGUgdGltZXI6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHsgfTtcblxuICBASW5wdXQoJ3RpbWVvdXQnKSB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnM6IENyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIG90cDogeyB0cmFuc3BvcnQ6IFsnc21zJ10gfSxcbiAgICAgIHNpZ25hbDogdGhpcy5hYy5zaWduYWxcbiAgICB9XG4gICAgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmdldChvcHRpb25zKS50aGVuKChvdHA6IGFueSkgPT4ge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gb3RwLmNvZGU7XG4gICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgfSk7XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmFjLmFib3J0KCk7XG4gICAgICB9LCB0aGlzLnRpbWVvdXQpXG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuYWMuYWJvcnQoKTtcbiAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgIH1cbiAgfVxufVxuIl19