ipfs-api (empty) → 0.1.0.0
raw patch · 6 files changed
+2002/−0 lines, 6 filesdep +aesondep +basedep +bytestring
Dependencies added: aeson, base, bytestring, http-media, http-types, servant, text
Files
- CHANGELOG.md +0/−0
- LICENSE +30/−0
- README.md +1/−0
- gen/Network/IPFS/API.hs +1870/−0
- ipfs-api.cabal +58/−0
- src/Network/IPFS/API/Types.hs +43/−0
+ CHANGELOG.md view
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2018, Monadic GmbH++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Monadic GmbH nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,1 @@+[Servant](https://hackage.haskell.org/package/servant) definition of the [IPFS](https://ipfs.io) HTTP [API](https://docs.ipfs.io/reference/api/http/).
+ gen/Network/IPFS/API.hs view
@@ -0,0 +1,1870 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE TypeOperators #-}++-- | AUTOGENERATED+module Network.IPFS.API where++import Data.Aeson (Value)+import Data.ByteString (ByteString)+import qualified Data.ByteString.Lazy as L (ByteString)+import Data.Text (Text)+import Network.IPFS.API.Types+import Servant.API++-- | Add a file or directory to ipfs.+--+-- Response example:+--+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Bytes": "<int64>"+-- > "Size": "<string>"+-- > }+type ApiV0Add =+ "api" :> "v0" :> "add"+ :> ReqBody '[MultipartFormData] L.ByteString+ -- Add directory paths recursively. Default: false.+ :> QueryParam "recursive" Bool+ -- Write minimal output.+ :> QueryParam "quiet" Bool+ -- Write only final hash.+ :> QueryParam "quieter" Bool+ -- Write no output.+ :> QueryParam "silent" Bool+ -- Stream progress data.+ :> QueryParam "progress" Bool+ -- Use trickle-dag format for dag generation.+ :> QueryParam "trickle" Bool+ -- Only chunk and hash - do not write to disk.+ :> QueryParam "only-hash" Bool+ -- Wrap files with a directory object.+ :> QueryParam "wrap-with-directory" Bool+ -- Include files that are hidden. Only takes effect on recursive add.+ :> QueryParam "hidden" Bool+ -- Chunking algorithm, size-[bytes] or rabin-[min]-[avg]-[max]. Default:+ -- size-262144.+ :> QueryParam "chunker" Text+ -- Pin this object when adding. Default: true.+ :> QueryParam "pin" Bool+ -- Use raw blocks for leaf nodes. (experimental).+ :> QueryParam "raw-leaves" Bool+ -- Add the file using filestore. Implies raw-leaves. (experimental).+ :> QueryParam "nocopy" Bool+ -- Check the filestore for pre-existing blocks. (experimental).+ :> QueryParam "fscache" Bool+ -- CID version. Defaults to 0 unless an option that depends on CIDv1 is passed.+ -- (experimental).+ :> QueryParam "cid-version" Int+ -- Hash function to use. Implies CIDv1 if not sha2-256. (experimental). Default:+ -- sha2-256.+ :> QueryParam "hash" Text+ :> Post '[JSON] Value++-- | Show the current ledger for a peer.+--+-- Response example:+--+-- > {+-- > "Peer": "<string>"+-- > "Value": "<float64>"+-- > "Sent": "<uint64>"+-- > "Recv": "<uint64>"+-- > "Exchanged": "<uint64>"+-- > }+type ApiV0BitswapLedger =+ "api" :> "v0" :> "bitswap" :> "ledger"+ -- The PeerID (B58) of the ledger to inspect.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Trigger reprovider.+type ApiV0BitswapReprovide =+ "api" :> "v0" :> "bitswap" :> "reprovide"+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Show some diagnostic information on the bitswap agent.+--+-- Response example:+--+-- > {+-- > "ProvideBufLen": "<int>"+-- > "Wantlist": [+-- > "<string>"+-- > ]+-- > "Peers": [+-- > "<string>"+-- > ]+-- > "BlocksReceived": "<uint64>"+-- > "DataReceived": "<uint64>"+-- > "BlocksSent": "<uint64>"+-- > "DataSent": "<uint64>"+-- > "DupBlksReceived": "<uint64>"+-- > "DupDataReceived": "<uint64>"+-- > }+type ApiV0BitswapStat =+ "api" :> "v0" :> "bitswap" :> "stat"+ :> Post '[JSON] Value++-- | Remove a given block from your wantlist.+type ApiV0BitswapUnwant =+ "api" :> "v0" :> "bitswap" :> "unwant"+ -- Key(s) to remove from your wantlist.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Show blocks currently on the wantlist.+--+-- Response example:+--+-- > {+-- > "Keys": [+-- > "<string>"+-- > ]+-- > }+type ApiV0BitswapWantlist =+ "api" :> "v0" :> "bitswap" :> "wantlist"+ -- Specify which peer to show wantlist for. Default: self.+ :> QueryParam "peer" Text+ :> Post '[JSON] Value++-- | Get a raw IPFS block.+type ApiV0BlockGet =+ "api" :> "v0" :> "block" :> "get"+ -- The base58 multihash of an existing block to get.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Store input as an IPFS block.+--+-- Response example:+--+-- > {+-- > "Key": "<string>"+-- > "Size": "<int>"+-- > }+type ApiV0BlockPut =+ "api" :> "v0" :> "block" :> "put"+ :> ReqBody '[MultipartFormData] L.ByteString+ -- cid format for blocks to be created with.+ :> QueryParam "format" Text+ -- multihash hash function. Default: sha2-256.+ :> QueryParam "mhtype" Text+ -- multihash hash length. Default: -1.+ :> QueryParam "mhlen" Int+ :> Post '[JSON] Value++-- | Remove IPFS block(s).+--+-- Response example:+--+-- > {+-- > "Hash": "<string>"+-- > "Error": "<string>"+-- > }+type ApiV0BlockRm =+ "api" :> "v0" :> "block" :> "rm"+ -- Bash58 encoded multihash of block(s) to remove.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Ignore nonexistent blocks.+ :> QueryParam "force" Bool+ -- Write minimal output.+ :> QueryParam "quiet" Bool+ :> Post '[JSON] Value++-- | Print information of a raw IPFS block.+--+-- Response example:+--+-- > {+-- > "Key": "<string>"+-- > "Size": "<int>"+-- > }+type ApiV0BlockStat =+ "api" :> "v0" :> "block" :> "stat"+ -- The base58 multihash of an existing block to stat.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Add default peers to the bootstrap list.+--+-- Response example:+--+-- > {+-- > "Peers": [+-- > "<string>"+-- > ]+-- > }+type ApiV0BootstrapAddDefault =+ "api" :> "v0" :> "bootstrap" :> "add" :> "default"+ :> Post '[JSON] Value++-- | Show peers in the bootstrap list.+--+-- Response example:+--+-- > {+-- > "Peers": [+-- > "<string>"+-- > ]+-- > }+type ApiV0BootstrapList =+ "api" :> "v0" :> "bootstrap" :> "list"+ :> Post '[JSON] Value++-- | Remove all peers from the bootstrap list.+--+-- Response example:+--+-- > {+-- > "Peers": [+-- > "<string>"+-- > ]+-- > }+type ApiV0BootstrapRmAll =+ "api" :> "v0" :> "bootstrap" :> "rm" :> "all"+ :> Post '[JSON] Value++-- | Show IPFS object data.+type ApiV0Cat =+ "api" :> "v0" :> "cat"+ -- The path to the IPFS object(s) to be outputted.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Byte offset to begin reading from.+ :> QueryParam "offset" Int+ -- Maximum number of bytes to read.+ :> QueryParam "length" Int+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | List all available commands.+--+-- Response example:+--+-- > {+-- > "Name": "<string>"+-- > "Subcommands": [+-- > {+-- > "Name": "<string>"+-- > "Subcommands": [+-- > {+-- > "Name": "<string>"+-- > "Subcommands": [+-- > ...+-- > ]+-- > "Options": [+-- > ...+-- > ]+-- > "showOpts": "<bool>"+-- > }+-- > ]+-- > "Options": [+-- > {+-- > "Names": [+-- > ...+-- > ]+-- > }+-- > ]+-- > "showOpts": "<bool>"+-- > }+-- > ]+-- > "Options": [+-- > {+-- > "Names": [+-- > "<string>"+-- > ]+-- > }+-- > ]+-- > "showOpts": "<bool>"+-- > }+type ApiV0Commands =+ "api" :> "v0" :> "commands"+ -- Show command flags.+ :> QueryParam "flags" Bool+ :> Post '[JSON] Value++-- | Open the config file for editing in $EDITOR.+type ApiV0ConfigEdit =+ "api" :> "v0" :> "config" :> "edit"+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Apply profile to config.+type ApiV0ConfigProfileApply =+ "api" :> "v0" :> "config" :> "profile" :> "apply"+ -- The profile to apply to the config.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Replace the config with <file>.+type ApiV0ConfigReplace =+ "api" :> "v0" :> "config" :> "replace"+ :> ReqBody '[MultipartFormData] L.ByteString+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Output config file contents.+type ApiV0ConfigShow =+ "api" :> "v0" :> "config" :> "show"+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Get a dag node from ipfs.+type ApiV0DagGet =+ "api" :> "v0" :> "dag" :> "get"+ -- The object to get+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Add a dag node to ipfs.+--+-- Response example:+--+-- > {+-- > "Cid": "<string>"+-- > }+type ApiV0DagPut =+ "api" :> "v0" :> "dag" :> "put"+ :> ReqBody '[MultipartFormData] L.ByteString+ -- Format that the object will be added as. Default: cbor.+ :> QueryParam "format" Text+ -- Format that the input object will be. Default: json.+ :> QueryParam "input-enc" Text+ -- Pin this object when adding.+ :> QueryParam "pin" Bool+ -- Hash function to use. Default: .+ :> QueryParam "hash" Text+ :> Post '[JSON] Value++-- | Resolve ipld block+--+-- Response example:+--+-- > {+-- > "Cid": "<string>"+-- > "RemPath": "<string>"+-- > }+type ApiV0DagResolve =+ "api" :> "v0" :> "dag" :> "resolve"+ -- The path to resolve+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Query the DHT for all of the multiaddresses associated with a Peer ID.+--+-- Response example:+--+-- > {+-- > "ID": "<string>"+-- > "Type": "<int>"+-- > "Responses": [+-- > {+-- > "ID": "<string>"+-- > "Addrs": [+-- > "<object>"+-- > ]+-- > }+-- > ]+-- > "Extra": "<string>"+-- > }+type ApiV0DhtFindpeer =+ "api" :> "v0" :> "dht" :> "findpeer"+ -- The ID of the peer to search for.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Print extra information.+ :> QueryParam "verbose" Bool+ :> Post '[JSON] Value++-- | Find peers in the DHT that can provide a specific value, given a key.+--+-- Response example:+--+-- > {+-- > "ID": "<string>"+-- > "Type": "<int>"+-- > "Responses": [+-- > {+-- > "ID": "<string>"+-- > "Addrs": [+-- > "<object>"+-- > ]+-- > }+-- > ]+-- > "Extra": "<string>"+-- > }+type ApiV0DhtFindprovs =+ "api" :> "v0" :> "dht" :> "findprovs"+ -- The key to find providers for.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Print extra information.+ :> QueryParam "verbose" Bool+ -- The number of providers to find. Default: 20.+ :> QueryParam "num-providers" Int+ :> Post '[JSON] Value++-- | Given a key, query the DHT for its best value.+--+-- Response example:+--+-- > {+-- > "ID": "<string>"+-- > "Type": "<int>"+-- > "Responses": [+-- > {+-- > "ID": "<string>"+-- > "Addrs": [+-- > "<object>"+-- > ]+-- > }+-- > ]+-- > "Extra": "<string>"+-- > }+type ApiV0DhtGet =+ "api" :> "v0" :> "dht" :> "get"+ -- The key to find a value for.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Print extra information.+ :> QueryParam "verbose" Bool+ :> Post '[JSON] Value++-- | Announce to the network that you are providing given values.+--+-- Response example:+--+-- > {+-- > "ID": "<string>"+-- > "Type": "<int>"+-- > "Responses": [+-- > {+-- > "ID": "<string>"+-- > "Addrs": [+-- > "<object>"+-- > ]+-- > }+-- > ]+-- > "Extra": "<string>"+-- > }+type ApiV0DhtProvide =+ "api" :> "v0" :> "dht" :> "provide"+ -- The key[s] to send provide records for.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Print extra information.+ :> QueryParam "verbose" Bool+ -- Recursively provide entire graph.+ :> QueryParam "recursive" Bool+ :> Post '[JSON] Value++-- | Write a key/value pair to the DHT.+--+-- Response example:+--+-- > {+-- > "ID": "<string>"+-- > "Type": "<int>"+-- > "Responses": [+-- > {+-- > "ID": "<string>"+-- > "Addrs": [+-- > "<object>"+-- > ]+-- > }+-- > ]+-- > "Extra": "<string>"+-- > }+type ApiV0DhtPut =+ "api" :> "v0" :> "dht" :> "put"+ -- The key to store the value at.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- The value to store.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Print extra information.+ :> QueryParam "verbose" Bool+ :> Post '[JSON] Value++-- | Find the closest Peer IDs to a given Peer ID by querying the DHT.+--+-- Response example:+--+-- > {+-- > "ID": "<string>"+-- > "Type": "<int>"+-- > "Responses": [+-- > {+-- > "ID": "<string>"+-- > "Addrs": [+-- > "<object>"+-- > ]+-- > }+-- > ]+-- > "Extra": "<string>"+-- > }+type ApiV0DhtQuery =+ "api" :> "v0" :> "dht" :> "query"+ -- The peerID to run the query against.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Print extra information.+ :> QueryParam "verbose" Bool+ :> Post '[JSON] Value++-- | Clear inactive requests from the log.+type ApiV0DiagCmdsClear =+ "api" :> "v0" :> "diag" :> "cmds" :> "clear"+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Set how long to keep inactive requests in the log.+type ApiV0DiagCmdsSetTime =+ "api" :> "v0" :> "diag" :> "cmds" :> "set-time"+ -- Time to keep inactive requests in log.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Print system diagnostic information.+type ApiV0DiagSys =+ "api" :> "v0" :> "diag" :> "sys"+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Resolve DNS links.+--+-- Response example:+--+-- > {+-- > "Path": "<string>"+-- > }+type ApiV0Dns =+ "api" :> "v0" :> "dns"+ -- The domain-name name to resolve.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Resolve until the result is not a DNS link.+ :> QueryParam "recursive" Bool+ :> Post '[JSON] Value++-- | List directory contents for Unix filesystem objects.+--+-- Response example:+--+-- > {+-- > "Arguments": {+-- > "<string>": "<string>"+-- > }+-- > "Objects": {+-- > "<string>": {+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > "Type": "<string>"+-- > "Links": [+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > "Type": "<string>"+-- > }+-- > ]+-- > }+-- > }+-- > }+type ApiV0FileLs =+ "api" :> "v0" :> "file" :> "ls"+ -- The path to the IPFS object(s) to list links from.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Change the cid version or hash function of the root node of a given path.+type ApiV0FilesChcid =+ "api" :> "v0" :> "files" :> "chcid"+ -- Path to change. Default: '/'.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Cid version to use. (experimental).+ :> QueryParam "cid-version" Int+ -- Hash function to use. Will set Cid version to 1 if used. (experimental).+ :> QueryParam "hash" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Copy files into mfs.+type ApiV0FilesCp =+ "api" :> "v0" :> "files" :> "cp"+ -- Source object to copy.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Destination to copy object to.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Flush a given path's data to disk.+type ApiV0FilesFlush =+ "api" :> "v0" :> "files" :> "flush"+ -- Path to flush. Default: '/'.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | List directories in the local mutable namespace.+--+-- Response example:+--+-- > {+-- > "Entries": [+-- > {+-- > "Name": "<string>"+-- > "Type": "<int>"+-- > "Size": "<int64>"+-- > "Hash": "<string>"+-- > }+-- > ]+-- > }+type ApiV0FilesLs =+ "api" :> "v0" :> "files" :> "ls"+ -- Path to show listing for. Defaults to '/'.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Use long listing format.+ :> QueryParam "l" Bool+ :> Post '[JSON] Value++-- | Make directories.+type ApiV0FilesMkdir =+ "api" :> "v0" :> "files" :> "mkdir"+ -- Path to dir to make.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- No error if existing, make parent directories as needed.+ :> QueryParam "parents" Bool+ -- Cid version to use. (experimental).+ :> QueryParam "cid-version" Int+ -- Hash function to use. Will set Cid version to 1 if used. (experimental).+ :> QueryParam "hash" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Move files.+type ApiV0FilesMv =+ "api" :> "v0" :> "files" :> "mv"+ -- Source file to move.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Destination path for file to be moved to.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Read a file in a given mfs.+type ApiV0FilesRead =+ "api" :> "v0" :> "files" :> "read"+ -- Path to file to be read.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Byte offset to begin reading from.+ :> QueryParam "offset" Int+ -- Maximum number of bytes to read.+ :> QueryParam "count" Int+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Remove a file.+type ApiV0FilesRm =+ "api" :> "v0" :> "files" :> "rm"+ -- File to remove.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Recursively remove directories.+ :> QueryParam "recursive" Bool+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Display file status.+--+-- Response example:+--+-- > {+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > "CumulativeSize": "<uint64>"+-- > "Blocks": "<int>"+-- > "Type": "<string>"+-- > "WithLocality": "<bool>"+-- > "Local": "<bool>"+-- > "SizeLocal": "<uint64>"+-- > }+type ApiV0FilesStat =+ "api" :> "v0" :> "files" :> "stat"+ -- Path to node to stat.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Print statistics in given format. Allowed tokens: <hash> <size> <cumulsize>+ -- <type> <childs>. Conflicts with other format options. Default: <hash> Size:+ -- <size> CumulativeSize: <cumulsize> ChildBlocks: <childs> Type: <type>.+ :> QueryParam "format" Text+ -- Print only hash. Implies '--format=<hash>'. Conflicts with other format options.+ :> QueryParam "hash" Bool+ -- Print only size. Implies '--format=<cumulsize>'. Conflicts with other format+ -- options.+ :> QueryParam "size" Bool+ -- Compute the amount of the dag that is local, and if possible the total size.+ :> QueryParam "with-local" Bool+ :> Post '[JSON] Value++-- | Write to a mutable file in a given filesystem.+type ApiV0FilesWrite =+ "api" :> "v0" :> "files" :> "write"+ -- Path to write to.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> ReqBody '[MultipartFormData] L.ByteString+ -- Byte offset to begin writing at.+ :> QueryParam "offset" Int+ -- Create the file if it does not exist.+ :> QueryParam "create" Bool+ -- Truncate the file to size zero before writing.+ :> QueryParam "truncate" Bool+ -- Maximum number of bytes to read.+ :> QueryParam "count" Int+ -- Use raw blocks for newly created leaf nodes. (experimental).+ :> QueryParam "raw-leaves" Bool+ -- Cid version to use. (experimental).+ :> QueryParam "cid-version" Int+ -- Hash function to use. Will set Cid version to 1 if used. (experimental).+ :> QueryParam "hash" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | List blocks that are both in the filestore and standard block storage.+--+-- Response example:+--+-- > {+-- > "Ref": "<string>"+-- > "Err": "<string>"+-- > }+type ApiV0FilestoreDups =+ "api" :> "v0" :> "filestore" :> "dups"+ :> Post '[JSON] Value++-- | List objects in filestore.+--+-- Response example:+--+-- > {+-- > "Status": "<int32>"+-- > "ErrorMsg": "<string>"+-- > "Key": "<string>"+-- > "FilePath": "<string>"+-- > "Offset": "<uint64>"+-- > "Size": "<uint64>"+-- > }+type ApiV0FilestoreLs =+ "api" :> "v0" :> "filestore" :> "ls"+ -- Cid of objects to list.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- sort the results based on the path of the backing file.+ :> QueryParam "file-order" Bool+ :> Post '[JSON] Value++-- | Verify objects in filestore.+--+-- Response example:+--+-- > {+-- > "Status": "<int32>"+-- > "ErrorMsg": "<string>"+-- > "Key": "<string>"+-- > "FilePath": "<string>"+-- > "Offset": "<uint64>"+-- > "Size": "<uint64>"+-- > }+type ApiV0FilestoreVerify =+ "api" :> "v0" :> "filestore" :> "verify"+ -- Cid of objects to verify.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- verify the objects based on the order of the backing file.+ :> QueryParam "file-order" Bool+ :> Post '[JSON] Value++-- | Download IPFS objects.+type ApiV0Get =+ "api" :> "v0" :> "get"+ -- The path to the IPFS object(s) to be outputted.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- The path where the output should be stored.+ :> QueryParam "output" Text+ -- Output a TAR archive.+ :> QueryParam "archive" Bool+ -- Compress the output with GZIP compression.+ :> QueryParam "compress" Bool+ -- The level of compression (1-9).+ :> QueryParam "compression-level" Int+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Show ipfs node id info.+--+-- Response example:+--+-- > {+-- > "ID": "<string>"+-- > "PublicKey": "<string>"+-- > "Addresses": [+-- > "<string>"+-- > ]+-- > "AgentVersion": "<string>"+-- > "ProtocolVersion": "<string>"+-- > }+type ApiV0Id =+ "api" :> "v0" :> "id"+ -- Peer.ID of node to look up.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Optional output format.+ :> QueryParam "format" Text+ :> Post '[JSON] Value++-- | Create a new keypair+--+-- Response example:+--+-- > {+-- > "Name": "<string>"+-- > "Id": "<string>"+-- > }+type ApiV0KeyGen =+ "api" :> "v0" :> "key" :> "gen"+ -- name of key to create+ :> QueryParam' '[Required, Strict] "arg" Text+ -- type of the key to create [rsa, ed25519].+ :> QueryParam "type" Text+ -- size of the key to generate.+ :> QueryParam "size" Int+ :> Post '[JSON] Value++-- | List all local keypairs+--+-- Response example:+--+-- > {+-- > "Keys": [+-- > {+-- > "Name": "<string>"+-- > "Id": "<string>"+-- > }+-- > ]+-- > }+type ApiV0KeyList =+ "api" :> "v0" :> "key" :> "list"+ -- Show extra information about keys.+ :> QueryParam "l" Bool+ :> Post '[JSON] Value++-- | Rename a keypair+--+-- Response example:+--+-- > {+-- > "Was": "<string>"+-- > "Now": "<string>"+-- > "Id": "<string>"+-- > "Overwrite": "<bool>"+-- > }+type ApiV0KeyRename =+ "api" :> "v0" :> "key" :> "rename"+ -- name of key to rename+ :> QueryParam' '[Required, Strict] "arg" Text+ -- new name of the key+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Allow to overwrite an existing key.+ :> QueryParam "force" Bool+ :> Post '[JSON] Value++-- | Remove a keypair+--+-- Response example:+--+-- > {+-- > "Keys": [+-- > {+-- > "Name": "<string>"+-- > "Id": "<string>"+-- > }+-- > ]+-- > }+type ApiV0KeyRm =+ "api" :> "v0" :> "key" :> "rm"+ -- names of keys to remove+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Show extra information about keys.+ :> QueryParam "l" Bool+ :> Post '[JSON] Value++-- | Change the logging level.+--+-- Response example:+--+-- > {+-- > "Message": "<string>"+-- > }+type ApiV0LogLevel =+ "api" :> "v0" :> "log" :> "level"+ -- The subsystem logging identifier. Use 'all' for all subsystems.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- The log level, with 'debug' the most verbose and 'critical' the least verbose.+ -- One of: debug, info, warning, error, critical.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | List the logging subsystems.+--+-- Response example:+--+-- > {+-- > "Strings": [+-- > "<string>"+-- > ]+-- > }+type ApiV0LogLs =+ "api" :> "v0" :> "log" :> "ls"+ :> Post '[JSON] Value++-- | Read the event log.+type ApiV0LogTail =+ "api" :> "v0" :> "log" :> "tail"+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | List directory contents for Unix filesystem objects.+--+-- Response example:+--+-- > {+-- > "Objects": [+-- > {+-- > "Hash": "<string>"+-- > "Links": [+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > "Type": "<int32>"+-- > }+-- > ]+-- > }+-- > ]+-- > }+type ApiV0Ls =+ "api" :> "v0" :> "ls"+ -- The path to the IPFS object(s) to list links from.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Print table headers (Hash, Size, Name).+ :> QueryParam "headers" Bool+ -- Resolve linked objects to find out their types. Default: true.+ :> QueryParam "resolve-type" Bool+ :> Post '[JSON] Value++-- | Mounts IPFS to the filesystem (read-only).+--+-- Response example:+--+-- > {+-- > "IPFS": "<string>"+-- > "IPNS": "<string>"+-- > "FuseAllowOther": "<bool>"+-- > }+type ApiV0Mount =+ "api" :> "v0" :> "mount"+ -- The path where IPFS should be mounted.+ :> QueryParam "ipfs-path" Text+ -- The path where IPNS should be mounted.+ :> QueryParam "ipns-path" Text+ :> Post '[JSON] Value++-- | Publish IPNS names.+--+-- Response example:+--+-- > {+-- > "Name": "<string>"+-- > "Value": "<string>"+-- > }+type ApiV0NamePublish =+ "api" :> "v0" :> "name" :> "publish"+ -- ipfs path of the object to be published.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Resolve given path before publishing. Default: true.+ :> QueryParam "resolve" Bool+ -- Time duration that the record will be valid for. Default: 24h. This accepts+ -- durations such as "300s", "1.5h" or "2h45m". Valid time units are "ns", "us" (or+ -- "µs"), "ms", "s", "m", "h".+ :> QueryParam "lifetime" Text+ -- Time duration this record should be cached for (caution: experimental).+ :> QueryParam "ttl" Text+ -- Name of the key to be used or a valid PeerID, as listed by 'ipfs key list -l'.+ -- Default: Default: self..+ :> QueryParam "key" Text+ :> Post '[JSON] Value++-- | Cancel a name subscription+--+-- Response example:+--+-- > {+-- > "Canceled": "<bool>"+-- > }+type ApiV0NamePubsubCancel =+ "api" :> "v0" :> "name" :> "pubsub" :> "cancel"+ -- Name to cancel the subscription for.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Query the state of IPNS pubsub+--+-- Response example:+--+-- > {+-- > "Enabled": "<bool>"+-- > }+type ApiV0NamePubsubState =+ "api" :> "v0" :> "name" :> "pubsub" :> "state"+ :> Post '[JSON] Value++-- | Show current name subscriptions+--+-- Response example:+--+-- > {+-- > "Strings": [+-- > "<string>"+-- > ]+-- > }+type ApiV0NamePubsubSubs =+ "api" :> "v0" :> "name" :> "pubsub" :> "subs"+ :> Post '[JSON] Value++-- | Resolve IPNS names.+--+-- Response example:+--+-- > {+-- > "Path": "<string>"+-- > }+type ApiV0NameResolve =+ "api" :> "v0" :> "name" :> "resolve"+ -- The IPNS name to resolve. Defaults to your node's peerID.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Resolve until the result is not an IPNS name.+ :> QueryParam "recursive" Bool+ -- Do not use cached entries.+ :> QueryParam "nocache" Bool+ -- Number of records to request for DHT resolution.+ :> QueryParam "dht-record-count" Word+ -- Max time to collect values during DHT resolution eg "30s". Pass 0 for no+ -- timeout.+ :> QueryParam "dht-timeout" Text+ :> Post '[JSON] Value++-- | Output the raw bytes of an IPFS object.+type ApiV0ObjectData =+ "api" :> "v0" :> "object" :> "data"+ -- Key of the object to retrieve, in base58-encoded multihash format.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Display the diff between two ipfs objects.+--+-- Response example:+--+-- > {+-- > "Changes": [+-- > {+-- > "Type": "<int>"+-- > "Path": "<string>"+-- > "Before": "<string>"+-- > "After": "<string>"+-- > }+-- > ]+-- > }+type ApiV0ObjectDiff =+ "api" :> "v0" :> "object" :> "diff"+ -- Object to diff against.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Object to diff.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Print extra information.+ :> QueryParam "verbose" Bool+ :> Post '[JSON] Value++-- | Get and serialize the DAG node named by <key>.+--+-- Response example:+--+-- > {+-- > "Links": [+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > }+-- > ]+-- > "Data": "<string>"+-- > }+type ApiV0ObjectGet =+ "api" :> "v0" :> "object" :> "get"+ -- Key of the object to retrieve, in base58-encoded multihash format.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Output the links pointed to by the specified object.+--+-- Response example:+--+-- > {+-- > "Hash": "<string>"+-- > "Links": [+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > }+-- > ]+-- > }+type ApiV0ObjectLinks =+ "api" :> "v0" :> "object" :> "links"+ -- Key of the object to retrieve, in base58-encoded multihash format.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Print table headers (Hash, Size, Name).+ :> QueryParam "headers" Bool+ :> Post '[JSON] Value++-- | Create a new object from an ipfs template.+--+-- Response example:+--+-- > {+-- > "Hash": "<string>"+-- > "Links": [+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > }+-- > ]+-- > }+type ApiV0ObjectNew =+ "api" :> "v0" :> "object" :> "new"+ -- Template to use. Optional.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Add a link to a given object.+--+-- Response example:+--+-- > {+-- > "Hash": "<string>"+-- > "Links": [+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > }+-- > ]+-- > }+type ApiV0ObjectPatchAddLink =+ "api" :> "v0" :> "object" :> "patch" :> "add-link"+ -- The hash of the node to modify.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Name of link to create.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- IPFS object to add link to.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Create intermediary nodes.+ :> QueryParam "create" Bool+ :> Post '[JSON] Value++-- | Append data to the data segment of a dag node.+--+-- Response example:+--+-- > {+-- > "Hash": "<string>"+-- > "Links": [+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > }+-- > ]+-- > }+type ApiV0ObjectPatchAppendData =+ "api" :> "v0" :> "object" :> "patch" :> "append-data"+ -- The hash of the node to modify.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> ReqBody '[MultipartFormData] L.ByteString+ :> Post '[JSON] Value++-- | Remove a link from an object.+--+-- Response example:+--+-- > {+-- > "Hash": "<string>"+-- > "Links": [+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > }+-- > ]+-- > }+type ApiV0ObjectPatchRmLink =+ "api" :> "v0" :> "object" :> "patch" :> "rm-link"+ -- The hash of the node to modify.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Name of the link to remove.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Set the data field of an IPFS object.+--+-- Response example:+--+-- > {+-- > "Hash": "<string>"+-- > "Links": [+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > }+-- > ]+-- > }+type ApiV0ObjectPatchSetData =+ "api" :> "v0" :> "object" :> "patch" :> "set-data"+ -- The hash of the node to modify.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> ReqBody '[MultipartFormData] L.ByteString+ :> Post '[JSON] Value++-- | Store input as a DAG object, print its key.+--+-- Response example:+--+-- > {+-- > "Hash": "<string>"+-- > "Links": [+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Size": "<uint64>"+-- > }+-- > ]+-- > }+type ApiV0ObjectPut =+ "api" :> "v0" :> "object" :> "put"+ :> ReqBody '[MultipartFormData] L.ByteString+ -- Encoding type of input data. One of: {"protobuf", "json"}. Default: json.+ :> QueryParam "inputenc" Text+ -- Encoding type of the data field, either "text" or "base64". Default: text.+ :> QueryParam "datafieldenc" Text+ -- Pin this object when adding.+ :> QueryParam "pin" Bool+ -- Write minimal output.+ :> QueryParam "quiet" Bool+ :> Post '[JSON] Value++-- | Get stats for the DAG node named by <key>.+--+-- Response example:+--+-- > {+-- > "Hash": "<string>"+-- > "NumLinks": "<int>"+-- > "BlockSize": "<int>"+-- > "LinksSize": "<int>"+-- > "DataSize": "<int>"+-- > "CumulativeSize": "<int>"+-- > }+type ApiV0ObjectStat =+ "api" :> "v0" :> "object" :> "stat"+ -- Key of the object to retrieve, in base58-encoded multihash format.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Close active p2p listener.+type ApiV0P2pListenerClose =+ "api" :> "v0" :> "p2p" :> "listener" :> "close"+ -- P2P listener protocol+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Close all listeners.+ :> QueryParam "all" Bool+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | List active p2p listeners.+--+-- Response example:+--+-- > {+-- > "Listeners": [+-- > {+-- > "Protocol": "<string>"+-- > "Address": "<string>"+-- > }+-- > ]+-- > }+type ApiV0P2pListenerLs =+ "api" :> "v0" :> "p2p" :> "listener" :> "ls"+ -- Print table headers (HandlerID, Protocol, Local, Remote).+ :> QueryParam "headers" Bool+ :> Post '[JSON] Value++-- | Forward p2p connections to a network multiaddr.+type ApiV0P2pListenerOpen =+ "api" :> "v0" :> "p2p" :> "listener" :> "open"+ -- Protocol identifier.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Request handling application address.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Close active p2p stream.+type ApiV0P2pStreamClose =+ "api" :> "v0" :> "p2p" :> "stream" :> "close"+ -- Stream HandlerID+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Close all streams.+ :> QueryParam "all" Bool+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Dial to a p2p listener.+type ApiV0P2pStreamDial =+ "api" :> "v0" :> "p2p" :> "stream" :> "dial"+ -- Remote peer to connect to+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Protocol identifier.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Address to listen for connection/s (default: /ip4/127.0.0.1/tcp/0).+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | List active p2p streams.+--+-- Response example:+--+-- > {+-- > "Streams": [+-- > {+-- > "HandlerID": "<string>"+-- > "Protocol": "<string>"+-- > "LocalPeer": "<string>"+-- > "LocalAddress": "<string>"+-- > "RemotePeer": "<string>"+-- > "RemoteAddress": "<string>"+-- > }+-- > ]+-- > }+type ApiV0P2pStreamLs =+ "api" :> "v0" :> "p2p" :> "stream" :> "ls"+ -- Print table headers (HagndlerID, Protocol, Local, Remote).+ :> QueryParam "headers" Bool+ :> Post '[JSON] Value++-- | Pin objects to local storage.+--+-- Response example:+--+-- > {+-- > "Pins": [+-- > "<string>"+-- > ]+-- > "Progress": "<int>"+-- > }+type ApiV0PinAdd =+ "api" :> "v0" :> "pin" :> "add"+ -- Path to object(s) to be pinned.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Recursively pin the object linked to by the specified object(s). Default: true.+ :> QueryParam "recursive" Bool+ -- Show progress.+ :> QueryParam "progress" Bool+ :> Post '[JSON] Value++-- | List objects pinned to local storage.+--+-- Response example:+--+-- > {+-- > "Keys": {+-- > "<string>": {+-- > "Type": "<string>"+-- > }+-- > }+-- > }+type ApiV0PinLs =+ "api" :> "v0" :> "pin" :> "ls"+ -- Path to object(s) to be listed.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- The type of pinned keys to list. Can be "direct", "indirect", "recursive", or+ -- "all". Default: all.+ :> QueryParam "type" Text+ -- Write just hashes of objects.+ :> QueryParam "quiet" Bool+ :> Post '[JSON] Value++-- | Remove pinned objects from local storage.+--+-- Response example:+--+-- > {+-- > "Pins": [+-- > "<string>"+-- > ]+-- > }+type ApiV0PinRm =+ "api" :> "v0" :> "pin" :> "rm"+ -- Path to object(s) to be unpinned.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Recursively unpin the object linked to by the specified object(s). Default:+ -- true.+ :> QueryParam "recursive" Bool+ :> Post '[JSON] Value++-- | Update a recursive pin+--+-- Response example:+--+-- > {+-- > "Pins": [+-- > "<string>"+-- > ]+-- > }+type ApiV0PinUpdate =+ "api" :> "v0" :> "pin" :> "update"+ -- Path to old object.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Path to new object to be pinned.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Remove the old pin. Default: true.+ :> QueryParam "unpin" Bool+ :> Post '[JSON] Value++-- | Verify that recursive pins are complete.+--+-- Response example:+--+-- > {+-- > "Cid": "<string>"+-- > "PinStatus": {+-- > "Ok": "<bool>"+-- > "BadNodes": [+-- > {+-- > "Cid": "<string>"+-- > "Err": "<string>"+-- > }+-- > ]+-- > }+-- > }+type ApiV0PinVerify =+ "api" :> "v0" :> "pin" :> "verify"+ -- Also write the hashes of non-broken pins.+ :> QueryParam "verbose" Bool+ -- Write just hashes of broken pins.+ :> QueryParam "quiet" Bool+ :> Post '[JSON] Value++-- | Send echo request packets to IPFS hosts.+--+-- Response example:+--+-- > {+-- > "Success": "<bool>"+-- > "Time": "<int64>"+-- > "Text": "<string>"+-- > }+type ApiV0Ping =+ "api" :> "v0" :> "ping"+ -- ID of peer to be pinged.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Number of ping messages to send. Default: 10.+ :> QueryParam "count" Int+ :> Post '[JSON] Value++-- | List subscribed topics by name.+--+-- Response example:+--+-- > {+-- > "Strings": [+-- > "<string>"+-- > ]+-- > }+type ApiV0PubsubLs =+ "api" :> "v0" :> "pubsub" :> "ls"+ :> Post '[JSON] Value++-- | List peers we are currently pubsubbing with.+--+-- Response example:+--+-- > {+-- > "Strings": [+-- > "<string>"+-- > ]+-- > }+type ApiV0PubsubPeers =+ "api" :> "v0" :> "pubsub" :> "peers"+ -- topic to list connected peers of+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Publish a message to a given pubsub topic.+type ApiV0PubsubPub =+ "api" :> "v0" :> "pubsub" :> "pub"+ -- Topic to publish to.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Payload of message to publish.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Subscribe to messages on a given topic.+--+-- Response example:+--+-- > {+-- > "Message": {+-- > "From": [+-- > "<uint8>"+-- > ]+-- > "Data": [+-- > "<uint8>"+-- > ]+-- > "Seqno": [+-- > "<uint8>"+-- > ]+-- > "TopicIDs": [+-- > "<string>"+-- > ]+-- > "XXX_unrecognized": [+-- > "<uint8>"+-- > ]+-- > }+-- > }+type ApiV0PubsubSub =+ "api" :> "v0" :> "pubsub" :> "sub"+ -- String name of topic to subscribe to.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- try to discover other peers subscribed to the same topic.+ :> QueryParam "discover" Bool+ :> Post '[JSON] Value++-- | List all local references.+--+-- Response example:+--+-- > {+-- > "Ref": "<string>"+-- > "Err": "<string>"+-- > }+type ApiV0RefsLocal =+ "api" :> "v0" :> "refs" :> "local"+ :> Post '[JSON] Value++-- | Remove repo lockfiles.+--+-- Response example:+--+-- > {+-- > "Message": "<string>"+-- > }+type ApiV0RepoFsck =+ "api" :> "v0" :> "repo" :> "fsck"+ :> Post '[JSON] Value++-- | Perform a garbage collection sweep on the repo.+--+-- Response example:+--+-- > {+-- > "Key": "<string>"+-- > "Error": "<string>"+-- > }+type ApiV0RepoGc =+ "api" :> "v0" :> "repo" :> "gc"+ -- Stream errors.+ :> QueryParam "stream-errors" Bool+ -- Write minimal output.+ :> QueryParam "quiet" Bool+ :> Post '[JSON] Value++-- | Get stats for the currently used repo.+--+-- Response example:+--+-- > {+-- > "NumObjects": "<uint64>"+-- > "RepoSize": "<uint64>"+-- > "RepoPath": "<string>"+-- > "Version": "<string>"+-- > "StorageMax": "<uint64>"+-- > }+type ApiV0RepoStat =+ "api" :> "v0" :> "repo" :> "stat"+ -- Output RepoSize in MiB.+ :> QueryParam "human" Bool+ :> Post '[JSON] Value++-- | Verify all blocks in repo are not corrupted.+--+-- Response example:+--+-- > {+-- > "Msg": "<string>"+-- > "Progress": "<int>"+-- > }+type ApiV0RepoVerify =+ "api" :> "v0" :> "repo" :> "verify"+ :> Post '[JSON] Value++-- | Show the repo version.+--+-- Response example:+--+-- > {+-- > "Version": "<string>"+-- > }+type ApiV0RepoVersion =+ "api" :> "v0" :> "repo" :> "version"+ -- Write minimal output.+ :> QueryParam "quiet" Bool+ :> Post '[JSON] Value++-- | Resolve the value of names to IPFS.+--+-- Response example:+--+-- > {+-- > "Path": "<string>"+-- > }+type ApiV0Resolve =+ "api" :> "v0" :> "resolve"+ -- The name to resolve.+ :> QueryParam' '[Required, Strict] "arg" Text+ -- Resolve until the result is an IPFS name.+ :> QueryParam "recursive" Bool+ -- Number of records to request for DHT resolution.+ :> QueryParam "dht-record-count" Word+ -- Max time to collect values during DHT resolution eg "30s". Pass 0 for no+ -- timeout.+ :> QueryParam "dht-timeout" Text+ :> Post '[JSON] Value++-- | Shut down the ipfs daemon+type ApiV0Shutdown =+ "api" :> "v0" :> "shutdown"+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Show some diagnostic information on the bitswap agent.+--+-- Response example:+--+-- > {+-- > "ProvideBufLen": "<int>"+-- > "Wantlist": [+-- > "<string>"+-- > ]+-- > "Peers": [+-- > "<string>"+-- > ]+-- > "BlocksReceived": "<uint64>"+-- > "DataReceived": "<uint64>"+-- > "BlocksSent": "<uint64>"+-- > "DataSent": "<uint64>"+-- > "DupBlksReceived": "<uint64>"+-- > "DupDataReceived": "<uint64>"+-- > }+type ApiV0StatsBitswap =+ "api" :> "v0" :> "stats" :> "bitswap"+ :> Post '[JSON] Value++-- | Print ipfs bandwidth information.+--+-- Response example:+--+-- > {+-- > "TotalIn": "<int64>"+-- > "TotalOut": "<int64>"+-- > "RateIn": "<float64>"+-- > "RateOut": "<float64>"+-- > }+type ApiV0StatsBw =+ "api" :> "v0" :> "stats" :> "bw"+ -- Specify a peer to print bandwidth for.+ :> QueryParam "peer" Text+ -- Specify a protocol to print bandwidth for.+ :> QueryParam "proto" Text+ -- Print bandwidth at an interval.+ :> QueryParam "poll" Bool+ -- Time interval to wait between updating output, if 'poll' is true. This accepts+ -- durations such as "300s", "1.5h" or "2h45m". Valid time units are: "ns", "us"+ -- (or "µs"), "ms", "s", "m", "h". Default: 1s.+ :> QueryParam "interval" Text+ :> Post '[JSON] Value++-- | Get stats for the currently used repo.+--+-- Response example:+--+-- > {+-- > "NumObjects": "<uint64>"+-- > "RepoSize": "<uint64>"+-- > "RepoPath": "<string>"+-- > "Version": "<string>"+-- > "StorageMax": "<uint64>"+-- > }+type ApiV0StatsRepo =+ "api" :> "v0" :> "stats" :> "repo"+ -- Output RepoSize in MiB.+ :> QueryParam "human" Bool+ :> Post '[JSON] Value++-- | List interface listening addresses.+--+-- Response example:+--+-- > {+-- > "Strings": [+-- > "<string>"+-- > ]+-- > }+type ApiV0SwarmAddrsListen =+ "api" :> "v0" :> "swarm" :> "addrs" :> "listen"+ :> Post '[JSON] Value++-- | List local addresses.+--+-- Response example:+--+-- > {+-- > "Strings": [+-- > "<string>"+-- > ]+-- > }+type ApiV0SwarmAddrsLocal =+ "api" :> "v0" :> "swarm" :> "addrs" :> "local"+ -- Show peer ID in addresses.+ :> QueryParam "id" Bool+ :> Post '[JSON] Value++-- | Open connection to a given address.+--+-- Response example:+--+-- > {+-- > "Strings": [+-- > "<string>"+-- > ]+-- > }+type ApiV0SwarmConnect =+ "api" :> "v0" :> "swarm" :> "connect"+ -- Address of peer to connect to.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Close connection to a given address.+--+-- Response example:+--+-- > {+-- > "Strings": [+-- > "<string>"+-- > ]+-- > }+type ApiV0SwarmDisconnect =+ "api" :> "v0" :> "swarm" :> "disconnect"+ -- Address of peer to disconnect from.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Add an address filter.+--+-- Response example:+--+-- > {+-- > "Strings": [+-- > "<string>"+-- > ]+-- > }+type ApiV0SwarmFiltersAdd =+ "api" :> "v0" :> "swarm" :> "filters" :> "add"+ -- Multiaddr to filter.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | Remove an address filter.+--+-- Response example:+--+-- > {+-- > "Strings": [+-- > "<string>"+-- > ]+-- > }+type ApiV0SwarmFiltersRm =+ "api" :> "v0" :> "swarm" :> "filters" :> "rm"+ -- Multiaddr filter to remove.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Post '[JSON] Value++-- | List peers with open connections.+--+-- Response example:+--+-- > {+-- > "Peers": [+-- > {+-- > "Addr": "<string>"+-- > "Peer": "<string>"+-- > "Latency": "<string>"+-- > "Muxer": "<string>"+-- > "Streams": [+-- > {+-- > "Protocol": "<string>"+-- > }+-- > ]+-- > }+-- > ]+-- > }+type ApiV0SwarmPeers =+ "api" :> "v0" :> "swarm" :> "peers"+ -- display all extra information.+ :> QueryParam "verbose" Bool+ -- Also list information about open streams for each peer.+ :> QueryParam "streams" Bool+ -- Also list information about latency to each peer.+ :> QueryParam "latency" Bool+ :> Post '[JSON] Value++-- | Import a tar file into ipfs.+--+-- Response example:+--+-- > {+-- > "Name": "<string>"+-- > "Hash": "<string>"+-- > "Bytes": "<int64>"+-- > "Size": "<string>"+-- > }+type ApiV0TarAdd =+ "api" :> "v0" :> "tar" :> "add"+ :> ReqBody '[MultipartFormData] L.ByteString+ :> Post '[JSON] Value++-- | Export a tar file from IPFS.+type ApiV0TarCat =+ "api" :> "v0" :> "tar" :> "cat"+ -- ipfs path of archive to export.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- |+type ApiV0Update =+ "api" :> "v0" :> "update"+ -- Arguments for subcommand.+ :> QueryParam' '[Required, Strict] "arg" Text+ :> Stream 'POST 200 NoFraming PlainText (SourceIO ByteString)++-- | Show ipfs version information.+--+-- Response example:+--+-- > {+-- > "Version": "<string>"+-- > "Commit": "<string>"+-- > "Repo": "<string>"+-- > "System": "<string>"+-- > "Golang": "<string>"+-- > }+type ApiV0Version =+ "api" :> "v0" :> "version"+ -- Only show the version number.+ :> QueryParam "number" Bool+ -- Show the commit hash.+ :> QueryParam "commit" Bool+ -- Show repo version.+ :> QueryParam "repo" Bool+ -- Show all version information.+ :> QueryParam "all" Bool+ :> Post '[JSON] Value
+ ipfs-api.cabal view
@@ -0,0 +1,58 @@+cabal-version: 2.2+build-type: Simple++name: ipfs-api+version: 0.1.0.0+synopsis: Auto-generated IPFS HTTP API+homepage: https://github.com/oscoin/ipfs+bug-reports: https://github.com/oscoin/ipfs/issues+license: BSD-3-Clause+license-file: LICENSE+author: Kim Altintop+maintainer: Kim Altintop <kim@monadic.xyz>, Monadic Team <team@monadic.xyz>+copyright: 2018 Monadic GmbH++category: Network, Web++extra-source-files:+ CHANGELOG.md+ , README.md++source-repository head+ type: git+ location: https://github.com/oscoin/ipfs++common common+ default-language: Haskell2010+ ghc-options:+ -Wall+ -Wcompat+ -Wincomplete-uni-patterns+ -Wincomplete-record-updates+ -Wredundant-constraints+ -fprint-expanded-synonyms+ -funbox-small-strict-fields+ default-extensions:+ DeriveGeneric+ LambdaCase+ MultiWayIf+ NamedFieldPuns+ RecordWildCards+ StrictData+ TupleSections++library+ import: common+ hs-source-dirs: gen, src+ exposed-modules:+ Network.IPFS.API+ Network.IPFS.API.Types++ build-depends:+ aeson+ , base >= 4.9 && < 5+ , bytestring+ , http-media+ , http-types+ , servant+ , text
+ src/Network/IPFS/API/Types.hs view
@@ -0,0 +1,43 @@+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}++{-# OPTIONS_GHC -fno-warn-orphans #-}++module Network.IPFS.API.Types (MultipartFormData) where++import Data.ByteString (ByteString)+import Data.ByteString.Builder (Builder)+import qualified Data.ByteString.Builder as Builder+import Data.ByteString.Lazy (toStrict)+import qualified Data.ByteString.Lazy as L (ByteString)+import Network.HTTP.Media ((//), (/:))+import Servant.API++-- | Workaround for the lack of client support of \"servant-multipart\"+data MultipartFormData++instance Accept MultipartFormData where+ contentType _ = "multipart" // "form-data" /: ("boundary", boundary)++instance MimeRender MultipartFormData ByteString where+ mimeRender _ = render . Builder.byteString++instance MimeRender MultipartFormData L.ByteString where+ mimeRender _ = render . Builder.lazyByteString++instance MimeUnrender PlainText ByteString where+ mimeUnrender _ = Right . toStrict++boundary :: ByteString+boundary = "----------------------e46851f865c18c82"++render :: Builder -> L.ByteString+render bs = Builder.toLazyByteString $+ dash2 <> boundary' <> rn+ <> "Content-Disposition: form-data; name=\"files\"" <> rn <> rn+ <> bs <> rn+ <> dash2 <> boundary' <> dash2 <> rn+ where+ dash2 = Builder.byteString "--"+ rn = Builder.byteString "\r\n"+ boundary' = Builder.byteString boundary