defmodule MyspaceIPFS.Files do @moduledoc """ MyspaceIPFS.Files is where the files commands of the IPFS API reside. """ import MyspaceIPFS.Api import MyspaceIPFS.Utils @typep okresult :: MyspaceIPFS.okresult() @typep opts :: MyspaceIPFS.opts() @typep path :: MyspaceIPFS.path() @typep fspath :: MyspaceIPFS.fspath() @doc """ Copy files into mfs. ## Parameters source: The source file to copy. dest: The destination path for the file to be copied to. ## Options https://docs.ipfs.io/reference/http/api/#api-v0-files-cp ``` [ parents: , # Make parent directories as needed. ] ``` """ @spec cp(fspath, fspath, opts) :: okresult def cp(source, dest, opts \\ []) do post_query("/files/cp?arg=" <> source <> "&arg=" <> dest, query: opts) |> handle_json_response() end @doc """ Change the CID version or hash function of a path's root node. ## Parameters path: The path to change the CID for. ## Options https://docs.ipfs.io/reference/http/api/#api-v0-files-chcid ``` [ cid-version: , # CID version. (experimental) hash: , # Hash function to use. Implies CID version 1 if used. (experimental) ] ``` """ @spec chcid(path, opts) :: okresult def chcid(path \\ '/', opts \\ []) do post_query("/files/chcid?arg=" <> path, query: opts) |> handle_json_response() end @doc """ Flush a given path's data to disk. ## Parameters https://docs.ipfs.io/reference/http/api/#api-v0-files-flush `path` - The path to flush. If not specified, the entire repo will be flushed. """ @spec flush(path) :: okresult def flush() do post_query("/files/flush") |> handle_json_response() end def flush(path) do post_query("/files/flush?arg=" <> path) |> handle_json_response() end @doc """ List directories in the local mutable namespace. ## Parameters `path` - The path to list. Defaults to /. ## Options https://docs.ipfs.io/reference/http/api/#api-v0-files-ls ``` [ l: , # Use long listing format. U: , # Do not sort; list entries in directory order. ] ``` """ @spec ls(path, opts) :: okresult def ls(path \\ '/', opts \\ []) do post_query("/files/ls?arg=" <> path, query: opts) |> handle_json_response() end @doc """ Make directories. ## Parameters `path` - The path to make directories at. ## Options https://docs.ipfs.io/reference/http/api/#api-v0-files-mkdir ``` [ `parents` - , # No error if existing, make parent directories as needed. `hash` - , # Hash function to use. Implies CID version 1 if used. (experimental) `cid-version` - , # CID version. (experimental) ] ``` """ @spec mkdir(path, opts) :: okresult def mkdir(path, opts \\ []) do post_query("/files/mkdir?arg=" <> path, query: opts) |> handle_json_response() end @doc """ Move files. ## Parameters `source` - The source file to move. `dest` - The destination path for the file to be moved to. """ @spec mv(path, path) :: okresult def mv(source, dest) do post_query("/files/mv?arg=" <> source <> "&arg=" <> dest) |> handle_json_response() end @doc """ Read a file in a given mfs. ## Parameters `path` - The path to the file to be read. ## Options https://docs.ipfs.io/reference/http/api/#api-v0-files-read ``` [ offset: , # Byte offset to begin reading from. count: , # Maximum number of bytes to read. ] ``` """ @spec read(path, opts) :: okresult def read(path, opts \\ []) do post_query("/files/read?arg=" <> path, query: opts) |> handle_json_response() end @doc """ Remove a file from mfs. ## Parameters `path` - The path to the file to be removed. ## Options https://docs.ipfs.io/reference/http/api/#api-v0-files-rm ``` [ recursive: , # Recursively remove directories. force: , # Forcibly remove target at path; implies recursive for directories. ] ``` """ @spec rm(path, opts) :: okresult def rm(path, opts = []) do post_query("/files/rm?arg=" <> path, query: opts) |> handle_json_response() end @doc """ Get file status. ## Parameters `path` - The path to the file to stat. ## Options https://docs.ipfs.io/reference/http/api/#api-v0-files-stat ``` [ format: , # Format to print out. Allowed tokens: hash: , # Compute the hash of the file. size: , # Compute the size of the file. with-local: , # Compute the size of the file including the local repo. ] ``` """ @spec stat(path, opts) :: okresult def stat(path, opts \\ []) do post_query("/files/stat?arg=" <> path, query: opts) |> handle_json_response() end @doc """ Write to a mutable file in a given filesystem. ## Parameters `path` - The path to write to. `data` - The data to write. ## Options https://docs.ipfs.io/reference/http/api/#api-v0-files-write ``` [ create: , # Create the file if it does not exist. truncate: , # Truncate the file to size zero before writing. offset: , # Byte offset to begin writing at. count: , # Maximum number of bytes to write. raw-leaves: , # Use raw blocks for newly created leaf nodes. (experimental) cid-version: , # CID version. (experimental) hash: , # Hash function to use. Implies CID version 1 if used. (experimental) parents: , # No error if existing, make parent directories as needed. ] ``` """ @spec write(fspath, path, opts) :: okresult def write(data, path, opts \\ []) do post_file("/files/write?arg=" <> path, data, query: opts) |> handle_json_response() end end