lib/myspace_ipfs/swarm.ex
defmodule MyspaceIPFS.Swarm do
@moduledoc """
MyspaceIPFS.Swarm is where the swarm commands of the IPFS API reside.
"""
import MyspaceIPFS.Api
import MyspaceIPFS.Utils
@typep okresult :: MyspaceIPFS.okresult()
@typep peer_id :: MyspaceIPFS.peer_id()
@doc """
List the addresses of known peers.
"""
@spec addrs :: okresult
def addrs do
post_query("/swarm/addrs")
|> handle_json_response()
end
@doc """
List the interfaces swarm is listening on.
"""
@spec addrs_listen :: okresult
def addrs_listen do
post_query("/swarm/addrs/listen")
|> handle_json_response()
end
@doc """
List the local addresses.
"""
@spec addrs_local :: okresult
def addrs_local do
post_query("/swarm/addrs/local")
|> handle_json_response()
end
@spec addrs_local(peer_id) :: okresult
def addrs_local(peer_id) do
post_query("/swarm/addrs/local?id=#{peer_id}")
|> handle_json_response()
end
@doc """
Open a connection to a given address.
## Parameters
https://docs.ipfs.io/reference/http/api/#api-v0-swarm-connect
`peer_id` - The address to connect to.
"""
@spec connect(peer_id) :: okresult
def connect(peer_id) do
post_query("/swarm/connect?arg=#{peer_id}")
|> handle_json_response()
end
@doc """
Close a connection to a given address.
## Parameters
https://docs.ipfs.io/reference/http/api/#api-v0-swarm-disconnect
`peer_id` - The address to disconnect from.
"""
@spec disconnect(peer_id) :: okresult
def disconnect(peer_id) do
post_query("/swarm/disconnect?arg=#{peer_id}")
|> handle_json_response()
end
@doc """
Manipulate address filters.
"""
@spec filters :: okresult
def filters() do
post_query("/swarm/filters")
|> handle_json_response()
end
@doc """
Multiaddress filter to add.
## Parameters
https://docs.ipfs.io/reference/http/api/#api-v0-swarm-filters-add
`peer_id` - The multiaddress to add to the filter.
"""
@spec filters_add(peer_id) :: okresult
def filters_add(peer_id) do
post_query("/swarm/filters/add?arg=#{peer_id}")
|> handle_json_response()
end
@doc """
Multiaddress filter to remove.
## Parameters
https://docs.ipfs.io/reference/http/api/#api-v0-swarm-filters-rm
`peer_id` - The multiaddress to remove from the filter.
"""
@spec filters_rm(peer_id) :: okresult
def filters_rm(peer_id) do
post_query("/swarm/filters/rm?arg=#{peer_id}")
|> handle_json_response()
end
@doc """
Add peers to the peering service.
## Parameters
https://docs.ipfs.io/reference/http/api/#api-v0-swarm-peering-add
`peer_id` - The peer ID of the peer to add.
"""
@spec peering_add(peer_id) :: okresult
def peering_add(peer_id) do
post_query("/swarm/peering/add?arg=#{peer_id}")
|> handle_json_response()
end
@doc """
List peers in the peering service.
"""
@spec peering_ls :: okresult
def peering_ls do
post_query("/swarm/peering/ls")
|> handle_json_response()
end
@doc """
Remove peers from the peering service.
## Parameters
https://docs.ipfs.io/reference/http/api/#api-v0-swarm-peering-rm
`peer_id` - The multihash of the peer to remove.
"""
def peering_rm(peer_id) do
post_query("/swarm/peering/rm?arg=#{peer_id}")
|> handle_json_response()
end
@doc """
List peers with open connections.
## Options
https://docs.ipfs.io/reference/http/api/#api-v0-swarm-peers
`verbose` - Write extra information.
`streams` - Also list information about open streams for each connection.
`latency` - Also list information about latency to each peer.
`direction` - Also list information about direction of connection.
"""
@spec peers :: okresult
def peers do
post_query("/swarm/peers")
|> handle_json_response()
end
end