@@ -80,10 +80,10 @@ foreign import fromImpl :: Client -> String -> QueryBuilder
8080from ∷ String → Client -> QueryBuilder
8181from s c = fromImpl c s
8282
83−foreign import upsertImpl :: QueryBuilder -> Foreign -> FilterBuilder
83+foreign import upsertImpl :: QueryBuilder -> Foreign -> Effect (Promise Foreign)
8484
85−upsert ∷ ∀ (values ∷ Type). WriteForeign values => values → QueryBuilder → FilterBuilder
86−upsert v q = upsertImpl q $ writeImpl v
85+upsert ∷ ∀ (values ∷ Type) result. WriteForeign values => ReadForeign result => values → QueryBuilder → Aff (Response (Array result))
86+upsert v q = (upsertImpl q $ writeImpl v) # Promise.toAffE >>= Util.fromJSON
8787
8888foreign import selectRunImpl :: forall input. FilterBuilder -> input -> Effect (Promise Foreign)
8989
@@ -151,9 +151,9 @@ foreign import signOutImpl :: Client -> Effect (Promise Unit)
151151signOut ∷ Client → Aff Unit
152152signOut client = signOutImpl client # Promise.toAffE
153153
154−foreign import onAuthStateChangeImpl :: Client -> (EffectFn1 (Nullable Session) Unit) -> Effect Unit
154+foreign import onAuthStateChangeImpl :: Client -> (EffectFn1 (Nullable Session) Unit) -> Effect { unsubscribe :: Effect Unit }
155155
156−onAuthStateChange ∷ Client → (Maybe Session → Effect Unit) → Effect Unit
156+onAuthStateChange ∷ Client → (Maybe Session → Effect Unit) → Effect { unsubscribe :: Effect Unit }
157157onAuthStateChange client handler = onAuthStateChangeImpl client $ mkEffectFn1 (Nullable.toMaybe >>> handler)
158158
159159type User = { id :: String, email :: String }