@@ -10,6 +10,7 @@ import { RecoveryPhoneManager } from './recovery-phone.manager';
1010import {
1111 RecoveryNumberNotExistsError ,
1212 RecoveryNumberNotSupportedError ,
13+ RecoveryPhoneNotEnabled ,
1314} from './recovery-phone.errors' ;
1415import { MessageInstance } from 'twilio/lib/rest/api/v2010/account/message' ;
1516
@@ -31,7 +32,7 @@ export class RecoveryPhoneService {
3132 */
3233 public async available ( uid : string , region : string ) : Promise < boolean > {
3334 if ( ! this . config . enabled ) {
34- return false ;
35+ throw new RecoveryPhoneNotEnabled ( ) ;
3536 }
3637
3738 if ( ! this . config . allowedRegions ?. includes ( region ) ) {
@@ -55,6 +56,10 @@ export class RecoveryPhoneService {
5556 * @returns True if code was sent and stored
5657 */
5758 public async setupPhoneNumber ( uid : string , phoneNumber : string ) {
59+ if ( ! this . config . enabled ) {
60+ throw new RecoveryPhoneNotEnabled ( ) ;
61+ }
62+
5863 if ( this . config . sms && this . config . sms . validNumberPrefixes ) {
5964 const allowed = this . config . sms . validNumberPrefixes . some ( ( check ) => {
6065 return phoneNumber . startsWith ( check ) ;
@@ -92,6 +97,10 @@ export class RecoveryPhoneService {
9297 * @returns True if successful
9398 */
9499 public async confirmSetupCode ( uid : string , code : string ) {
100+ if ( ! this . config . enabled ) {
101+ throw new RecoveryPhoneNotEnabled ( ) ;
102+ }
103+
95104 const data = await this . recoveryPhoneManager . getUnconfirmed ( uid , code ) ;
96105
97106 // If there is no data, it means there's no record of this code being sent to the uid provided
@@ -121,7 +130,17 @@ export class RecoveryPhoneService {
121130 return true ;
122131 }
123132
133+ /**
134+ * Confirms a signin code.
135+ * @param uid An account id
136+ * @param code A otp code
137+ * @returns True if successful
138+ */
124139 public async confirmSigninCode ( uid : string , code : string ) {
140+ if ( ! this . config . enabled ) {
141+ throw new RecoveryPhoneNotEnabled ( ) ;
142+ }
143+
125144 const data = await this . recoveryPhoneManager . getUnconfirmed ( uid , code ) ;
126145
127146 // If there is no data, it means there's no record of this code being sent to the uid provided
@@ -145,8 +164,13 @@ export class RecoveryPhoneService {
145164 * phone number.
146165 *
147166 * @param uid An account id
167+ * @returns True if successful
148168 */
149169 public async removePhoneNumber ( uid : string ) {
170+ if ( ! this . config . enabled ) {
171+ throw new RecoveryPhoneNotEnabled ( ) ;
172+ }
173+
150174 return await this . recoveryPhoneManager . removePhoneNumber ( uid ) ;
151175 }
152176
@@ -166,6 +190,10 @@ export class RecoveryPhoneService {
166190 exists : boolean ;
167191 phoneNumber ?: string ;
168192 } > {
193+ if ( ! this . config . enabled ) {
194+ throw new RecoveryPhoneNotEnabled ( ) ;
195+ }
196+
169197 try {
170198 const { phoneNumber } =
171199 await this . recoveryPhoneManager . getConfirmedPhoneNumber ( uid ) ;
@@ -198,6 +226,10 @@ export class RecoveryPhoneService {
198226 * number. e.g. +15005551234 would be masked as +*******1234 if lastN was 4.
199227 */
200228 public maskPhoneNumber ( phoneNumber : string , lastN ?: number ) {
229+ if ( ! this . config . enabled ) {
230+ throw new RecoveryPhoneNotEnabled ( ) ;
231+ }
232+
201233 // The + notation can be confusing in a masked number. Don't count it
202234 // as a digit.
203235 let prefix = '' ;
@@ -228,6 +260,10 @@ export class RecoveryPhoneService {
228260 * @returns True if message didn't fail to send.
229261 */
230262 public async sendCode ( uid : string ) {
263+ if ( ! this . config . enabled ) {
264+ throw new RecoveryPhoneNotEnabled ( ) ;
265+ }
266+
231267 const { phoneNumber } =
232268 await this . recoveryPhoneManager . getConfirmedPhoneNumber ( uid ) ;
233269 const code = await this . otpCode . generateCode ( ) ;
0 commit comments