code: func (t *Token) Extra(key string) interface{} {
  	if raw, ok := t.raw.(map[string]interface{}); ok {
  		return raw[key]
  	}
  
  	vals, ok := t.raw.(url.Values)
  	if !ok {
  		return nil
  	}
  
  	v := vals.Get(key)
  	switch s := strings.TrimSpace(v); strings.Count(s, ".") {
  	case 0: // Contains no "."; try to parse as int
  		if i, err := strconv.ParseInt(s, 10, 64); err == nil {
  			return i
  		}
  	case 1: // Contains a single "."; try to parse as float
  		if f, err := strconv.ParseFloat(s, 64); err == nil {
  			return f
  		}
  	}
  
  	return v
  }
docs: // Extra returns an extra field.
  // Extra fields are key-value pairs returned by the server as a
  // part of the token retrieval response.