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.<cmd_name>.
## 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