| CARVIEW |
ipfs: Access IPFS locally and remotely
Interact with the IPFS network by shelling out to a local IPFS node or communicating via the HTTP interface of a remote IPFS node.
[Skip to Readme]
Modules
[Index] [Quick Jump]
- Network
- Network.IPFS
- Network.IPFS.Add
- BinPath
- Bytes
- CID
- Network.IPFS.Client
- Network.IPFS.DAG
- Network.IPFS.Error
- File
- Gateway
- Network.IPFS.Get
- Ignored
- Info
- Internal
- Local
- MIME
- RawPlainText
- Name
- Path
- Network.IPFS.Peer
- Network.IPFS.Pin
- Network.IPFS.Prelude
- Network.IPFS.Process
- Remote
- Network.IPFS.SparseTree
- Network.IPFS.Stat
- Timeout
- Network.IPFS.Types
- URL
- Network.IPFS
- Paths_ipfs
Downloads
- ipfs-1.4.1.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
| Versions [RSS] | 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.1.0, 1.1.1, 1.1.2, 1.1.3, 1.1.3.1, 1.1.4.0, 1.1.5.0, 1.1.5.1, 1.2.0.0, 1.3.0.0, 1.3.0.1, 1.3.0.2, 1.3.0.3, 1.3.1, 1.3.2, 1.4.0, 1.4.1 |
|---|---|
| Dependencies | aeson, base (<5), bytestring, envy, flow, Glob, http-media, lens, monad-logger, network-ip, regex-compat, rio, servant, servant-client, servant-multipart, servant-multipart-api, servant-multipart-client, swagger2, text, vector [details] |
| Tested with | ghc ==9.2.7 |
| License | Apache-2.0 |
| Copyright | © 2023 Fission Internet Software Services for Open Networks Inc. |
| Author | Brooklyn Zelenka, Daniel Holmgren, Steven Vandevelde, James Walker |
| Maintainer | brooklyn@fission.codes, daniel@fission.codes, steven@fission.codes, james@fission.codes |
| Uploaded | by expede at 2023-04-05T21:16:05Z |
| Category | Network |
| Home page | https://github.com/fission-suite/ipfs-haskell#readme |
| Bug tracker | https://github.com/fission-suite/ipfs-haskell/issues |
| Source repo | head: git clone https://github.com/fission-suite/ipfs-haskell |
| Distributions | |
| Downloads | 4961 total (90 in the last 30 days) |
| Rating | (no votes yet) [estimated by Bayesian average] |
| Your Rating |
|
| Status | Docs available [build log] Last success reported on 2023-04-05 [all 1 reports] |
Readme for ipfs-1.4.1
[back to package description]ipfs-haskell
Documentation: ipfs on hackage
A library for integrating IPFS into your haskell applications. Interact with the IPFS network by shelling out to a local IPFS node or communicating via the HTTP interface of a remote node.
QuickStart
Define instances for MonadLocalIPFS and/or MonadRemoteIPFS. Each requires only one function:
class Monad m => MonadRemoteIPFS m where
runRemote :: Servant.ClientM a -> m (Either Servant.ClientError a)
class Monad m => MonadLocalIPFS m where
runLocal ::
[IPFS.Opt]
-> Lazy.ByteString
-> m (Either Process.Error Process.RawMessage)
We use RIO processes to shell out to a local IPFS node and Servant for HTTP requests to a remote node.
After that, simply add MonadLocalIPFS m as a constraint to a function and you'll be able to call IPFS within it.
For instance:
import Network.IPFS
import qualified Network.IPFS.Add as IPFS
import Network.IPFS.File.Types as File
add ::
MonadLocalIPFS m
=> File.Serialzed
-> m ()
add (Serialized rawData) = IPFS.addRaw rawData >>= \case
Right newCID ->
-- ...
Left err ->
-- ...
You can see example instances below:
instance
( HasProcessContext cfg
, HasLogFunc cfg
, Has IPFS.BinPath cfg
, Has IPFS.Timeout cfg
)
=> MonadLocalIPFS (RIO cfg) where
runLocal opts arg = do
IPFS.BinPath ipfs <- view hasLens
IPFS.Timeout secs <- view hasLens
let opts' = ("--timeout=" <> show secs <> "s") : opts
runProc readProcess ipfs (byteStringInput arg) byteStringOutput opts' >>= \case
(ExitSuccess, contents, _) ->
return $ Right contents
(ExitFailure _, _, stdErr)
| Lazy.isSuffixOf "context deadline exceeded" stdErr ->
return . Left $ Process.Timeout secs
| otherwise ->
return . Left $ Process.UnknownErr stdErr
instance
( Has IPFS.URL cfg
, Has HTTP.Manager cfg
)
=> MonadRemoteIPFS (RIO cfg) where
runRemote query = do
IPFS.URL url <- view hasLens
manager <- view hasLens
url
& mkClientEnv manager
& runClientM query
& liftIO