package swqos import ( "context" "fmt" "github.com/samlior/libsam/pkg/enum" "github.com/samlior/libsam/pkg/swqos/clients" ) func NewSWQoSClient(ctx context.Context, agent string, config *SWQoSClientConfig) (SWQoSClient, error) { var err error var client SWQoSClient switch agent { case enum.SWQoSAgentBlockRazor: client, err = clients.NewBlockRazorClient(ctx, config.SendTxUrl) case enum.SWQoSAgentNextBlock: client = clients.NewNextBlockHttpClient(config.SendTxUrl) case enum.SWQoSAgentNode1: client = clients.NewNode1Client(config.SendTxUrl) case enum.SWQoSAgentFlashBlock: client = clients.NewFlashBlockClient(config.SendTxUrl, config.SendBundleUrl) case enum.SWQoSAgentAstralane: client = clients.NewAstralaneClient(config.SendTxUrl) case enum.SWQoSAgentBlocxRoute: client = clients.NewBloxrouteClient(config.SendTxUrl) case enum.SWQoSAgent0slot, enum.SWQoSAgentJito, enum.SWQoSAgentHelius, enum.SWQoSAgentNozomi, enum.SWQoSAgentStellium: client = clients.NewHttpClient(config.SendTxUrl, config.SendBundleUrl) default: return nil, fmt.Errorf("invalid agent: %s", agent) } if err != nil { return nil, err } if config.KeepAliveUrl != "" { go DoKeepAlive(ctx, config.KeepAliveUrl) } return client, err }