diff --git a/internal/dev_server/adapters/api.go b/internal/dev_server/adapters/api.go index 8e982de9..9d4dfece 100644 --- a/internal/dev_server/adapters/api.go +++ b/internal/dev_server/adapters/api.go @@ -4,7 +4,6 @@ import ( "context" ldapi "github.com/launchdarkly/api-client-go/v14" - "github.com/pkg/errors" ) const ctxKeyApi = ctxKey("adapters.api") @@ -26,14 +25,9 @@ func NewApi(client ldapi.APIClient) Api { } func (a Api) GetSdkKey(ctx context.Context, projectKey, environmentKey string) (string, error) { - project, _, err := a.apiClient.ProjectsApi.GetProject(ctx, projectKey).Execute() + environment, _, err := a.apiClient.EnvironmentsApi.GetEnvironment(ctx, projectKey, environmentKey).Execute() if err != nil { return "", err } - for _, environment := range project.Environments.Items { - if environment.Key == environmentKey { - return environment.ApiKey, nil - } - } - return "", errors.Errorf("environment, %s, not found", environmentKey) + return environment.ApiKey, nil } diff --git a/internal/dev_server/adapters/middleware.go b/internal/dev_server/adapters/middleware.go index ca5b16d6..3c1282a1 100644 --- a/internal/dev_server/adapters/middleware.go +++ b/internal/dev_server/adapters/middleware.go @@ -9,11 +9,11 @@ import ( type ctxKey string // Middleware puts adapters on to the context for consumption by other things -func Middleware(client ldapi.APIClient) func(handler http.Handler) http.Handler { +func Middleware(client ldapi.APIClient, eventsUrl, pollingUrl, streamingUrl string) func(handler http.Handler) http.Handler { return func(handler http.Handler) http.Handler { return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { ctx := request.Context() - ctx = WithSdk(ctx, newSdk()) + ctx = WithSdk(ctx, newSdk(eventsUrl, pollingUrl, streamingUrl)) ctx = WithApi(ctx, NewApi(client)) request = request.WithContext(ctx) handler.ServeHTTP(writer, request) diff --git a/internal/dev_server/adapters/sdk.go b/internal/dev_server/adapters/sdk.go index f4d85b1b..6960350a 100644 --- a/internal/dev_server/adapters/sdk.go +++ b/internal/dev_server/adapters/sdk.go @@ -20,16 +20,33 @@ func GetSdk(ctx context.Context) Sdk { } type Sdk struct { + eventsUrl string + pollingUrl string + streamingUrl string } -func newSdk() Sdk { - return Sdk{} +func newSdk(eventsUrl, pollingUrl, streamingUrl string) Sdk { + return Sdk{ + eventsUrl: eventsUrl, + pollingUrl: pollingUrl, + streamingUrl: streamingUrl, + } } func (s Sdk) GetAllFlagsState(ctx context.Context, ldContext ldcontext.Context, sdkKey string) (flagstate.AllFlags, error) { - ldClient, err := ldsdk.MakeClient(sdkKey, 5*time.Second) + config := ldsdk.Config{} + if s.pollingUrl != "" { + config.ServiceEndpoints.Polling = s.pollingUrl + } + if s.eventsUrl != "" { + config.ServiceEndpoints.Events = s.eventsUrl + } + if s.streamingUrl != "" { + config.ServiceEndpoints.Streaming = s.streamingUrl + } + ldClient, err := ldsdk.MakeCustomClient(sdkKey, config, 5*time.Second) if err != nil { - return flagstate.AllFlags{}, nil + return flagstate.AllFlags{}, err } flags := ldClient.AllFlagsState(ldContext) return flags, nil diff --git a/internal/dev_server/dev_server.go b/internal/dev_server/dev_server.go index d5902959..d5115e70 100644 --- a/internal/dev_server/dev_server.go +++ b/internal/dev_server/dev_server.go @@ -37,7 +37,7 @@ func (c LDClient) RunServer(ctx context.Context, accessToken, baseURI string) { ss := api.NewStrictServer() apiServer := api.NewStrictHandler(ss, nil) r := mux.NewRouter() - r.Use(adapters.Middleware(*ldClient)) + r.Use(adapters.Middleware(*ldClient, "https://events.ld.catamorphic.com", "https://relay-stg.ld.catamorphic.com", "https://relay-stg.ld.catamorphic.com")) // TODO add to config r.Use(model.StoreMiddleware(sqlStore)) // TODO need a subrouter for relay endpoints handler := api.HandlerFromMux(apiServer, r)