You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.8 KiB
71 lines
1.8 KiB
package keybase |
|
|
|
import ( |
|
"encoding/json" |
|
"os/exec" |
|
) |
|
|
|
// ---- Struct for sending to API |
|
type walletOut struct { |
|
Method string `json:"method"` |
|
} |
|
|
|
// ---- |
|
|
|
// ---- Struct for data received after sending to API |
|
type walletOutResult struct { |
|
Result []WalletResult `json:"result"` |
|
} |
|
type asset struct { |
|
Type string `json:"type"` |
|
Code string `json:"code"` |
|
Issuer string `json:"issuer"` |
|
VerifiedDomain string `json:"verifiedDomain"` |
|
IssuerName string `json:"issuerName"` |
|
Desc string `json:"desc"` |
|
InfoURL string `json:"infoUrl"` |
|
} |
|
type balance struct { |
|
Asset asset `json:"asset"` |
|
Amount string `json:"amount"` |
|
Limit string `json:"limit"` |
|
} |
|
type exchangeRate struct { |
|
Currency string `json:"currency"` |
|
Rate string `json:"rate"` |
|
} |
|
type WalletResult struct { |
|
AccountID string `json:"accountID"` |
|
IsPrimary bool `json:"isPrimary"` |
|
Name string `json:"name"` |
|
Balance []balance `json:"balance"` |
|
ExchangeRate exchangeRate `json:"exchangeRate"` |
|
AccountMode int `json:"accountMode"` |
|
} |
|
|
|
// ---- |
|
|
|
// walletAPIOut() sends JSON requests to the wallet API and returns its response. |
|
func walletAPIOut(keybasePath string, w walletOut) (walletOutResult, error) { |
|
jsonBytes, _ := json.Marshal(w) |
|
|
|
cmd := exec.Command(keybasePath, "wallet", "api", "-m", string(jsonBytes)) |
|
cmdOut, err := cmd.Output() |
|
if err != nil { |
|
return walletOutResult{}, err |
|
} |
|
|
|
var r walletOutResult |
|
json.Unmarshal(cmdOut, &r) |
|
|
|
return r, nil |
|
} |
|
|
|
// Balances() returns a list of all wallets on the current user's account, including their current balance. |
|
func (k Keybase) Balances() ([]WalletResult, error) { |
|
m := walletOut{} |
|
m.Method = "balances" |
|
|
|
r, err := walletAPIOut(k.Path, m) |
|
return r.Result, err |
|
}
|
|
|