defmodule MyspaceIPFS.Block do @moduledoc """ MyspaceIPFS.Block is where the block commands of the IPFS API reside. """ import MyspaceIPFS.Api import MyspaceIPFS.Utils @typep okmapped :: MySpaceIPFS.okmapped() @typep opts :: MySpaceIPFS.opts() @typep cid :: MySpaceIPFS.cid() @typep fspath :: MySpaceIPFS.fspath() @doc """ Get a raw IPFS block. ## Parameters https://docs.ipfs.tech/reference/kubo/rpc/#api-v0-block-get `cid` - The CID of the block to get. """ @spec get(cid) :: okmapped() def get(cid) do post_query("/block/get?arg=" <> cid) |> handle_plain_response() end @doc """ Put file as an IPFS block. ## Parameters `fspath` - The path to the file to be stored as a block. ## Options https://docs.ipfs.tech/reference/kubo/rpc/#api-v0-block-put ``` [ `cid-codec`: , # CID codec to use. `mhtype`: , # Hash function to use. `mhlen`: , # Hash length. `pin`: , # Pin added blocks recursively. `allow-big-block`: , # Allow blocks larger than 1MiB. ] ``` """ @spec put(fspath, opts) :: okmapped def put(fspath, opts \\ []) do post_file("/block/put", fspath, query: opts) |> handle_plain_response() end @doc """ Remove a block from the blockstore. ## Parameters `cid` - The CID of the block to remove. ## Options https://docs.ipfs.tech/reference/kubo/rpc/#api-v0-block-rm ``` [ `force`: , # Ignore nonexistent blocks. `quiet`: , # Write minimal output. ] ``` """ @spec rm(cid) :: okmapped() def rm(cid) do post_query("/block/rm?arg=" <> cid) |> handle_plain_response() end @doc """ Get block stat. ## Parameters https://docs.ipfs.tech/reference/kubo/rpc/#api-v0-block-stat `cid` - The CID of the block to stat. """ @spec stat(cid) :: okmapped() def stat(cid) do post_query("/block/stat?arg=" <> cid) |> handle_plain_response() end end