@@ -13,8 +13,8 @@ interface Otpauth {
1313 secret : string ;
1414 algorithm : HashAlgorithms ;
1515 digits : number ;
16- period : number ;
17- counter : number ;
16+ period ? : number ;
17+ counter ? : number ;
1818}
1919
2020const matchAlgorithm = ( algorithm : string ) : HashAlgorithms => {
@@ -40,9 +40,9 @@ const parseOtpauth = (uri: string): Otpauth => {
4040 issuer : searchParams . get ( 'issuer' ) ?? '' ,
4141 secret : searchParams . get ( 'secret' ) ?? '' ,
4242 algorithm : matchAlgorithm ( searchParams . get ( 'algorithm' ) ?? 'SHA1' ) ,
43- digits : Number ( searchParams . get ( 'digits' ) ?? 0 ) ,
44- period : Number ( searchParams . get ( 'period' ) ?? 0 ) ,
45- counter : Number ( searchParams . get ( 'counter' ) ?? 0 ) ,
43+ digits : Number ( searchParams . get ( 'digits' ) ?? 6 ) ,
44+ period : Number ( searchParams . get ( 'period' ) ) ,
45+ counter : Number ( searchParams . get ( 'counter' ) ) ,
4646 } ;
4747} ;
4848
@@ -66,6 +66,9 @@ export const generateOtpFromUri = (uri: string): GenerateOtpOutput => {
6666 } ;
6767 return { token : authenticator . generate ( otpauth . secret ) , remainingTime : authenticator . timeRemaining ( ) } ;
6868 case 'hotp' :
69+ if ( otpauth . counter === undefined ) {
70+ throw new Error ( 'Counter is required for HOTP' ) ;
71+ }
6972 hotp . options = { algorithm : otpauth . algorithm , digits : otpauth . digits } ;
7073 return { token : hotp . generate ( otpauth . secret , otpauth . counter ) , remainingTime : null } ;
7174 default :
0 commit comments