packages feed

ipfs 1.2.0.0 → 1.3.0.0

raw patch · 7 files changed

+109/−36 lines, 7 filesdep +servant-multipartPVP ok

version bump matches the API change (PVP)

Dependencies added: servant-multipart

API changes (from Hackage documentation)

+ Network.IPFS.Client: dagPut :: Bool -> (ByteString, Form) -> ClientM Response
+ Network.IPFS.Client.DAG.Put.Types: Response :: CID -> Response
+ Network.IPFS.Client.DAG.Put.Types: instance Data.Aeson.Types.FromJSON.FromJSON Network.IPFS.Client.DAG.Put.Types.Response
+ Network.IPFS.Client.DAG.Put.Types: newtype Response
+ Network.IPFS.Client.DAG.Put.Types: type API = QueryParam' '[Required, Strict] "pin" Bool :> MultipartForm Tmp Form :> Post '[JSON] Response
+ Network.IPFS.Client.DAG.Types: type API = "put" :> API
+ Network.IPFS.DAG: putRemote :: MonadRemoteIPFS m => Serialized -> m (Either ClientError Response)
+ Network.IPFS.File.Form.Types: Form :: Text -> Serialized -> Form
+ Network.IPFS.File.Form.Types: [$sel:name:Form] :: Form -> Text
+ Network.IPFS.File.Form.Types: [$sel:serialized:Form] :: Form -> Serialized
+ Network.IPFS.File.Form.Types: data Form
+ Network.IPFS.File.Form.Types: instance Servant.Multipart.ToMultipart Servant.Multipart.Tmp Network.IPFS.File.Form.Types.Form

Files

ipfs.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           ipfs-version:        1.2.0.0+version:        1.3.0.0 synopsis:       Access IPFS locally and remotely description:    Interact with the IPFS network by shelling out to a local IPFS node or communicating via the HTTP interface of a remote IPFS node. category:       Network@@ -19,7 +19,7 @@                 daniel@fission.codes,                 steven@fission.codes,                 james@fission.codes-copyright:      © 2020 Fission Internet Software Services for Open Networks Inc.+copyright:      © 2021 Fission Internet Software Services for Open Networks Inc. license:        Apache-2.0 license-file:   LICENSE tested-with:@@ -43,6 +43,8 @@       Network.IPFS.Client       Network.IPFS.Client.Add       Network.IPFS.Client.Cat+      Network.IPFS.Client.DAG.Put.Types+      Network.IPFS.Client.DAG.Types       Network.IPFS.Client.Error.Types       Network.IPFS.Client.Param       Network.IPFS.Client.Pin@@ -53,6 +55,7 @@       Network.IPFS.DAG.Link.Types       Network.IPFS.DAG.Node.Types       Network.IPFS.Error+      Network.IPFS.File.Form.Types       Network.IPFS.File.Types       Network.IPFS.Gateway.Types       Network.IPFS.Get@@ -147,6 +150,7 @@     , rio     , servant     , servant-client+    , servant-multipart     , servant-server     , swagger2     , text@@ -224,6 +228,7 @@     , rio     , servant     , servant-client+    , servant-multipart     , servant-server     , swagger2     , text
library/Network/IPFS/Client.hs view
@@ -5,6 +5,7 @@   , stat   , pin   , unpin+  , dagPut   ) where  import qualified RIO.ByteString.Lazy                             as Lazy@@ -15,11 +16,14 @@ import           Network.IPFS.Prelude                            hiding (object)  import           Network.IPFS.CID.Types+import qualified Network.IPFS.File.Form.Types                    as File import qualified Network.IPFS.File.Types                         as File import           Network.IPFS.Stat.Types  import qualified Network.IPFS.Client.Add                         as Add import qualified Network.IPFS.Client.Cat                         as Cat+import qualified Network.IPFS.Client.DAG.Put.Types               as DAG.Put+import qualified Network.IPFS.Client.DAG.Types                   as DAG import qualified Network.IPFS.Client.Pin                         as Pin import qualified Network.IPFS.Client.Stat                        as Stat @@ -31,16 +35,18 @@ type V0API = "add"    :> Add.API         :<|> "cat"    :> Cat.API         :<|> "object" :> Stat.API+        :<|> "dag"    :> DAG.API         :<|> "pin"    :> Pin.API -add   :: Lazy.ByteString -> ClientM CID-cat   :: CID             -> ClientM File.Serialized-stat  :: CID             -> ClientM Stat-pin   :: CID             -> ClientM Pin.Response-unpin :: CID -> Bool     -> ClientM Pin.Response+cat    :: CID                                         -> ClientM File.Serialized+stat   :: CID                                         -> ClientM Stat+pin    :: CID                                         -> ClientM Pin.Response+unpin  :: CID -> Bool                                 -> ClientM Pin.Response+dagPut ::        Bool -> (Lazy.ByteString, File.Form) -> ClientM DAG.Put.Response+add    ::                 Lazy.ByteString             -> ClientM CID  add :<|> cat     :<|> stat+    :<|> dagPut     :<|> pin-    :<|> unpin-    = client $ Proxy @API+    :<|> unpin = client $ Proxy @API
+ library/Network/IPFS/Client/DAG/Put/Types.hs view
@@ -0,0 +1,22 @@+module Network.IPFS.Client.DAG.Put.Types (API, Response (..)) where++import           Servant.API+import           Servant.Multipart++import           Network.IPFS.Prelude++import           Network.IPFS.CID.Types+import qualified Network.IPFS.File.Form.Types as File++type API+  =  QueryParam' '[Required, Strict] "pin" Bool+  :> MultipartForm Tmp File.Form+  :> Post '[JSON] Response++newtype Response = Response CID++instance FromJSON Response where+  parseJSON = withObject "IPFS.DAG.Response" \obj -> do+    cidField <- obj .: "Cid"+    cid      <- cidField .: "/"+    return $ Response cid
+ library/Network/IPFS/Client/DAG/Types.hs view
@@ -0,0 +1,9 @@+module Network.IPFS.Client.DAG.Types (API) where++import           Servant.API++import qualified Network.IPFS.Client.DAG.Put.Types as Put++type API+  =  "put"+  :> Put.API
library/Network/IPFS/DAG.hs view
@@ -1,25 +1,31 @@ module Network.IPFS.DAG   ( put   , putNode+  , putRemote   ) where -import Network.IPFS.Prelude-import Network.IPFS.Local.Class as IPFS+import           Data.ByteString.Lazy.Char8        as CL+import qualified Network.IPFS.Internal.UTF8        as UTF8+import qualified RIO.ByteString.Lazy               as Lazy -import qualified Network.IPFS.Internal.UTF8 as UTF8-import           Data.ByteString.Lazy.Char8 as CL-import qualified RIO.ByteString.Lazy        as Lazy+import           Servant.Client+import qualified Servant.Multipart                 as Multipart -import           Network.IPFS.Add.Error      as IPFS.Add-import           Network.IPFS.Types          as IPFS-import           Network.IPFS.DAG.Node.Types as DAG+import           Network.IPFS.Prelude -put :: -  MonadLocalIPFS m-  => Lazy.ByteString-  -> m (Either IPFS.Add.Error IPFS.CID)+import           Network.IPFS.Add.Error            as IPFS.Add+import qualified Network.IPFS.Client               as IPFS.Client+import           Network.IPFS.Client.DAG.Put.Types as DAG.Put+import           Network.IPFS.DAG.Node.Types       as DAG+import           Network.IPFS.File.Form.Types      as File+import           Network.IPFS.File.Types           as File+import           Network.IPFS.Local.Class          as IPFS+import           Network.IPFS.Remote.Class         as IPFS+import           Network.IPFS.Types                as IPFS++put :: MonadLocalIPFS m => Lazy.ByteString -> m (Either IPFS.Add.Error IPFS.CID) put raw = IPFS.runLocal ["dag", "put", "-f", "dag-pb"] raw >>= \case-  Right result -> +  Right result ->     case CL.lines result of       [cid] ->         cid@@ -30,13 +36,15 @@           |> return        bad ->-        pure . Left . UnexpectedOutput <| UTF8.textShow bad+        pure . Left . UnexpectedOutput $ UTF8.textShow bad -  Left err -> -    pure . Left . UnknownAddErr <| UTF8.textShow err+  Left err ->+    pure . Left . UnknownAddErr $ UTF8.textShow err -putNode :: -  MonadLocalIPFS m-  => DAG.Node-  -> m (Either IPFS.Add.Error IPFS.CID)-putNode node = put <| encode node+putNode :: MonadLocalIPFS m => DAG.Node -> m (Either IPFS.Add.Error IPFS.CID)+putNode node = put $ encode node++putRemote :: MonadRemoteIPFS m => File.Serialized -> m (Either ClientError DAG.Put.Response)+putRemote file = do+  boundary  <- liftIO Multipart.genBoundary+  runRemote (IPFS.Client.dagPut True (boundary, File.Form "file" file))
library/Network/IPFS/DAG/Node/Types.hs view
@@ -1,19 +1,19 @@ module Network.IPFS.DAG.Node.Types (Node (..)) where -import Network.IPFS.Prelude+import           Network.IPFS.Prelude -import Data.Vector-import Network.IPFS.DAG.Link.Types as DAG+import           Data.Vector+import           Network.IPFS.DAG.Link.Types as DAG   data Node = Node   { dataBlock :: Text-  , links :: [DAG.Link]+  , links     :: [DAG.Link]   } deriving (Show, Eq)  instance ToJSON Node where-  toJSON (Node dataBlock links) = +  toJSON (Node dataBlock links) =     Object [ ("data", String dataBlock)-           , ("links", Array . fromList <| toJSON <$> links)+           , ("links", Array . fromList $ fmap toJSON links)            ] 
+ library/Network/IPFS/File/Form/Types.hs view
@@ -0,0 +1,23 @@+module Network.IPFS.File.Form.Types (Form (..)) where++import           RIO+import qualified RIO.ByteString.Lazy     as Lazy++import           Servant.Multipart++import qualified Network.IPFS.File.Types as File++data Form = Form+  { name       :: Text+  , serialized :: File.Serialized+  }++instance ToMultipart Tmp Form where+  toMultipart Form { name = name, serialized = File.Serialized fileLBS } =+    MultipartData+        [ Input+          { iName  = name+          , iValue = decodeUtf8Lenient $ Lazy.toStrict fileLBS+          }+        ]+        []