Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
62c62f01df | |||
96222a99a3 | |||
264beada0d | |||
34a3524dbc | |||
e903b83f38 | |||
ff5bb588fe |
10
README.md
10
README.md
@ -1,3 +1,5 @@
|
||||
<img align="right" width="50" height="50" src="assets/yandex_translate.svg">
|
||||
|
||||
# YandexTranslate
|
||||
|
||||
A simple Elixir interface to Cloud Yandex Translate's translation API
|
||||
@ -58,7 +60,7 @@ Request for getting list of supported languages is #languages.
|
||||
Request for detecting language of text is #detect.
|
||||
|
||||
```elixir
|
||||
YandexTranslator.detect("Hello")
|
||||
YandexTranslate.detect("Hello")
|
||||
```
|
||||
|
||||
### Translation
|
||||
@ -66,12 +68,12 @@ Request for detecting language of text is #detect.
|
||||
Request for translating text is #translate.
|
||||
|
||||
```elixir
|
||||
YandexTranslator.translate("Hello", "ru")
|
||||
YandexTranslate.translate("Hello", "uk")
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
Bug reports and pull requests are welcome on GitHub at https://github.com/negrienko/yandex_translate.
|
||||
Bug reports and pull requests are welcome on at https://gl.negrienko.com/negrienko/yandex_translate.
|
||||
|
||||
## License
|
||||
|
||||
@ -83,6 +85,6 @@ Use this package at your own peril and risk.
|
||||
|
||||
## Documentation
|
||||
|
||||
Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
|
||||
Documentation generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
|
||||
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
|
||||
be found at [https://hexdocs.pm/yandex_translate](https://hexdocs.pm/yandex_translate).
|
||||
|
BIN
assets/yandex_translate.png
Normal file
BIN
assets/yandex_translate.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
17
assets/yandex_translate.svg
Normal file
17
assets/yandex_translate.svg
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="50px" height="50px" viewBox="0 0 50 50" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 52.6 (67491) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>yandex_translate</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="yandex_translate" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="yt" transform="translate(3.000000, 3.000000)">
|
||||
<circle id="Ground" fill="#4A90E2" cx="22.5" cy="22.5" r="22.5"></circle>
|
||||
<g id="Letters" transform="translate(7.000000, 7.000000)">
|
||||
<circle id="Oval" fill="#FFFFFF" cx="20" cy="10" r="10"></circle>
|
||||
<path d="M20.23,12.79 C19.872,12.053 19.525,11.156 19.26,10.094 C20.07,9.764 20.902,9.59 21.674,9.59 C21.85,9.59 22.022,9.6 22.19,9.617 C21.868,10.504 21.357,11.497 20.55,12.449 C20.448,12.567 20.34,12.679 20.23,12.789 L20.23,12.79 Z M16.272,13.917 C15.914,13.079 16.689,11.712 17.952,10.801 C18.268,11.961 18.672,12.944 19.085,13.741 C18.313,14.245 17.523,14.521 16.933,14.431 C16.605,14.381 16.401,14.223 16.273,13.918 L16.272,13.917 Z M23.978,8.605 C24.116,7.935 24.162,7.392 24.178,7.037 L22.73,7.037 C22.717,7.307 22.68,7.707 22.584,8.199 C21.456,8.034 20.184,8.193 18.966,8.644 C18.83,7.831 18.746,7.077 18.7,6.407 C23.036,6.157 25.595,5.1 25.713,5.05 L25.157,3.704 C25.13,3.714 22.709,4.706 18.644,4.949 C18.638,3.943 18.706,3.331 18.71,3.297 L17.258,3.297 C17.232,3.58 17.19,4.172 17.196,5 L17.063,5.004 C15.766,5.007 14.563,4.907 14.278,4.881 L14.278,6.348 C14.703,6.386 15.731,6.465 16.901,6.465 L17.254,6.461 C17.311,7.294 17.421,8.248 17.614,9.289 C15.694,10.442 14.17,12.679 14.946,14.496 C15.272,15.26 15.901,15.749 16.718,15.874 C16.855,15.894 16.996,15.906 17.142,15.906 C17.969,15.906 18.917,15.568 19.822,14.992 C20.412,15.882 20.89,16.352 20.932,16.392 L21.926,15.332 C21.916,15.322 21.496,14.912 20.969,14.102 C21.205,13.882 21.435,13.652 21.649,13.402 C22.609,12.268 23.207,11.092 23.579,10.04 C23.906,10.23 24.227,10.516 24.397,10.942 C24.975,12.392 24.14,14.066 23.362,14.794 L24.342,15.864 C25.637,14.654 26.532,12.388 25.737,10.396 C25.424,9.612 24.82,8.999 23.98,8.606 L23.978,8.605 Z" id="Shape" fill="#4A90E2" fill-rule="nonzero"></path>
|
||||
<circle id="Oval" fill="#FFFFFF" cx="10" cy="20" r="10"></circle>
|
||||
<path d="M11.795,20.744 L8.205,20.744 L10,16.158 L11.795,20.744 Z M10.775,13.742 L9.225,13.742 L4.405,25.454 L6.378,25.454 L7.563,22.338 L12.437,22.338 L13.622,25.454 L15.594,25.454 L10.775,13.742 Z" id="Shape" fill="#4A90E2" fill-rule="nonzero"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
BIN
assets/yandex_translate@2x.png
Normal file
BIN
assets/yandex_translate@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.5 KiB |
@ -1,8 +1,55 @@
|
||||
defmodule YandexTranslate do
|
||||
@moduledoc """
|
||||
Basic functions for requests to Yandex Translate API on Yandex Cloud
|
||||
"""
|
||||
|
||||
alias YandexTranslate.Client
|
||||
|
||||
@doc """
|
||||
Retrieves the list of supported languages.
|
||||
|
||||
Return a map with language code (use it for translations) and native language name
|
||||
|
||||
```elixir
|
||||
%{
|
||||
languages: [
|
||||
%{code: "az", name: "azərbaycan"},
|
||||
%{code: "sq", name: "shqip"},
|
||||
%{code: "am", name: "አማርኛ"},
|
||||
%{code: "en", name: "English"},
|
||||
%{code: "ar", name: "العربية"},
|
||||
%{code: "hy", name: "հայերեն"},
|
||||
%{code: "af", name: "Afrikaans"},
|
||||
%{code: "eu", name: "euskara"},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
"""
|
||||
def languages(), do: Client.call(:listLanguages, %{})
|
||||
|
||||
@doc """
|
||||
Detect the language of the text
|
||||
|
||||
Get text as a string param and return a map with language code
|
||||
|
||||
```elixir
|
||||
YandexTranslate.detect("Криївка")
|
||||
# Response
|
||||
%{languageCode: "uk"}
|
||||
```
|
||||
|
||||
Or get a map with :text and :languageCodeHints (for specify the most likely languages).
|
||||
> In some languages, one and the same word has the same spelling. For example, the English word “hand” is also written as “hand” in German, Swedish, and Dutch. If the text you transmit contains words like this, Translate may detect the source language incorrectly.
|
||||
|
||||
To avoid mistakes, you can use the languageCodeHints field to specify which languages should be given priority when determining the language of the text
|
||||
|
||||
```elixir
|
||||
YandexTranslate.detect(%{text: "Капелюх", languageCodeHints: ["uk"]})
|
||||
# Response
|
||||
%{languageCode: "uk"}
|
||||
```
|
||||
"""
|
||||
def detect(params) when is_map(params), do: Client.call(:detectLanguage, params)
|
||||
def detect(text) when is_binary(text), do: Client.call(:detectLanguage, %{text: text})
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
defmodule YandexTranslate.Auth.IAMToken do
|
||||
alias YandexTranslate.Auth.JWTTokenConfig
|
||||
alias YandexTranslate.Auth.SignerConfig
|
||||
|
||||
def get_auth_value() do
|
||||
"Bearer " <> get_iam_token()
|
||||
@ -8,12 +8,19 @@ defmodule YandexTranslate.Auth.IAMToken do
|
||||
def get_iam_token() do
|
||||
# Rewrite needed, signing process not worked. Fucking PS256 and hash length optoins on my opinion
|
||||
# Pluged by old IAMToken
|
||||
"CggVAgAAABoBMRKABDnO1uw1a7U-AIlRglhz8yQVQzXaKjXt1saXk5VDXHH41mlPpMpK3V9-GUgthtdposNYva9hj0DaaHE1YDZfBcZkiZU7T_45ilhFtouG5rARRP8E6GqR4-dMutrYo69XQ3Uj4-KPa0IkOa2HrCTJEePhDHGlz-iW_YnN0QXFIlKN7NMIrZQyYRJ1dvQExx29TARcy_OVWOO8234rU_Vi5BRBKXTfp7NFB589bMe6UhEoYTF-1PdOEtxDJ2DLMdqMiYw4BZnyhOwn81u8kAetHpC-R6kizR8P2omcMyZORk4zwMfgdWlDzAhrIGq4ev8aOpcQH2vH8xh8ZMTgqbRZ9rezOflEZ3bDdDVdcQWjMq4ZYABY1n278pzhucbiTZJl6uxxTXg9Ucbg7_9mpA8DOIBn72wx8dTmrJgXWTstSJ6aShpg_1VJE48gUSenO1AjXWnat9hcvhgrBGKdQFlmhqnrRTptnvhgdNctwvD_tjpjC9ZWa5pBPyE9pKdiZzYUkhSEKEpRKFAh7oGv4i0w5gCHDzQrQfrrMFxFUUPJCg8Hx0tUbLqMgF9sYXYS4vhJFWFtBl_x0dd3KMPy33Fg4oDxlbZwsolyrVI9QnT9Es2qXGp1Sw9TLMM3pAI8G8JOD7O8eTRCJalRrrFOgybbK8LjK7AKLBhI0MNtQs0A_QS-GnYKIGIxODQ5YTljMmQ4ZjRiNjQ5YTU1MzhhN2E1OTdkNDU3ELTgzugFGPSx0egFIj4KFGFqZTB1czQyMWdoNG9idmJwcW5iEg5leGNoYW5nZXJzNGRldioUYjFnbmw5N3VkNzltYXA3bmhnM2wwAjAFOAFQAVoA"
|
||||
end
|
||||
|
||||
def get_jwt_token() do
|
||||
signer = Joken.Signer.create("PS256", %{"pem" => get_rsa_key(:private)}, get_headers())
|
||||
JWTTokenConfig.generate_and_sign(%{}, signer) |> elem(1)
|
||||
{:ok, token, _payload} = SignerConfig.generate_and_sign(%{}, signer)
|
||||
token
|
||||
|
||||
# {:ok, payload_map} = SignerConfig.generate_claims()
|
||||
# {:ok, payload} = Jason.encode(payload_map)
|
||||
# headers = Map.merge(get_headers(), %{"alg" => "PS256", "typ" => "JWT"})
|
||||
# key = get_rsa_key(:private) |> JOSE.JWK.from_pem()
|
||||
# {_alg, jwt} = JOSE.JWS.sign(key, payload, headers) |> JOSE.JWS.compact()
|
||||
# jwt
|
||||
end
|
||||
|
||||
defp get_headers(kid \\ Application.get_env(:yandex_translate, :authorized_key_id)),
|
||||
@ -31,7 +38,9 @@ defmodule YandexTranslate.Auth.IAMToken do
|
||||
|> elem(1)
|
||||
end
|
||||
|
||||
defp fetch_key("-----BEGIN" <> _ = key_content), do: key_content
|
||||
defp fetch_key("-----BEGIN" <> _ = key_content) do
|
||||
key_content
|
||||
end
|
||||
|
||||
defp fetch_key(key_file), do: File.read!(key_file) |> fetch_key()
|
||||
end
|
||||
|
@ -1,15 +0,0 @@
|
||||
defmodule YandexTranslate.Auth.JWTTokenConfig do
|
||||
@iam_token_url "https://iam.api.cloud.yandex.net/iam/v1/tokens"
|
||||
|
||||
use Joken.Config
|
||||
|
||||
@impl Joken.Config
|
||||
def token_config() do
|
||||
default_claims(
|
||||
iss: Application.get_env(:yandex_translate, :service_account_id),
|
||||
default_exp: 60 * 60,
|
||||
skip: [:jti, :nbf],
|
||||
aud: Application.get_env(:yandex_translate, :iam_token_url) || @iam_token_url
|
||||
)
|
||||
end
|
||||
end
|
22
lib/yandex_translate/auth/signer_config.ex
Normal file
22
lib/yandex_translate/auth/signer_config.ex
Normal file
@ -0,0 +1,22 @@
|
||||
defmodule YandexTranslate.Auth.SignerConfig do
|
||||
@iam_token_url "https://iam.api.cloud.yandex.net/iam/v1/tokens"
|
||||
|
||||
use Joken.Config
|
||||
|
||||
# defp iss, do: Application.get_env(:yandex_translate, :service_account_id)
|
||||
# defp aud, do: Application.get_env(:yandex_translate, :iam_token_url) || @iam_token_url
|
||||
|
||||
@impl Joken.Config
|
||||
def token_config() do
|
||||
default_claims(
|
||||
iss: Application.get_env(:yandex_translate, :service_account_id),
|
||||
default_exp: 59 * 60,
|
||||
skip: [:jti, :nbf],
|
||||
aud: Application.get_env(:yandex_translate, :iam_token_url) || @iam_token_url
|
||||
)
|
||||
|
||||
# default_claims(skip: [:aud, :iss, :jti, :nbf])
|
||||
# |> add_claim("aud", nil, &(&1 == iss()))
|
||||
# |> add_claim("iss", nil, &(&1 == aud()))
|
||||
end
|
||||
end
|
@ -74,7 +74,7 @@ defmodule YandexTranslate.Client do
|
||||
|
||||
defp valid_argument_keys(_), do: []
|
||||
|
||||
defp parse(body), do: Jason.decode!(body)
|
||||
defp parse(body), do: Jason.decode!(body, keys: :atoms)
|
||||
|
||||
defp fetch(method, headers, body) do
|
||||
{:ok, conn} = Mint.HTTP.connect(:https, @base_host, 443)
|
||||
|
42
mix.exs
42
mix.exs
@ -1,21 +1,36 @@
|
||||
defmodule YandexTranslate.Mixfile do
|
||||
defmodule YandexTranslate.MixProject do
|
||||
use Mix.Project
|
||||
|
||||
@name "YandexTranslate"
|
||||
@version "0.4.1"
|
||||
# @repo_url "https://github.com/negrienko/yandex_translate"
|
||||
@repo_url "https://gl.negrienko.com/negrienko/yandex_translate"
|
||||
@homepage_url "https://negrienko.com/all/yandex-translate/"
|
||||
@author_url "https://negrienko.com/"
|
||||
@description """
|
||||
Translate word and phrases using the Yandex Translate API. See README.md for information.
|
||||
Translate word and phrases using the Yandex Cloud Yandex Translate API. See README.md for information.
|
||||
"""
|
||||
|
||||
def project do
|
||||
[
|
||||
app: :yandex_translate,
|
||||
version: "0.1.0",
|
||||
elixir: "~> 1.8",
|
||||
description: @description,
|
||||
version: @version,
|
||||
elixir: "~> 1.9",
|
||||
build_embedded: Mix.env() == :prod,
|
||||
start_permanent: Mix.env() == :prod,
|
||||
package: package(),
|
||||
deps: deps(),
|
||||
source_url: "https://gl.negrienko.com/negrienko/yandex_translate"
|
||||
# Docs
|
||||
name: @name,
|
||||
description: @description,
|
||||
source_url: @repo_url,
|
||||
homepage_url: @homepage_url,
|
||||
docs: [
|
||||
logo: "assets/yandex_translate.svg",
|
||||
main: @name,
|
||||
source_ref: @version,
|
||||
source_url: @repo_url
|
||||
]
|
||||
]
|
||||
end
|
||||
|
||||
@ -28,12 +43,13 @@ defmodule YandexTranslate.Mixfile do
|
||||
|
||||
defp deps do
|
||||
[
|
||||
{:joken, "~> 2.1.0"},
|
||||
# {:jose, "~> 1.9.0"},
|
||||
{:jason, "~> 1.1.2"},
|
||||
{:mint, "~> 0.3.0"},
|
||||
{:castore, "~> 0.1.2"},
|
||||
{:ex_doc, "~> 0.20.2", only: :dev},
|
||||
{:joken, "~> 2.2.0"},
|
||||
{:jose, "~> 1.10.1"},
|
||||
{:jason, "~> 1.2.1"},
|
||||
{:mint, "~> 1.1.0"},
|
||||
{:castore, "~> 0.1.6"},
|
||||
{:ex_spec, "~> 2.0.1", only: :test},
|
||||
{:ex_doc, "~> 0.21.3", only: :dev},
|
||||
{:remix, "~> 0.0.2", only: :dev}
|
||||
]
|
||||
end
|
||||
@ -42,7 +58,7 @@ defmodule YandexTranslate.Mixfile do
|
||||
[
|
||||
maintainers: ["Danylo Negriienko"],
|
||||
licenses: ["MIT"],
|
||||
links: %{"git" => "https://gl.negrienko.com/negrienko/yandex_translate"}
|
||||
links: %{"git" => @repo_url, "author" => @author_url, "homepage" => @homepage_url}
|
||||
]
|
||||
end
|
||||
end
|
||||
|
23
mix.lock
23
mix.lock
@ -1,27 +1,28 @@
|
||||
%{
|
||||
"base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm"},
|
||||
"castore": {:hex, :castore, "0.1.2", "81adb0683c4ec8ebb97ad777ec1b050405282d55453df14567a3c73ae25932a6", [:mix], [], "hexpm"},
|
||||
"castore": {:hex, :castore, "0.1.6", "2da0dccb3eacb67841d11790598ff03cd5caee861e01fad61dce1376b5da28e6", [:mix], [], "hexpm", "f874c510b720d31dd6334e9ae5c859a06a3c9e67dfe1a195c512e57588556d3f"},
|
||||
"certifi": {:hex, :certifi, "2.5.1", "867ce347f7c7d78563450a18a6a28a8090331e77fa02380b4a21962a65d36ee5", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"earmark": {:hex, :earmark, "1.3.2", "b840562ea3d67795ffbb5bd88940b1bed0ed9fa32834915125ea7d02e35888a5", [:mix], [], "hexpm"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.20.2", "1bd0dfb0304bade58beb77f20f21ee3558cc3c753743ae0ddbb0fd7ba2912331", [:mix], [{:earmark, "~> 1.3", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.10", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "0db1ee8d1547ab4877c5b5dffc6604ef9454e189928d5ba8967d4a58a801f161"},
|
||||
"ex_spec": {:hex, :ex_spec, "2.0.1", "8bdbd6fa85995fbf836ed799571d44be6f9ebbcace075209fd0ad06372c111cf", [:mix], [], "hexpm", "b44fe5054497411a58341ece5bf7756c219d9d6c1303b5ac467f557a0a4c31ac"},
|
||||
"hackney": {:hex, :hackney, "1.15.1", "9f8f471c844b8ce395f7b6d8398139e26ddca9ebc171a8b91342ee15a19963f4", [:rebar3], [{:certifi, "2.5.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.4", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"httpoison": {:hex, :httpoison, "1.5.1", "0f55b5b673b03c5c327dac7015a67cb571b99b631acc0bc1b0b98dcd6b9f2104", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"},
|
||||
"joken": {:hex, :joken, "2.1.0", "bf21a73105d82649f617c5e59a7f8919aa47013d2519ebcc39d998d8d12adda9", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"jose": {:hex, :jose, "1.9.0", "4167c5f6d06ffaebffd15cdb8da61a108445ef5e85ab8f5a7ad926fdf3ada154", [:mix, :rebar3], [{:base64url, "~> 0.0.1", [hex: :base64url, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"makeup": {:hex, :makeup, "0.8.0", "9cf32aea71c7fe0a4b2e9246c2c4978f9070257e5c9ce6d4a28ec450a839b55f", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "0.13.0", "be7a477997dcac2e48a9d695ec730b2d22418292675c75aa2d34ba0909dcdeda", [:mix], [{:makeup, "~> 0.8", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"jason": {:hex, :jason, "1.2.1", "12b22825e22f468c02eb3e4b9985f3d0cb8dc40b9bd704730efa11abd2708c44", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b659b8571deedf60f79c5a608e15414085fa141344e2716fbd6988a084b5f993"},
|
||||
"joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "b4f92e30388206f869dd25d1af628a1d99d7586e5cf0672f64d4df84c4d2f5e9"},
|
||||
"jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm", "3c7ddc8a9394b92891db7c2771da94bf819834a1a4c92e30857b7d582e2f8257"},
|
||||
"makeup": {:hex, :makeup, "1.0.1", "82f332e461dc6c79dbd82fbe2a9c10d48ed07146f0a478286e590c83c52010b5", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "49736fe5b66a08d8575bf5321d716bac5da20c8e6b97714fec2bcd6febcfa1f8"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"},
|
||||
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},
|
||||
"mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm"},
|
||||
"mint": {:hex, :mint, "0.3.0", "f00f09363e5cdba1572519914aab3cea1a73b4737c63a29afe74a08362f5f91c", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm"},
|
||||
"mint": {:hex, :mint, "1.1.0", "1fd0189edd9e3ffdbd7fcd8bc3835902b987a63ec6c4fd1aa8c2a56e2165f252", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5bfd316c3789340b682d5679a8116bcf2112e332447bdc20c1d62909ee45f48d"},
|
||||
"mojito": {:hex, :mojito, "0.3.0", "806cd3c1832333a9ee784e7ea2799863fbe4de55ecb4623a8f4ef870c2844cc6", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: false]}, {:mint, "~> 0.2.1", [hex: :mint, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "0.5.0", "90e2eca3d0266e5c53f8fbe0079694740b9c91b6747f2b7e3c5d21966bba8300", [:mix], [], "hexpm"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"},
|
||||
"ojson": {:hex, :ojson, "1.0.0", "fd28614eadaec00a15cdb2f53f29d8717a812a508ddb80d202f2f2e2aaeabbcc", [:mix, :rebar3], [], "hexpm"},
|
||||
"parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm"},
|
||||
"poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"},
|
||||
"poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm"},
|
||||
"remix": {:hex, :remix, "0.0.2", "f06115659d8ede8d725fae1708920ef73353a1b39efe6a232d2a38b1f2902109", [:mix], [], "hexpm"},
|
||||
"remix": {:hex, :remix, "0.0.2", "f06115659d8ede8d725fae1708920ef73353a1b39efe6a232d2a38b1f2902109", [:mix], [], "hexpm", "5f5555646ed4fca83fab8620735150aa0bc408c5a17a70d28cfa7086bc6f497c"},
|
||||
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.4", "f0eafff810d2041e93f915ef59899c923f4568f4585904d010387ed74988e77b", [:make, :mix, :rebar3], [], "hexpm"},
|
||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm"},
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user