trusona/trusona-server-sdk-js

View on GitHub
src/resources/dto/Trusonafication.js

Summary

Maintainability
A
0 mins
Test Coverage
A
92%
class Trusonafication {

  constructor(trusonaficationBuilder) {
    this.desired_level = trusonaficationBuilder.desired_level
    this.device_identifier = trusonaficationBuilder.device_identifier
    this.trucode_id = trusonaficationBuilder.trucode_id
    this.trusona_id = trusonaficationBuilder.trusona_id
    this.user_identifier = trusonaficationBuilder.user_identifier
    this.action = trusonaficationBuilder.action
    this.resource = trusonaficationBuilder.resource
    this.expires_at = trusonaficationBuilder.expires_at
    this.user_presence = trusonaficationBuilder.user_presence
    this.prompt = trusonaficationBuilder.prompt
    this.show_identity_document = trusonaficationBuilder.show_identity_document
    this.email = trusonaficationBuilder.email
    this.custom_fields = trusonaficationBuilder.custom_fields
    this.callback_url = trusonaficationBuilder.callback_url
  }

  static get essential() {
    return new EssentialBuilder()
  }

  static get executive() {
    return new ExecutiveBuilder()
  }
}

class TrusonaficationBuilder {

  constructor(desired_level) {
    this.desired_level = desired_level
    this.prompt = true
    this.user_presence = true
    this.show_identity_document = false
    this.custom_fields = {}
  }

  deviceIdentifier(device_identifier) {
    this.device_identifier = device_identifier
    return this
  }

  truCode(trucode_id) {
    this.trucode_id = trucode_id
    return this
  }

  trusonaId(trusona_id) {
    this.trusona_id = trusona_id
    return this
  }

  userIdentifier(user_identifier) {
    this.user_identifier = user_identifier
    return this
  }

  action(action) {
    this.action = action
    return this
  }

  resource(resource) {
    this.resource = resource
    return this
  }

  expiresAt(expires_at) {
    this.expires_at = expires_at
    return this
  }

  withoutPrompt() {
    this.prompt = false
    return this
  }

  withoutUserPresence() {
    this.user_presence = false
    return this
  }

  emailAddress(email){
    this.email = email
    return this
  }

  customField(name, value){
    this.custom_fields[name] = value
    return this
  }

  callbackUrl(url) {
    this.callback_url = url
    return this
  }

  build() {
    return new Trusonafication(this)
  }
}

class EssentialBuilder extends TrusonaficationBuilder {

  constructor() {
    super(2)
  }

  withoutUserPresence() {
    super.withoutUserPresence()
    this.desired_level = 1
    return this
  }
}

class ExecutiveBuilder extends TrusonaficationBuilder {
  constructor() {
    super(3)
    this.show_identity_document = true
  }
}

module.exports = Trusonafication