package heliumapi import ( "encoding/json" "fmt" "strings" "time" "github.com/helium-blockchain-exporter/heliumapi/activity" ) // query https://docs.helium.com/api/blockchain/accounts#account-for-address func GetAccountForAddress(account string) (*Account, error) { path := "/v1/accounts/" + account // query the api respBody, err := getHeliumApi(path, nil) if err != nil { return nil, err } // unmarshal the response respobject := AccountResp{} err = json.Unmarshal(respBody, &respobject) if err != nil { return nil, fmt.Errorf("failed to unmarshal response from %v: %v", path, err) } return &respobject.Data, nil } // query https://docs.helium.com/api/blockchain/accounts#activity-for-account func GetActivityForAccount(account string, filterTypes []string, minTime *time.Time, maxTime *time.Time) (*activity.Activities, error) { path := "/v1/accounts/" + account + "/activity" params := map[string]string{} if filterTypes != nil { params["min_time"] = strings.Join(filterTypes, ",") } if minTime != nil { params["min_time"] = minTime.UTC().Format(timeFormat) } if maxTime != nil { params["max_time"] = maxTime.UTC().Format(timeFormat) } // query the api resBodies, err := getHeliumApiWithCursor(path, ¶ms) if err != nil { return nil, err } // unmarshal the responses and merge them all together combinedResp := activity.ActivityResp{} for _, respBody := range resBodies { activityResp := activity.ActivityResp{} err = json.Unmarshal(respBody, &activityResp) if err != nil { return nil, fmt.Errorf("failed to unmarshal response from %v: %v", path, err) } combinedResp.Data = append(combinedResp.Data, activityResp.Data...) } return activity.NewActivities(combinedResp) } // query https://docs.helium.com/api/blockchain/accounts#activity-counts-for-account func GetActivityCountsForAccount(account string) (*ActivityCounts, error) { path := "/v1/accounts/" + account + "/activity/count" // query the api respBody, err := getHeliumApi(path, nil) if err != nil { return nil, err } // unmarshal the response respobject := ActivityCountsResp{} err = json.Unmarshal(respBody, &respobject) if err != nil { return nil, fmt.Errorf("failed to unmarshal response from %v: %v", path, err) } return &respobject.Data, nil } // query https://docs.helium.com/api/blockchain/accounts#reward-totals-for-an-account func GetRewardTotalsForAccount(account string, minTime *time.Time, maxTime *time.Time) (*RewardTotal, error) { path := "/v1/accounts/" + account + "/rewards/sum" params := map[string]string{} if minTime != nil { params["min_time"] = minTime.UTC().Format(timeFormat) } if maxTime != nil { params["max_time"] = maxTime.UTC().Format(timeFormat) } // query the api respBody, err := getHeliumApi(path, ¶ms) if err != nil { return nil, err } // unmarshal the response respobject := RewardTotalResp{} err = json.Unmarshal(respBody, &respobject) if err != nil { return nil, fmt.Errorf("failed to unmarshal response from %v: %v", path, err) } return &respobject.Data, nil } // query https://docs.helium.com/api/blockchain/accounts#hotspots-for-account func GetHotspotsForAccount(account string) ([]Hotspot, error) { path := "/v1/accounts/" + account + "/hotspots" // query the api respBody, err := getHeliumApi(path, nil) if err != nil { return nil, err } // unmarshal the response respobject := AccountHotspotsResp{} err = json.Unmarshal(respBody, &respobject) if err != nil { return nil, fmt.Errorf("failed to unmarshal response from %v: %v", path, err) } return respobject.Data, nil }