@@ -48,6 +48,8 @@ import Data.Foldable
4848 (toList )
4949import Data.Functor.Alt
5050 (Alt (.. ))
51+ import Data.Maybe
52+ (fromMaybe )
5153import Data.Proxy
5254 (Proxy (.. ))
5355import qualified Data.Sequence as Seq
@@ -70,7 +72,7 @@ import qualified Language.Javascript.JSaddle.Types as JSaddle
7072import Network.HTTP.Media
7173 (renderHeader )
7274import Network.HTTP.Types
73- (ResponseHeaders , http11 , mkStatus , renderQuery , statusCode )
75+ (ResponseHeaders , Status , http11 , mkStatus , renderQuery , statusCode )
7476import System.IO
7577 (hPutStrLn , stderr )
7678
@@ -120,9 +122,15 @@ instance Alt ClientM where
120122
121123instance RunClient ClientM where
122124 throwClientError = throwError
125+ #if MIN_VERSION_servant_client_core(0,18,1)
126+ runRequestAcceptStatus acceptStatuses r = do
127+ d <- ClientM askDOM
128+ performRequest (fromMaybe [] acceptStatuses) d r
129+ #else
123130 runRequest r = do
124131 d <- ClientM askDOM
125- performRequest d r
132+ performRequest [] d r
133+ #endif
126134
127135runClientM :: ClientM a -> ClientEnv -> DOM (Either ClientError a )
128136runClientM cm env = runExceptT $ flip runReaderT env $ fromClientM cm
@@ -156,16 +164,16 @@ getDefaultBaseUrl = do
156164
157165 pure (BaseUrl protocol hostname port " " )
158166
159- performRequest :: DOMContext -> Request -> ClientM Response
160- performRequest domc req = do
167+ performRequest :: [ Status ] -> DOMContext -> Request -> ClientM Response
168+ performRequest acceptStatuses domc req = do
161169 xhr <- JS. newXMLHttpRequest `runDOM` domc
162170 burl <- asks baseUrl
163171 fixUp <- asks fixUpXhr
164172 performXhr xhr burl req fixUp `runDOM` domc
165173 resp <- toResponse domc xhr
166174
167175 let status = statusCode (responseStatusCode resp)
168- unless (status >= 200 && status < 300 ) $
176+ unless (( status >= 200 && status < 300 ) || status `elem` (statusCode <$> acceptStatuses) ) $
169177 throwError $ mkFailureResponse burl req resp
170178
171179 pure resp
0 commit comments