@@ -5,13 +5,15 @@ module Node.HTTP.Client
55 , Response ()
66 , RequestHeaders (..)
77 , RequestOptions ()
8+ , RequestFamily (..)
89 , protocol
910 , hostname
1011 , port
1112 , method
1213 , path
1314 , headers
1415 , auth
16+ , family
1517 , request
1618 , requestFromURI
1719 , requestAsStream
@@ -31,6 +33,7 @@ import Data.Maybe (Maybe)
3133import Data.Foreign (Foreign , toForeign )
3234import Data.Options (Options , Option , options , opt )
3335import Data.StrMap (StrMap (), delete , lookup )
36+ import Data.Functor.Contravariant ((>$<))
3437import Node.HTTP (HTTP ())
3538import Node.Stream (Readable , Writable )
3639import Node.URL as URL
@@ -48,6 +51,9 @@ newtype RequestHeaders = RequestHeaders (StrMap String)
4851-- | The type of HTTP request options
4952data RequestOptions
5053
54+ -- | Values for the `family` request option
55+ data RequestFamily = IPV4 | IPV6
56+
5157-- | The protocol to use
5258protocol :: Option RequestOptions String
5359protocol = opt " protocol"
@@ -75,6 +81,16 @@ headers = opt "headers"
7581auth :: Option RequestOptions String
7682auth = opt " auth"
7783
84+ -- | IP address family to use when resolving `hostname`.
85+ -- | Valid values are `IPV6` and `IPV4`
86+ family :: Option RequestOptions RequestFamily
87+ family = familyToOption >$< opt " family"
88+
89+ -- | Translates RequestFamily values to Int parameters for Request
90+ familyToOption :: RequestFamily -> Int
91+ familyToOption IPV4 = 4
92+ familyToOption IPV6 = 6
93+
7894-- | Make a HTTP request using the specified options and response callback.
7995foreign import requestImpl :: forall eff . Foreign -> (Response -> Eff (http :: HTTP | eff ) Unit ) -> Eff (http :: HTTP | eff ) Request
8096
0 commit comments