defmodule MyspaceIPFS.Api do @moduledoc """ MyspaceIPFS.Api is where the main commands of the IPFS API reside. Alias this library and you can run the commands via Api.. ## Examples iex> alias MyspaceIPFS.API, as: Api iex> Api.get("Multihash_key") <<0, 19, 148, 0, ... >> """ # TODO: add ability to add options to the ipfs daemon command. # TODO: handle experimental and deprecated here. def start_shell(start? \\ true, flag \\ []) do {:ok, pid} = Task.start(fn -> System.cmd("ipfs", ["daemon"]) end) if start? == false do pid |> shutdown(flag) else pid end end defp shutdown(pid, term) do Process.exit(pid, term) end @type result :: MyspaceIPFS.result() @type path :: MyspaceIPFS.path() @type opts :: MyspaceIPFS.opts() # Advanced commands alias MyspaceIPFS.Api.Advanced @spec mount(opts) :: result defdelegate mount(opts \\ []), to: Advanced, as: :mount defdelegate shutdown, to: Advanced, as: :shutdown defdelegate resolve(multihash), to: Advanced, as: :resolve alias MyspaceIPFS.Api.Advanced.Filestore defdelegate filestore_dups, to: Filestore, as: :dups defdelegate filestore_ls, to: Filestore, as: :ls defdelegate filestore_verify, to: Filestore, as: :verify alias MyspaceIPFS.Api.Advanced.Key defdelegate key_gen(name), to: Key, as: :gen defdelegate key_list, to: Key, as: :list alias MyspaceIPFS.Api.Advanced.Name defdelegate name_publish(multihash), to: Name, as: :publish defdelegate name_resolve, to: Name, as: :resolve alias MyspaceIPFS.Api.Advanced.Pin defdelegate pin_add(multihash), to: Pin, as: :add defdelegate pin_ls(multihash), to: Pin, as: :ls defdelegate pin_rm(multihash), to: Pin, as: :rm alias MyspaceIPFS.Api.Advanced.Repo defdelegate repo_gc, to: Repo, as: :gc defdelegate repo_stat, to: Repo, as: :stat defdelegate repo_verify, to: Repo, as: :verify defdelegate repo_version, to: Repo, as: :version alias MyspaceIPFS.Api.Advanced.Stats defdelegate stats_bitswap, to: Stats, as: :bitswap defdelegate stats_bw, to: Stats, as: :bw defdelegate stats_dht, to: Stats, as: :dht defdelegate stats_provide, to: Stats, as: :provide defdelegate stats_repo, to: Stats, as: :repo # Basic commands alias MyspaceIPFS.Api.Basic @spec add(path, opts) :: result defdelegate add(path, opts \\ []), to: Basic, as: :add @spec cat(path, opts) :: result defdelegate cat(path, opts \\ []), to: Basic, as: :cat @spec get(path, opts) :: result defdelegate get(path, opts \\ []), to: Basic, as: :get @spec ls(path, opts) :: result defdelegate ls(path, opts \\ []), to: Basic, as: :ls alias MyspaceIPFS.Api.Basic.Refs @spec refs_local :: result defdelegate refs_local, to: Refs, as: :local @spec refs(path, opts) :: result defdelegate refs(path, opts \\ []), to: Refs, as: :refs # alias MyspaceIPFS.Api.Codecs.Cid # alias MyspaceIPFS.Api.Codes.Multilevel alias MyspaceIPFS.Api.Data.Block defdelegate block_get(multihash), to: Block, as: :get defdelegate block_put(file_path), to: Block, as: :put defdelegate block_rm(multihash), to: Block, as: :rm defdelegate block_stat(multihash), to: Block, as: :stat alias MyspaceIPFS.Api.Data.Dag defdelegate dag_get(multihash), to: Dag, as: :get defdelegate dag_put(file_path), to: Dag, as: :put alias MyspaceIPFS.Api.Data.Files defdelegate files_cp(from, to), to: Files, as: :cp defdelegate files_flush, to: Files, as: :flush defdelegate files_ls, to: Files, as: :ls defdelegate files_mkdir(path), to: Files, as: :mkdir defdelegate files_mv(from, to), to: Files, as: :mv defdelegate files_read(path), to: Files, as: :read defdelegate files_rm(path), to: Files, as: :rm defdelegate files_stat(path), to: Files, as: :stat defdelegate files_write(path, data), to: Files, as: :write # Network commands alias MyspaceIPFS.Api.Network defdelegate id, to: Network, as: :id defdelegate ping(peer_id), to: Network, as: :ping alias MyspaceIPFS.Api.Network.Bitswap defdelegate bitswap_ledger(peer_id), to: Bitswap, as: :ledger defdelegate bitswap_stat(verbose, human), to: Bitswap, as: :stat defdelegate bitswap_wantlist(peer), to: Bitswap, as: :wantlist defdelegate bitswap_reprovide, to: Bitswap, as: :reprovide alias MyspaceIPFS.Api.Network.Bootstrap defdelegate bootstrap_add_default, to: Bootstrap, as: :add_default defdelegate bootstrap_list, to: Bootstrap, as: :list defdelegate bootstrap_rm_all, to: Bootstrap, as: :rm_all alias MyspaceIPFS.Api.Network.Dht defdelegate dht_query(peer_id), to: Dht, as: :query alias MyspaceIPFS.Api.Network.PubSub defdelegate pubsub_ls, to: PubSub, as: :ls defdelegate pubsub_peers, to: PubSub, as: :peers defdelegate pubsub_pub(topic, data), to: PubSub, as: :pub defdelegate pubsub_sub(topic), to: PubSub, as: :sub # alias MyspaceIPFS.Api.Network.Routing alias MyspaceIPFS.Api.Network.Swarm defdelegate swarm_peers, to: Swarm, as: :peers defdelegate swarm_addrs, to: Swarm, as: :addrs defdelegate swarm_addrs_local, to: Swarm, as: :addrs_local defdelegate swarm_addrs_listen, to: Swarm, as: :addrs_listen defdelegate swarm_connect(peer_id), to: Swarm, as: :connect defdelegate swarm_disconnect(peer_id), to: Swarm, as: :disconnect defdelegate swarm_filters, to: Swarm, as: :filters defdelegate swarm_filters_add(addr), to: Swarm, as: :filters_add defdelegate swarm_filters_rm(addr), to: Swarm, as: :filters_rm # Tools commands alias MyspaceIPFS.Api.Tools defdelegate update(multihash), to: Tools, as: :update defdelegate version(num, comm, repo, all), to: Tools, as: :version alias MyspaceIPFS.Api.Tools.Commands defdelegate commands, to: Commands, as: :commands defdelegate commands_completion(shell), to: Commands, as: :completion alias MyspaceIPFS.Api.Tools.Diag defdelegate diag_cmds, to: Diag, as: :cmds defdelegate diag_cmds_clear, to: Diag, as: :cmds_clear defdelegate diag_cmds_set_time(time), to: Diag, as: :cmds_set_time defdelegate diag_sys, to: Diag, as: :sys alias MyspaceIPFS.Api.Tools.Log defdelegate log_level(subsystem, level), to: Log, as: :level defdelegate log_ls, to: Log, as: :ls defdelegate log_tail, to: Log, as: :tail end