on master help sign in
Fix Knot compiler type errors in response handlers
a9574e5iko
server.knot+30−28
@@ -143,7 +143,7 @@ serve = \req -> case req of
143 t <- now
143 t <- now
144 token <- genToken
144 token <- genToken
145 let expiry = t + 3600000
145 let expiry = t + 3600000
146− result <- atomic do
146+ sigValid <- atomic do
147 challenges <- *challenges
147 challenges <- *challenges
148 sessions <- *sessions
148 sessions <- *sessions
149 presence <- *presence
149 presence <- *presence
@@ -173,18 +173,18 @@ serve = \req -> case req of
173 yield p)
173 yield p)
174 [{pubkey: pubkey, server: serverHost, expiresAt: expiry}]
174 [{pubkey: pubkey, server: serverHost, expiresAt: expiry}]
175 else presence
175 else presence
176+ yield sigValid
176− if sigValid
177+ if sigValid
177− then yield {token: token, expiresAt: expiry}
178+ then respond {token: token, expiresAt: expiry}
178− else yield {token: "", expiresAt: 0}
179+ else respond {token: "", expiresAt: 0}
179− respond result
180
180
181 Poll {authorization, respond} -> do
181 Poll {authorization, respond} -> do
182 t <- now
182 t <- now
183− result <- atomic do
183+ evts <- atomic do
184 sessions <- *sessions
184 sessions <- *sessions
185 let session = lookupSession sessions (extractToken authorization) t
185 let session = lookupSession sessions (extractToken authorization) t
186 case session of
186 case session of
187− Nothing {} -> yield {events: [], cursor: "unauthorized"}
187+ Nothing {} -> yield []
188 Just {value: s} -> do
188 Just {value: s} -> do
189 messages <- *messages
189 messages <- *messages
190 let pending = do
190 let pending = do
@@ -196,13 +196,13 @@ serve = \req -> case req of
196 timestamp: m.timestamp}}
196 timestamp: m.timestamp}}
197 if count pending == 0
197 if count pending == 0
198 then retry
198 then retry
199+ else yield pending
199− else yield {events: pending, cursor: ""}
200+ respond {events: evts, cursor: ""}
200− respond result
201
201
202 SendMessage {to, encryptedBlob, timestamp, authorization, respond} -> do
202 SendMessage {to, encryptedBlob, timestamp, authorization, respond} -> do
203 t <- now
203 t <- now
204 msgId <- genToken
204 msgId <- genToken
205− result <- atomic do
205+ status <- atomic do
206 sessions <- *sessions
206 sessions <- *sessions
207 messages <- *messages
207 messages <- *messages
208 let session = lookupSession sessions (extractToken authorization) t
208 let session = lookupSession sessions (extractToken authorization) t
@@ -218,15 +218,15 @@ serve = \req -> case req of
218 where s.pubkey == to
218 where s.pubkey == to
219 where s.expiresAt > t
219 where s.expiresAt > t
220 yield s) > 0
220 yield s) > 0
221− case session of
221+ let status = case session of
222− Nothing {} -> yield {status: "unauthorized", messageId: ""}
222+ Nothing {} -> "unauthorized"
223− _ -> yield {status: (if online then "delivered" else "queued"),
223+ _ -> if online then "delivered" else "queued"
224− messageId: msgId}
224+ yield status
225− respond result
225+ respond {status: status, messageId: (if status == "unauthorized" then "" else msgId)}
226
226
227 AckMessages {messageIds, authorization, respond} -> do
227 AckMessages {messageIds, authorization, respond} -> do
228 t <- now
228 t <- now
229− result <- atomic do
229+ ok <- atomic do
230 sessions <- *sessions
230 sessions <- *sessions
231 messages <- *messages
231 messages <- *messages
232 let session = lookupSession sessions (extractToken authorization) t
232 let session = lookupSession sessions (extractToken authorization) t
@@ -238,14 +238,15 @@ serve = \req -> case req of
238 where m.messageId == mid
238 where m.messageId == mid
239 where m.toKey == s.pubkey
239 where m.toKey == s.pubkey
240 yield m)
240 yield m)
241− case session of
241+ let ok = case session of
242− Nothing {} -> yield {ok: (False {})}
242+ Nothing {} -> False {}
243− _ -> yield {ok: (True {})}
243+ _ -> True {}
244+ yield ok
244− respond result
245+ respond {ok: ok}
245
246
246 LookupPresence {pubkey, authorization, respond} -> do
247 LookupPresence {pubkey, authorization, respond} -> do
247 t <- now
248 t <- now
248− result <- atomic do
249+ foundServer <- atomic do
249 sessions <- *sessions
250 sessions <- *sessions
250 presence <- *presence
251 presence <- *presence
251 let session = lookupSession sessions (extractToken authorization) t
252 let session = lookupSession sessions (extractToken authorization) t
@@ -254,21 +255,22 @@ serve = \req -> case req of
254 where p.pubkey == pubkey
255 where p.pubkey == pubkey
255 where p.expiresAt > t
256 where p.expiresAt > t
256 yield p
257 yield p
257− case session of
258+ let foundServer = case session of
258− Nothing {} -> yield {online: (False {}), server: ""}
259+ Nothing {} -> ""
259 Just {value: _} ->
260 Just {value: _} ->
260 if count valid == 0
261 if count valid == 0
261− then yield {online: (False {}), server: ""}
262+ then ""
262 else case single (do
263 else case single (do
263 p <- valid
264 p <- valid
264 where p.server == serverHost
265 where p.server == serverHost
265 yield p) of
266 yield p) of
266− Just {value: p} -> yield {online: (True {}), server: p.server}
267+ Just {value: p} -> p.server
267 Nothing {} ->
268 Nothing {} ->
268 case single valid of
269 case single valid of
269− Just {value: p} -> yield {online: (True {}), server: p.server}
270+ Just {value: p} -> p.server
270− Nothing {} -> yield {online: (True {}), server: ""}
271+ Nothing {} -> ""
271− respond result
272+ yield foundServer
273+ respond {online: not (foundServer == ""), server: foundServer}
272
274
273 RecvGossip {events, hopsRemaining, authorization, respond} -> do
275 RecvGossip {events, hopsRemaining, authorization, respond} -> do
274 t <- now
276 t <- now