@@ -3,18 +3,19 @@ import { test } from 'node:test'
33import base32Encode from 'base32-encode'
44import { generateTOTP , getTOTPAuthUri , verifyTOTP } from './index.js'
55
6- test ( 'OTP can be generated and verified' , ( ) => {
7- const { secret, otp, algorithm, period, digits } = generateTOTP ( )
8- assert . strictEqual ( algorithm , 'SHA1' )
6+ test ( 'OTP can be generated and verified' , async ( ) => {
7+ const { secret, otp, algorithm, period, digits } = await generateTOTP ( )
8+
9+ assert . strictEqual ( algorithm , 'SHA-1' )
910 assert . strictEqual ( period , 30 )
1011 assert . strictEqual ( digits , 6 )
11- const result = verifyTOTP ( { otp, secret } )
12+ const result = await verifyTOTP ( { otp, secret } )
1213 assert . deepStrictEqual ( result , { delta : 0 } )
1314} )
1415
15- test ( 'options can be customized' , ( ) => {
16+ test ( 'options can be customized' , async ( ) => {
1617 const options = {
17- algorithm : 'SHA256 ' ,
18+ algorithm : 'SHA-256 ' ,
1819 period : 60 ,
1920 digits : 8 ,
2021 secret : base32Encode (
@@ -23,86 +24,86 @@ test('options can be customized', () => {
2324 ) . toString ( ) ,
2425 charSet : 'abcdef' ,
2526 }
26- const { otp, ...config } = generateTOTP ( options )
27+ const { otp, ...config } = await generateTOTP ( options )
2728 assert . deepStrictEqual ( config , options )
28- const result = verifyTOTP ( { otp, ...config } )
29+ const result = await verifyTOTP ( { otp, ...config } )
2930 assert . deepStrictEqual ( result , { delta : 0 } )
3031} )
3132
32- test ( 'Verify TOTP within the specified time window' , ( ) => {
33- const { otp, secret } = generateTOTP ( )
34- const result = verifyTOTP ( { otp, secret, window : 0 } )
33+ test ( 'Verify TOTP within the specified time window' , async ( ) => {
34+ const { otp, secret } = await generateTOTP ( )
35+ const result = await verifyTOTP ( { otp, secret, window : 0 } )
3536 assert . notStrictEqual ( result , null )
3637} )
3738
38- test ( 'Fail to verify an invalid TOTP' , ( ) => {
39+ test ( 'Fail to verify an invalid TOTP' , async ( ) => {
3940 const secret = Math . random ( ) . toString ( )
4041 const tooShortNumber = Math . random ( ) . toString ( ) . slice ( 2 , 7 )
41- const result = verifyTOTP ( { otp : tooShortNumber , secret } )
42+ const result = await verifyTOTP ( { otp : tooShortNumber , secret } )
4243 assert . strictEqual ( result , null )
4344} )
4445
4546test ( 'Fail to verify TOTP outside the specified time window' , async ( ) => {
46- const { otp, secret : key } = generateTOTP ( { period : 0.0001 } )
47+ const { otp, secret : key } = await generateTOTP ( { period : 0.0001 } )
4748 await new Promise ( ( resolve ) => setTimeout ( resolve , 1 ) )
48- const result = verifyTOTP ( { otp, secret : key } )
49+ const result = await verifyTOTP ( { otp, secret : key } )
4950 assert . strictEqual ( result , null )
5051} )
5152
5253test ( 'Clock drift is handled by window' , async ( ) => {
5354 // super small period
54- const { otp, secret : key , period } = generateTOTP ( { period : 0.0001 } )
55+ const { otp, secret : key , period } = await generateTOTP ( { period : 0.0001 } )
5556 // waiting a tiny bit
5657 await new Promise ( ( resolve ) => setTimeout ( resolve , 1 ) )
5758 // super big window (to accomodate slow machines running this test)
58- const result = verifyTOTP ( { otp, secret : key , window : 200 , period } )
59+ const result = await verifyTOTP ( { otp, secret : key , window : 200 , period } )
5960 // should still validate
6061 assert . notDeepStrictEqual ( result , null )
6162} )
6263
63- test ( 'Setting a different period config for generating and verifying will fail' , ( ) => {
64+ test ( 'Setting a different period config for generating and verifying will fail' , async ( ) => {
6465 const desiredPeriod = 60
65- const { otp, secret, period } = generateTOTP ( {
66+ const { otp, secret, period } = await generateTOTP ( {
6667 period : desiredPeriod ,
6768 } )
6869 assert . strictEqual ( period , desiredPeriod )
69- const result = verifyTOTP ( { otp, secret, period : period + 1 } )
70+ const result = await verifyTOTP ( { otp, secret, period : period + 1 } )
7071 assert . strictEqual ( result , null )
7172} )
7273
73- test ( 'Setting a different algo config for generating and verifying will fail' , ( ) => {
74- const desiredAlgo = 'SHA512 '
75- const { otp, secret, algorithm } = generateTOTP ( {
74+ test ( 'Setting a different algo config for generating and verifying will fail' , async ( ) => {
75+ const desiredAlgo = 'SHA-512 '
76+ const { otp, secret, algorithm } = await generateTOTP ( {
7677 algorithm : desiredAlgo ,
7778 } )
7879 assert . strictEqual ( algorithm , desiredAlgo )
79- const result = verifyTOTP ( { otp, secret, algorithm : 'SHA1 ' } )
80+ const result = await verifyTOTP ( { otp, secret, algorithm : 'SHA-1 ' } )
8081 assert . strictEqual ( result , null )
8182} )
8283
83- test ( 'Generating and verifying also works with the algorithm name alias' , ( ) => {
84- const desiredAlgo = 'SHA1 '
85- const { otp, secret, algorithm } = generateTOTP ( {
84+ test ( 'Generating and verifying also works with the algorithm name alias' , async ( ) => {
85+ const desiredAlgo = 'SHA-1 '
86+ const { otp, secret, algorithm } = await generateTOTP ( {
8687 algorithm : desiredAlgo ,
8788 } )
8889 assert . strictEqual ( algorithm , desiredAlgo )
8990
90- const result = verifyTOTP ( { otp, secret, algorithm : 'sha1 ' } )
91+ const result = await verifyTOTP ( { otp, secret, algorithm : 'sha-1 ' } )
9192 assert . notStrictEqual ( result , null )
9293} )
9394
94- test ( 'Charset defaults to numbers' , ( ) => {
95- const { otp } = generateTOTP ( )
95+ test ( 'Charset defaults to numbers' , async ( ) => {
96+ const { otp } = await generateTOTP ( )
9697 assert . match ( otp , / ^ [ 0 - 9 ] + $ / )
9798} )
9899
99- test ( 'Charset can be customized' , ( ) => {
100- const { otp } = generateTOTP ( { charSet : 'abcdef' } )
100+ test ( 'Charset can be customized' , async ( ) => {
101+ const { otp } = await generateTOTP ( { charSet : 'abcdef' } )
101102 assert . match ( otp , / ^ [ a b c d e f ] + $ / )
102103} )
103104
104- test ( 'OTP Auth URI can be generated' , ( ) => {
105- const { otp : _otp , secret, ...totpConfig } = generateTOTP ( )
105+ test ( 'OTP Auth URI can be generated' , async ( ) => {
106+ const { otp : _otp , secret, ...totpConfig } = await generateTOTP ( )
106107 const issuer = Math . random ( ) . toString ( 16 ) . slice ( 2 )
107108 const accountName = Math . random ( ) . toString ( 16 ) . slice ( 2 )
108109 const uri = getTOTPAuthUri ( {
0 commit comments