lib/api/advanced/advanced.ex

defmodule MyspaceIPFS.Api.Advanced do
  @moduledoc """
  MyspaceIPFS.Api is where the key commands of the IPFS API reside.
  """
  import MyspaceIPFS

  @type result :: MyspaceIPFS.result()
  @type opts :: MyspaceIPFS.opts()
  @type path :: MyspaceIPFS.path()

  @experimental Application.get_env(:myspace_ipfs, :experimental)

  @doc """
  Shutdown the IPFS daemon.
  """
  @spec shutdown :: result
  def shutdown, do: post_query("/shutdown")

  @doc """
  Instruct daemon to mount IPFS and IPNS to the filesystem (read-only).

  ## Options
  https://docs.ipfs.tech/reference/kubo/rpc/#api-v0-mount
  Example of options:
  ```
  [
    ipfs-path: "/ipfs",
    ipns-path: "/ipns"
  ]
  ```
  """
  def mount(opts \\ []) do
    case @experimental do
      true -> post_query("/mount", opts)
      false -> raise "This command is experimental and must be enabled in the config."
    end
  end

  @doc """
  Resolve the value of names to IPFS.

  ## Options
  https://docs.ipfs.tech/reference/kubo/rpc/#api-v0-resolve
  Example of options:
  ```
  [
    recursive: true,
    nocache: true,
    dht-record-count: 10,
    dht-timeout: 10
  ]
  ```
  """
  @spec resolve(path, opts) :: result
  def resolve(path, opts \\ []), do: post_query("/resolve?arg=" <> path, opts)
end