defmodule MyspaceIPFS.Utils do @moduledoc """ MyspaceIPFS.Utils is where common functions of the library are defined. Alias this library and you can run the commands via Utils.. ## Examples iex> alias MyspaceIPFS.Utils, as: Utils iex> Api.get("Multihash_key") <<0, 19, 148, 0, ... >> """ import MyspaceIPFS.Connection # IPCS API HTTP Status Codes # Ref. https://docs.ipfs.tech/reference/kubo/rpc/#http-status-codes # for any other status codes. # 200 - The request was processed or is being processed (streaming) # 500 - RPC endpoint returned an error # 400 - Malformed RPC, argument type error, etc # 403 - RPC call forbidden # 404 - RPC endpoint doesn't exist # 405 - HTTP Method Not Allowed defp handle_response(response) do case response do {:ok, %Tesla.Env{status: 200, body: body}} -> {:ok, body} {:ok, %Tesla.Env{status: 500, body: body}} -> {:server_error, body} {:ok, %Tesla.Env{status: 400, body: body}} -> {:client_error, body} {:ok, %Tesla.Env{status: 403, body: body}} -> {:forbidden, body} {:ok, %Tesla.Env{status: 404, body: body}} -> {:missing, body} {:ok, %Tesla.Env{status: 405, body: body}} -> {:not_allowed, body} end end # Not sure how and when to use this. # defp write_file(raw, multihash) do # File.write(multihash, raw, [:write, :utf8]) # end @spec request_post(any, binary) :: {:client_error | :forbidden | :missing | :not_allowed | :ok | :server_error, any} def request_post(file, path) do handle_response(post(path, file)) end @spec request_get(binary) :: {:client_error | :forbidden | :missing | :not_allowed | :ok | :server_error, any} def request_get(path) do handle_response(post(path, "")) end @spec request_get(binary, binary) :: {:client_error | :forbidden | :missing | :not_allowed | :ok | :server_error, any} def request_get(path, arg) do handle_response(post(path <> arg, "")) end end