All files / src/profiles profile.js

90% Statements 9/10
33.33% Branches 1/3
85.71% Functions 6/7
90% Lines 9/10

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            1x                   5x           2x       2x       1x 1x       1x 1x       1x              
import inspector from 'schema-inspector'
 
import { signProfileToken, extractProfile } from './profileTokens'
import { validateProofs } from './profileProofs'
import { makeProfileZoneFile } from './profileZoneFiles'
 
const schemaDefinition = {
  type: 'object',
  properties: {
    '@context': { type: 'string', optional: true },
    '@type': { type: 'string' }
  }
}
 
export class Profile {
  constructor(profile = {}) {
    this._profile = Object.assign({}, {
      '@context': 'http://schema.org/'
    }, profile)
  }
 
  toJSON() {
    return Object.assign({}, this._profile)
  }
 
  toToken(privateKey) {
    return signProfileToken(this.toJSON(), privateKey)
  }
 
  static validateSchema(profile, strict = false) {
    schemaDefinition.strict = strict
    return inspector.validate(schemaDefinition, profile)
  }
 
  static fromToken(token, publicKeyOrAddress = null) {
    const profile = extractProfile(token, publicKeyOrAddress)
    return new Profile(profile)
  }
 
  static makeZoneFile(domainName, tokenFileURL) {
    return makeProfileZoneFile(domainName, tokenFileURL)
  }
 
  static validateProofs(domainName) {
    return validateProofs(this.toJSON(), domainName)
  }
}