Packages

Core functionalities for the StarkInfra and StarkBank Elixir SDKs

Current section

Files

Jump to
starkcore lib utils check.ex
Raw

lib/utils/check.ex

defmodule StarkCore.Utils.Check do
@moduledoc false
alias EllipticCurve.PrivateKey
alias StarkCore.User.Project
alias StarkCore.User.Organization
def environment(environment) do
case environment do
:production -> environment
:sandbox -> environment
nil -> raise "please set an environment"
_any -> raise "environment must be either :production or :sandbox"
end
end
def limit(limit) when is_nil(limit) do
nil
end
def limit(limit) do
min(limit, 100)
end
def datetime(data) when is_nil(data) do
nil
end
def datetime(data) when is_binary(data) do
{:ok, datetime, _utc_offset} = data |> DateTime.from_iso8601()
datetime
end
def date(data) when is_nil(data) do
nil
end
def date(data) when is_binary(data) do
data |> Date.from_iso8601!()
end
def date(data = %DateTime{}) do
%Date{year: data.year, month: data.month, day: data.day}
end
def date(data) do
data
end
def date_or_datetime(data) do
try do
date(data)
rescue
ArgumentError -> datetime(data)
end
end
def private_key(private_key) do
try do
{:ok, parsed_key} = PrivateKey.fromPem(private_key)
:secp256k1 = parsed_key.curve.name
parsed_key
rescue
_e -> raise "private_key must be valid secp256k1 ECDSA string in pem format"
else
parsed_key -> parsed_key
end
end
def options(options) do
options
|> Enum.into(%{})
|> fill_limit()
|> fill_date_field(:after)
|> fill_date_field(:before)
end
def query_params(query) do
query
|> fill_limit()
|> fill_date_field(:after)
|> fill_date_field(:before)
end
defp fill_limit(options) do
if !options[:limit] do
Map.put(options, :limit, nil)
end
options
end
defp fill_date_field(options, field) do
if !options[field] do
Map.put(options, field, nil)
else
Map.update!(options, field, &date/1)
end
end
def user(user) when is_nil(user) do
case Application.fetch_env(:starkcore, :project) do
{:ok, project_info} -> {:ok, project_info
|> StarkCore.project()}
:error -> organization_user()
end
end
def user(user = %Project{}) do
{:ok, user}
end
def user(user = %Organization{}) do
{:ok, user}
end
defp organization_user() do
case Application.fetch_env(:starkcore, :organization) do
{:ok, organization_info} -> organization_info |> StarkCore.organization()
:error -> raise "no default user was located in configs and no user was passed in the request"
end
end
def host(input) do
case Enum.member?([:bank, :infra, :sign], input) do
true -> {:ok, input}
false -> {:error, "service #{input} is invalid"}
end
end
def language(lang) when is_binary(lang) do
case Enum.member?(["en-US", "pt-BR"], lang) do
true -> String.to_charlist(lang)
false -> ~c"en-US"
end
end
def language(lang) when is_nil(lang) do
case Application.fetch_env(:starkcore, :language) do
{:ok, ~c"en-US"} -> ~c"en-US"
{:ok, "en-US"} -> ~c"en-US"
{:ok, ~c"pt-BR"} -> ~c"pt-BR"
{:ok, "pt-BR"} -> ~c"pt-BR"
:error -> ~c"en-US"
end
end
def enforced_keys(parameters, enforced_keys) do
case get_missing_keys(parameters |> Enum.into(%{}), enforced_keys) do
[] -> parameters
missing_keys -> raise "the following parameters are missing: " <> Enum.join(missing_keys, ", ")
end
end
def get_missing_keys(parameters, [key | other_enforced_keys]) do
missing_keys = get_missing_keys(parameters, other_enforced_keys)
case Map.has_key?(parameters, key) do
true -> missing_keys
false -> [key | missing_keys]
end
end
def get_missing_keys(_parameters, []) do
# TBD: Implementation
[]
end
end