defmodule Aurum.Coinbase do @moduledoc """ This module provides abstractions around basic HTTP methods within the context of the coinbase ecosystem. It takes care of using your Coinbase API Key/Secret to generate the required HMAC authentication signature based on the current timestamp so that the consumer of this module can focus on application logic. """ alias Aurum.Coinbase.Client, as: Client @doc """ Perform a signed get request to the specified path. Due to some of the implementation details the path string must begin with `/v2` in order to correctly call the API. """ @spec get(path :: String.t()) :: map() def get(path) do Client.get(path) end @doc """ Perform a signed post request to the specified path. Due to some of the implementation details the path string must begin with `/v2` in order to correctly call the API. The request body can be in the form of a map for your convienience, for example: ``` Coinbase.post("/v2/accounts//sells", %{total: 10, currency: "USD"}) ``` Is equivalent to: ``` Coinbase.post("/v2/accounts//sells", ~S({"total": "10", "currency": "USD"})) ``` """ @spec post(path :: String.t(), body :: map()) :: map() def post(path, body) do Client.post(path, body) end @doc """ Perform a signed put request to the specified path. Due to some of the implementation details the path string must begin with `/v2` in order to correctly call the API. The request body can be in the form of a map for your convienience, for example: ``` Coinbase.put("/v2/some/resource", %{total: 10, currency: "USD"}) ``` Is equivalent to: ``` Coinbase.put("/v2/some/resource", ~S({"total": "10", "currency": "USD"})) ``` """ @spec put(path :: String.t(), body :: map()) :: map() def put(path, body) do Client.put(path, body) end @doc """ Perform a signed put request to the specified path. Due to some of the implementation details the path string must begin with `/v2` in order to correctly call the API. The request body can be in the form of a map for your convienience, for example: ``` Coinbase.patch("/v2/some/resource", %{total: 10, currency: "USD"}) ``` Is equivalent to: ``` Coinbase.patch("/v2/some/resource", ~S({"total": "10", "currency": "USD"})) ``` """ @spec patch(path :: String.t(), body :: map()) :: map() def patch(path, body) do Client.patch(path, body) end @doc """ Perform a signed delete request to the specified path. Due to some of the implementation details the path string must begin with `/v2` in order to correctly call the API. """ @spec delete(path :: String.t()) :: map() def delete(path) do Client.delete(path) end end