@@ -6,6 +6,7 @@ module Supabase.Storage
66 , remove
77 , storage
88 , upload
9+ , createSignedUrl
910 ) where
1011
1112import Prelude
@@ -26,6 +27,7 @@ import Type.Function (type ($))
2627import Supabase.Util as Util
2728import Web.File.Blob (Blob)
2829import Web.File.File as File
30+import Data.Time.Duration (Seconds)
2931
3032foreign import data Storage :: Type
3133
@@ -57,3 +59,12 @@ foreign import removeImpl :: QueryBuilder -> Array String -> Effect (Promise For
5759
5860remove ∷ Array String → QueryBuilder → Aff { error ∷ Maybe ResultError }
5961remove file qb = removeImpl qb file # Promise.toAffE >>= Util.fromJSON
62+
63+foreign import createSignedUrlImpl :: QueryBuilder -> String -> Seconds -> Effect (Promise { "data" :: Nullable { signedUrl :: String }, error :: Nullable ResultError })
64+
65+createSignedUrl :: String -> Seconds -> QueryBuilder -> Aff (SBTypes.Response { signedUrl :: String })
66+createSignedUrl file expiry qb = createSignedUrlImpl qb file expiry # Promise.toAffE <#> convert
67+ where
68+ convert { "data": d, error: error } = do
69+ let blob = Nullable.toMaybe d
70+ { "data": blob, error: Nullable.toMaybe error, status: Nothing }