Files
nofx/store/visibility.go
2026-04-28 11:58:58 +08:00

97 lines
2.8 KiB
Go

package store
import "strings"
func MissingRequiredExchangeCredentialFields(exchangeType, apiKey, secretKey, passphrase, hyperliquidWalletAddr, asterUser, asterSigner, asterPrivateKey, lighterWalletAddr, lighterAPIKeyPrivateKey string) []string {
switch strings.ToLower(strings.TrimSpace(exchangeType)) {
case "binance", "bybit", "gate", "indodax":
return missingNamedFields(
namedField{"api_key", apiKey},
namedField{"secret_key", secretKey},
)
case "okx", "bitget", "kucoin":
return missingNamedFields(
namedField{"api_key", apiKey},
namedField{"secret_key", secretKey},
namedField{"passphrase", passphrase},
)
case "hyperliquid":
return missingNamedFields(
namedField{"api_key", apiKey},
namedField{"hyperliquid_wallet_addr", hyperliquidWalletAddr},
)
case "aster":
return missingNamedFields(
namedField{"aster_user", asterUser},
namedField{"aster_signer", asterSigner},
namedField{"aster_private_key", asterPrivateKey},
)
case "lighter":
return missingNamedFields(
namedField{"lighter_wallet_addr", lighterWalletAddr},
namedField{"lighter_api_key_private_key", lighterAPIKeyPrivateKey},
)
default:
return []string{"exchange_type"}
}
}
type namedField struct {
name string
value string
}
func missingNamedFields(fields ...namedField) []string {
missing := make([]string, 0, len(fields))
for _, field := range fields {
if strings.TrimSpace(field.value) == "" {
missing = append(missing, field.name)
}
}
return missing
}
func IsVisibleAIModel(model *AIModel) bool {
if model == nil {
return false
}
return model.Enabled ||
strings.TrimSpace(string(model.APIKey)) != "" ||
strings.TrimSpace(model.CustomAPIURL) != "" ||
strings.TrimSpace(model.CustomModelName) != ""
}
func IsVisibleExchange(exchange *Exchange) bool {
if exchange == nil {
return false
}
return exchange.Enabled ||
strings.TrimSpace(string(exchange.APIKey)) != "" ||
strings.TrimSpace(string(exchange.SecretKey)) != "" ||
strings.TrimSpace(string(exchange.Passphrase)) != "" ||
strings.TrimSpace(exchange.HyperliquidWalletAddr) != "" ||
strings.TrimSpace(exchange.AsterUser) != "" ||
strings.TrimSpace(exchange.AsterSigner) != "" ||
strings.TrimSpace(string(exchange.AsterPrivateKey)) != "" ||
strings.TrimSpace(exchange.LighterWalletAddr) != "" ||
strings.TrimSpace(string(exchange.LighterPrivateKey)) != "" ||
strings.TrimSpace(string(exchange.LighterAPIKeyPrivateKey)) != "" ||
exchange.LighterAPIKeyIndex != 0
}
func IsVisibleTrader(trader *Trader) bool {
if trader == nil {
return false
}
return strings.TrimSpace(trader.Name) != "" &&
strings.TrimSpace(trader.AIModelID) != "" &&
strings.TrimSpace(trader.ExchangeID) != ""
}
func IsVisibleStrategy(strategy *Strategy) bool {
if strategy == nil {
return false
}
return strings.TrimSpace(strategy.Name) != ""
}