@@ -13,15 +13,24 @@ import Promise.Aff (toAffE, fromAff) as Promise
1313import Web.Fetch.Request (Request)
1414import Web.Fetch.Response (Response)
1515
16−type BunServerImpl = { stop :: EffectFn1 Boolean (Promise Unit) }
16+type BunServerImpl = { stop :: EffectFn1 Boolean (Promise Unit), upgrade :: EffectFn1 Request Boolean }
1717
1818data CloseActiveConnections = WaitForOpenConnections | ForceTerminateAllOpenConnections
1919
20−type BunServer = { stop :: CloseActiveConnections -> Aff Unit }
20+type BunServer = { stop :: CloseActiveConnections -> Aff Unit, upgrade :: Request -> Effect Boolean }
2121
2222foreign import serveImpl :: forall options. EffectFn1 options BunServerImpl
2323
24−type BunServeOptionsImpl = (fetch :: EffectFn1 Request (Promise Response), port :: Int, host :: String)
24+type BunServeOptionsImpl =
25+ ( fetch :: EffectFn1 Request (Promise Response)
26+ , port :: Int
27+ , host :: String
28+ , websocket ::
29+ { open :: EffectFn1 Foreign Unit
30+ , message :: EffectFn2 Foreign Foreign Unit
31+ , close :: EffectFn2 Foreign Foreign Unit
32+ }
33+ )
2534
2635serve :: forall opts opts_. Union opts opts_ BunServeOptionsImpl => { fetch :: EffectFn1 Request (Promise Response) | opts } -> Effect BunServer
2736serve opts = do
@@ -30,6 +39,7 @@ serve opts = do
3039 { stop: \closeActiveConnections -> case closeActiveConnections of
3140 WaitForOpenConnections -> runEffectFn1 serverImpl.stop true # Promise.toAffE
3241 ForceTerminateAllOpenConnections -> runEffectFn1 serverImpl.stop false # Promise.toAffE
42+ , upgrade: runEffectFn1 serverImpl.upgrade
3343 }
3444
3545mkFetch :: (Request -> Aff Response) -> EffectFn1 Request (Promise Response)