0 | module Node.HTTPS.Request
 1 |
 2 | import Node
 3 | import public Node.HTTP.Headers
 4 | import public Node.HTTP.Request
 5 | import public Node.Net.Socket.Connect
 6 | import public Node.Net.Socket.Type
 7 | import public Node.TLS.Connect
 8 | import public Node.TLS.CreateSecureContext
 9 |
10 | namespace Command
11 |
12 |   public export
13 |   record Options (t : SocketType) where
14 |     constructor MkOptions
15 |     request: Node.HTTP.Request.Options Headers
16 |     tls: Node.TLS.Connect.Options
17 |     context: Node.TLS.CreateSecureContext.Options
18 |     socket: Maybe $ Node.Net.Socket.Connect.options t
19 |
20 |   export
21 |   defaultOptions : {auto t : SocketType} -> HTTPS.Request.Command.Options t
22 |   defaultOptions = MkOptions
23 |     { request = { protocol := "https:" } defaultOptions
24 |     , tls  = defaultOptions
25 |     , context = defaultOptions
26 |     , socket = Nothing
27 |     }
28 |
29 |   %foreign """
30 |     node:lambda:
31 |     ( ty
32 |     , request
33 |     , tls
34 |     , context
35 |     , socket
36 |     ) => _keepDefined({
37 |       ..._maybe(socket),
38 |       ...context,
39 |       ...tls,
40 |       ...request
41 |     })
42 |     """
43 |   ffi_convertOptions:
44 |     (request: Node $ Node.HTTP.Request.Options Headers)
45 |     -> (tls: Node Node.TLS.Connect.Options)
46 |     -> (context: Node Node.TLS.CreateSecureContext.Options)
47 |     -> (socket: Maybe AnyPtr)
48 |     -> Node $ Node.HTTPS.Request.Command.Options t
49 |
50 |   export
51 |   convertOptions : (t : SocketType) -> Node.HTTPS.Request.Command.Options t -> Node $ Node.HTTPS.Request.Command.Options t
52 |   convertOptions t o = ffi_convertOptions
53 |     (convertOptions o.request)
54 |     (convertOptions o.tls)
55 |     (convertOptions o.context)
56 |     (believe_me $ convertOptions t <$> o.socket)
57 |
58 |