diff --git a/internal/dev_server/sdk/polling.go b/internal/dev_server/sdk/polling.go new file mode 100644 index 00000000..20547f3a --- /dev/null +++ b/internal/dev_server/sdk/polling.go @@ -0,0 +1,24 @@ +package sdk + +import ( + "encoding/json" + "net/http" + + "github.com/pkg/errors" +) + +func LatestAll(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + allFlags, err := GetAllFlagsFromContext(ctx) + if err != nil { + WriteError(ctx, w, errors.Wrap(err, "failed to get flag state")) + return + } + serverFlags := ServerAllPayloadFromFlagsState(allFlags) + enc := json.NewEncoder(w) + err = enc.Encode(serverFlags.Data) + if err != nil { + WriteError(ctx, w, errors.Wrap(err, "failed to encode response")) + return + } +} diff --git a/internal/dev_server/sdk/routes.go b/internal/dev_server/sdk/routes.go index 29bc1bdb..1e532724 100644 --- a/internal/dev_server/sdk/routes.go +++ b/internal/dev_server/sdk/routes.go @@ -20,6 +20,7 @@ func BindRoutes(router *mux.Router) { router.HandleFunc("/mobile/events/diagnostic", DevNull) router.Handle("/all", GetProjectKeyFromAuthorizationHeader(http.HandlerFunc(StreamServerAllPayload))) + router.Handle("/sdk/latest-all", GetProjectKeyFromAuthorizationHeader(http.HandlerFunc(LatestAll))) router.PathPrefix("/sdk/flags"). Methods(http.MethodGet).