diff --git a/config/config.go b/config/config.go index 562e74b5..811514dc 100644 --- a/config/config.go +++ b/config/config.go @@ -73,6 +73,7 @@ type ( UseMapiFeeQuotes bool `json:"use_mapi_fee_quotes" mapstructure:"use_mapi_fee_quotes"` MinercraftAPI string `json:"minercraft_api" mapstructure:"minercraft_api"` MinercraftCustomAPIs []*minercraft.MinerAPIs `json:"minercraft_custom_apis" mapstructure:"minercraft_custom_apis"` + BroadcastClientAPIs []string `json:"broadcast_client_apis" mapstructure:"broadcast_client_apis"` } // AuthenticationConfig is the configuration for Authentication diff --git a/config/envs/development.json b/config/envs/development.json index 5cec022f..15c4bef7 100644 --- a/config/envs/development.json +++ b/config/envs/development.json @@ -105,5 +105,8 @@ "engine": "taskq", "factory": "memory", "queue_name": "development_queue" - } + }, + "broadcast_client_apis": [ + "url|token" + ] } diff --git a/config/envs/docker-compose.json b/config/envs/docker-compose.json index 5e2552fa..8b74c1d3 100644 --- a/config/envs/docker-compose.json +++ b/config/envs/docker-compose.json @@ -96,5 +96,8 @@ "engine": "taskq", "factory": "memory", "queue_name": "development_queue" - } + }, + "broadcast_client_apis": [ + "url|token" + ] } diff --git a/config/envs/production.json b/config/envs/production.json index 299fe667..9dacb404 100644 --- a/config/envs/production.json +++ b/config/envs/production.json @@ -97,5 +97,8 @@ "engine": "taskq", "factory": "memory", "queue_name": "production_queue" - } + }, + "broadcast_client_apis": [ + "url|token" + ] } diff --git a/config/envs/staging.json b/config/envs/staging.json index d4fadbb2..b696e3e1 100644 --- a/config/envs/staging.json +++ b/config/envs/staging.json @@ -97,5 +97,8 @@ "engine": "taskq", "factory": "memory", "queue_name": "staging_queue" - } + }, + "broadcast_client_apis": [ + "url|token" + ] } diff --git a/config/envs/test.json b/config/envs/test.json index 5870d6f7..d26c298f 100644 --- a/config/envs/test.json +++ b/config/envs/test.json @@ -96,5 +96,8 @@ "engine": "taskq", "factory": "memory", "queue_name": "test_queue" - } + }, + "broadcast_client_apis": [ + "url|token" + ] } diff --git a/config/services.go b/config/services.go index 524e31b9..b0a72b58 100644 --- a/config/services.go +++ b/config/services.go @@ -14,6 +14,7 @@ import ( "github.com/BuxOrg/bux/cluster" "github.com/BuxOrg/bux/taskmanager" "github.com/BuxOrg/bux/utils" + broadcast_client "github.com/bitcoin-sv/go-broadcast-client/broadcast/broadcast-client" "github.com/go-redis/redis/v8" "github.com/mrz1836/go-cachestore" "github.com/mrz1836/go-datastore" @@ -302,6 +303,19 @@ func (s *AppServices) loadBux(ctx context.Context, appConfig *AppConfig, testMod options = append(options, bux.WithMinercraftAPIs(appConfig.MinercraftCustomAPIs)) } + if appConfig.BroadcastClientAPIs != nil { + arcClientConfigs := splitBroadcastClientApis(appConfig.BroadcastClientAPIs) + fmt.Println("arcClientConfigs", arcClientConfigs) + options = append(options, bux.WithBroadcastClientAPIs(arcClientConfigs)) + + builder := broadcast_client.Builder() + for _, cfg := range arcClientConfigs { + builder.WithArc(cfg) + } + broadcastClient := builder.Build() + options = append(options, bux.WithBroadcastClient(broadcastClient)) + } + // Create the new client s.Bux, err = bux.NewClient(ctx, options...) @@ -373,3 +387,25 @@ func loadDatastore(options []bux.ClientOps, appConfig *AppConfig) ([]bux.ClientO return options, nil } + +// splitBroadcastClientApis splits the broadcast client apis into a list of broadcast_client.ArcClientConfig +func splitBroadcastClientApis(apis []string) []broadcast_client.ArcClientConfig { + var arcClients []broadcast_client.ArcClientConfig + for _, api := range apis { + separatorIndex := strings.Index(api, "|") + if separatorIndex != -1 { + apiURL := api[:separatorIndex] + token := api[separatorIndex+1:] + + arcClients = append(arcClients, broadcast_client.ArcClientConfig{ + APIUrl: apiURL, + Token: token, + }) + } else { + arcClients = append(arcClients, broadcast_client.ArcClientConfig{ + APIUrl: api, + }) + } + } + return arcClients +} diff --git a/go.mod b/go.mod index ad11036b..2d7c4fc8 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( github.com/vektah/gqlparser/v2 v2.5.8 ) -require github.com/bitcoin-sv/go-broadcast-client v0.0.0-20230822135329-75a90170644a // indirect +require github.com/bitcoin-sv/go-broadcast-client v0.0.0-20230822135329-75a90170644a require ( github.com/KyleBanks/depth v1.2.1 // indirect