ekyc

Electronic KYC process with uploading ID document using OAuth 2.1 (experimental)
Log | Files | Refs | README | LICENSE

email_challenge.ts (1408B)


      1 import { Code } from "#core/domain/code.ts";
      2 import { CodeChallenge } from "#core/domain/code_challenge.ts";
      3 import {
      4   EMAIL_CHALLENGE_ATTEMPT_LIMIT,
      5   EMAIL_CHALLENGE_REQUEST_LIMIT,
      6   EMAIL_CHALLENGE_TTL,
      7 } from "#core/domain/constants.ts";
      8 import { Email } from "#core/domain/email.ts";
      9 import { Ephemeral } from "#core/domain/ephemeral.ts";
     10 import { DomainError } from "#core/domain/error.ts";
     11 import { Limiter } from "#core/domain/limiter.ts";
     12 
     13 export class EmailChallenge extends CodeChallenge {
     14   constructor(
     15     readonly address: Email,
     16     verified?: boolean,
     17     code?: Code,
     18     codeExpire?: number,
     19     request?: number,
     20     requestExpire?: number,
     21     attempt?: number,
     22     attemptExpire?: number,
     23   ) {
     24     super(
     25       EMAIL_CHALLENGE_TTL,
     26       EMAIL_CHALLENGE_REQUEST_LIMIT,
     27       EMAIL_CHALLENGE_ATTEMPT_LIMIT,
     28       verified,
     29       new Ephemeral(code, codeExpire),
     30       new Limiter(
     31         EMAIL_CHALLENGE_REQUEST_LIMIT,
     32         EMAIL_CHALLENGE_TTL,
     33         request,
     34         requestExpire,
     35       ),
     36       new Limiter(
     37         EMAIL_CHALLENGE_ATTEMPT_LIMIT,
     38         EMAIL_CHALLENGE_TTL,
     39         attempt,
     40         attemptExpire,
     41       ),
     42     );
     43   }
     44 
     45   public assertVerified() {
     46     if (!this.verified) {
     47       throw new UnverifiedEmail();
     48     }
     49   }
     50 }
     51 
     52 export class UnverifiedEmail extends DomainError {
     53   constructor(options?: ErrorOptions) {
     54     super("Unverified email", options);
     55   }
     56 }