# All files / src/profiles profile.ts

92.86% Statements 13/14
33.33% Branches 1/3
85.71% Functions 6/7
92.86% Lines 13/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    1x

    1x
    1x
    1x

    1x

    5x

    2x

    2x

    1x
    1x

    1x
    1x

    1x

     // @ts-ignore: Could not find a declaration file for module
    import * as inspector from 'schema-inspector'

    import { signProfileToken, extractProfile } from './profileTokens'
    import { validateProofs } from './profileProofs'
    import { makeProfileZoneFile } from './profileZoneFiles'

    const schemaDefinition: {[key: string]: any} = {
      type: 'object',
      properties: {
        '@context': { type: 'string', optional: true },
        '@type': { type: 'string' }
      }
    }

    /**
     * Represents a user profile
     *
     */
    export class Profile {
      _profile: {[key: string]: any}

      constructor(profile = {}) {
        this._profile = Object.assign({}, {
          '@context': 'http://schema.org/'
        }, profile)
      }

      toJSON() {
        return Object.assign({}, this._profile)
      }

      toToken(privateKey: string) {
        return signProfileToken(this.toJSON(), privateKey)
      }

      static validateSchema(profile: any, strict = false) {
        schemaDefinition.strict = strict
        return inspector.validate(schemaDefinition, profile)
      }

      static fromToken(token: string, publicKeyOrAddress: string | null = null) {
        const profile = extractProfile(token, publicKeyOrAddress)
        return new Profile(profile)
      }

      static makeZoneFile(domainName: string, tokenFileURL: string) {
        return makeProfileZoneFile(domainName, tokenFileURL)
      }

      static validateProofs(domainName: string) {
        return validateProofs(new Profile().toJSON(), domainName)
      }
    }