docs: function Parse ( token ) {
    if ( typeof token != 'string' )
        throw new Error('JWT must be a string object')
  
    var parts = token.split('.')
  
    if (!parts.every(b64url.valid))
        throw new Error('JWT contains invalid URL safe Base64 chars')
    try {
      this.header = JSON.parse( b64url.decode( parts[0] ) )
    }
    catch (e) {
        return e
    }
    if (!this.header.typ)
        throw new Error('No "typ" in JWT header')
  
    if (this.header.typ == 'JWS') {
      try {
        this.payload = JSON.parse( b64url.decode( parts[1] ) )
      }
      catch (e) {
          return e
      }
      this._input = parts[0] +'.'+ parts[1]
      this.signature = parts[2]
      return this
  
    } else if (this.header.typ == 'JWE') {
      if (parts.length != 5)
        throw new Error('Invalid JWE token, does not have 5 components')
      this._input = parts[0] +'.'+ parts[1] +'.'+ parts[2] +'.'+ parts[3]
      this._cmk = parts[1]
      this._iv = parts[2]
      this._ciphertext = parts[3]
      this.signature = parts[4]
      return this
  
    } else
      throw new Error('Uknownn JWT header "typ":"'+this.header.typ+'"')
  }