github.com/diadata-org/diadata@v1.4.593/pkg/dia/helpers/velarhelper/client.go (about) 1 package velarhelper 2 3 import ( 4 "crypto/tls" 5 "encoding/json" 6 "fmt" 7 "io" 8 "net/http" 9 "net/http/httputil" 10 "time" 11 12 "github.com/sirupsen/logrus" 13 ) 14 15 const ( 16 DeployerAddress = "SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1" 17 DeployerAddressV2 = "SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY" 18 VelarCoreAddress = DeployerAddress + ".univ2-core" 19 VelarURL = "https://api.velar.co" 20 ) 21 22 type VelarClient struct { 23 debug bool 24 httpClient *http.Client 25 logger *logrus.Entry 26 } 27 28 func NewVelarClient(logger *logrus.Entry, isDebug bool) *VelarClient { 29 tr := &http.Transport{ 30 TLSClientConfig: &tls.Config{ 31 MinVersion: tls.VersionTLS12, 32 MaxVersion: 0, 33 }, 34 } 35 httpClient := &http.Client{ 36 Transport: tr, 37 Timeout: 10 * time.Second, 38 } 39 40 return &VelarClient{ 41 debug: isDebug, 42 httpClient: httpClient, 43 logger: logger, 44 } 45 } 46 47 func (c *VelarClient) GetAllTokens() ([]TokenMetadata, error) { 48 req, err := http.NewRequest(http.MethodGet, VelarURL+"/tokens", http.NoBody) 49 if err != nil { 50 return nil, err 51 } 52 53 var tokens []TokenMetadata 54 err = c.callVelarAPI(req, &tokens) 55 if err != nil { 56 return nil, err 57 } 58 return tokens, nil 59 } 60 61 func (c *VelarClient) GetAllTickers() ([]Ticker, error) { 62 req, err := http.NewRequest(http.MethodGet, VelarURL+"/tickers", http.NoBody) 63 if err != nil { 64 return nil, err 65 } 66 67 var tickers []Ticker 68 err = c.callVelarAPI(req, &tickers) 69 if err != nil { 70 return nil, err 71 } 72 return tickers, nil 73 } 74 75 func (c *VelarClient) callVelarAPI(request *http.Request, target interface{}) error { 76 if c.debug { 77 dump, err := httputil.DumpRequestOut(request, true) 78 if err != nil { 79 c.logger.WithError(err).Error("failed to dump request out") 80 return err 81 } 82 c.logger.Infof("\n%s", string(dump)) 83 } 84 85 resp, err := c.httpClient.Do(request) 86 if err != nil { 87 return err 88 } 89 defer resp.Body.Close() 90 91 if c.debug { 92 dump, err := httputil.DumpResponse(resp, true) 93 if err != nil { 94 c.logger.WithError(err).Error("failed to dump response") 95 return err 96 } 97 c.logger.Infof("\n%s\n", string(dump)) 98 } 99 100 if resp.StatusCode != http.StatusOK { 101 err = fmt.Errorf("failed to call Velar API, status code: %d", resp.StatusCode) 102 c.logger.Error(err.Error()) 103 return err 104 } 105 106 data, err := io.ReadAll(resp.Body) 107 if err != nil { 108 c.logger.WithError(err).Error("failed to read response body") 109 return err 110 } 111 112 err = json.Unmarshal(data, &target) 113 if err != nil { 114 c.logger.Error("failed to decode response body") 115 return err 116 } 117 return nil 118 }