ipfs 1.3.0.0 → 1.3.0.1
raw patch · 2 files changed
+25/−34 lines, 2 filesdep +network-ipdep −ipPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: network-ip
Dependencies removed: ip
API changes (from Hackage documentation)
- Network.IPFS.Peer: connectRetry :: MonadLocalIPFS m => Peer -> Int -> m (Either Error ())
+ Network.IPFS.Peer: connectRetry :: MonadLocalIPFS m => Peer -> Natural -> m (Either Error ())
Files
- ipfs.cabal +4/−4
- library/Network/IPFS/Peer.hs +21/−30
ipfs.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: ipfs-version: 1.3.0.0+version: 1.3.0.1 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@@ -22,9 +22,9 @@ copyright: © 2021 Fission Internet Software Services for Open Networks Inc. license: Apache-2.0 license-file: LICENSE+build-type: Simple tested-with: GHC==8.10.4-build-type: Simple extra-source-files: README.md @@ -143,9 +143,9 @@ , envy , flow , http-media- , ip , lens , monad-logger+ , network-ip , regex-compat , rio , servant@@ -220,10 +220,10 @@ , envy , flow , http-media- , ip , lens , lens-aeson , monad-logger+ , network-ip , regex-compat , rio , servant
library/Network/IPFS/Peer.hs view
@@ -9,7 +9,8 @@ import qualified RIO.List as List import qualified RIO.Text as Text -import qualified Net.IPv4 as IPv4+import qualified Network.IP.Addr as Addr+ import Text.Regex import qualified Network.IPFS.Internal.UTF8 as UTF8@@ -22,34 +23,23 @@ import qualified Network.IPFS.Process.Error as Process import qualified Network.IPFS.Types as IPFS -all ::- MonadLocalIPFS m- => m (Either IPFS.Peer.Error [IPFS.Peer])+all :: MonadLocalIPFS m => m (Either IPFS.Peer.Error [IPFS.Peer]) all = rawList <&> \case Right raw -> case UTF8.encode raw of Left _ -> Left . DecodeFailure $ show raw Right text -> Right $ IPFS.Peer <$> Text.lines text Left err -> Left . UnknownErr $ UTF8.textShow err -rawList ::- MonadLocalIPFS m- => m (Either Process.Error Process.RawMessage)+rawList :: MonadLocalIPFS m => m (Either Process.Error Process.RawMessage) rawList = IPFS.runLocal ["bootstrap", "list"] "" -connect ::- MonadLocalIPFS m- => Peer- -> m (Either IPFS.Peer.Error ())+connect :: MonadLocalIPFS m => Peer -> m (Either IPFS.Peer.Error ()) connect peer@(Peer peerID) = IPFS.runLocal ["swarm", "connect"] (UTF8.textToLazyBS peerID) >>= pure . \case Left _ -> Left $ CannotConnect peer Right _ -> Right () -connectRetry ::- MonadLocalIPFS m- => Peer- -> Int- -> m (Either IPFS.Peer.Error ())-connectRetry peer (-1) = return . Left <| CannotConnect peer+connectRetry :: MonadLocalIPFS m => Peer -> Natural -> m (Either IPFS.Peer.Error ())+connectRetry peer 0 = return . Left $ CannotConnect peer connectRetry peer tries = connect peer >>= \case Right _ -> return $ Right () Left _err -> connectRetry peer (tries - 1)@@ -68,22 +58,23 @@ isReserved :: Maybe Bool isReserved = do ipAddress <- extractIPfromPeerAddress $ Text.unpack ip- normalized <- IPv4.decode $ Text.pack ipAddress- return $ IPv4.reserved normalized+ normalized <- readMaybe ipAddress+ return (Addr.ip4Range normalized == Addr.ReservedIP4) -- | Filter a list of peers to include only the externally accessable addresses filterExternalPeers :: [Peer] -> [Peer] filterExternalPeers = filter (isExternalIPv4 . peer) -- | Get all external ipfs peer addresses-getExternalAddress ::- MonadLocalIPFS m- => m (Either IPFS.Peer.Error [Peer])-getExternalAddress = IPFS.runLocal ["id"] "" >>= \case- Left err -> return . Left . UnknownErr $ UTF8.textShow err- Right raw ->- raw- |> decode- |> maybe [] addresses- |> Right . filterExternalPeers- |> pure+getExternalAddress :: MonadLocalIPFS m => m (Either IPFS.Peer.Error [Peer])+getExternalAddress =+ IPFS.runLocal ["id"] "" >>= \case+ Left err ->+ return . Left . UnknownErr $ UTF8.textShow err++ Right raw ->+ raw+ |> decode+ |> maybe [] addresses+ |> Right . filterExternalPeers+ |> pure