packages feed

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 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