diff --git a/config/runtime.exs b/config/runtime.exs
index a58df29..05d6c7c 100644
--- a/config/runtime.exs
+++ b/config/runtime.exs
@@ -7,8 +7,6 @@ Application.app_dir(:geo_therminator, "priv")
config :geo_therminator,
api_timeout: 30_000,
- api_username: get_env("API_USERNAME"),
- api_password: get_env("API_PASSWORD"),
api_auth_url:
get_env("API_AUTH_URL", "https://thermia-auth-api.azurewebsites.net/api/v1/Jwt/login"),
api_installations_url:
diff --git a/lib/geo_therminator/application.ex b/lib/geo_therminator/application.ex
index 2d82147..9ae010a 100644
--- a/lib/geo_therminator/application.ex
+++ b/lib/geo_therminator/application.ex
@@ -7,20 +7,13 @@ defmodule GeoTherminator.Application do
@impl true
def start(_type, _args) do
- auth_username = Application.get_env(:geo_therminator, :api_username)
- auth_password = Application.get_env(:geo_therminator, :api_password)
-
children = [
{Finch, name: GeoTherminator.PumpAPI.HTTP},
{Phoenix.PubSub, name: GeoTherminator.PumpAPI.Device.PubSub},
{Registry, keys: :unique, name: GeoTherminator.PumpAPI.Device.Registry},
{DynamicSupervisor, strategy: :one_for_one, name: GeoTherminator.PumpAPI.Device.Supervisor},
- {GeoTherminator.PumpAPI.Auth.Server,
- %GeoTherminator.PumpAPI.Auth.Server.Options{
- server_name: GeoTherminator.PumpAPI.Auth.Server,
- username: auth_username,
- password: auth_password
- }},
+ {DynamicSupervisor,
+ strategy: :one_for_one, name: GeoTherminator.PumpAPI.Auth.Server.Supervisor},
# Start the Telemetry supervisor
GeoTherminatorWeb.Telemetry,
diff --git a/lib/geo_therminator/pump_api/auth/api.ex b/lib/geo_therminator/pump_api/auth/api.ex
index c85d2a3..ff60fd4 100644
--- a/lib/geo_therminator/pump_api/auth/api.ex
+++ b/lib/geo_therminator/pump_api/auth/api.ex
@@ -4,7 +4,7 @@ defmodule GeoTherminator.PumpAPI.Auth.API do
require Logger
- @spec auth(String.t(), String.t()) :: Auth.User.t()
+ @spec auth(String.t(), String.t()) :: {:ok, Auth.User.t()} | :error
def auth(username, password) do
url = Application.get_env(:geo_therminator, :api_auth_url)
@@ -14,32 +14,30 @@ defmodule GeoTherminator.PumpAPI.Auth.API do
password: password
})
- {:ok, response} = Finch.request(req, HTTP)
+ with {:ok, response} <- Finch.request(req, HTTP),
+ 200 <- response.status,
+ {:ok, json} <- Jason.decode(response.body),
+ {:ok, valid_to, _} = DateTime.from_iso8601(json["tokenValidToUtc"]) do
+ token = %Auth.Token{
+ token: json["token"],
+ token_valid_to: valid_to
+ }
- if response.status != 200 do
- raise "Request error #{response.status}: #{inspect(response.body)}"
+ {:ok,
+ %Auth.User{
+ user_name: json["userName"],
+ email: json["email"],
+ first_name: json["firstName"],
+ last_name: json["lastName"],
+ culture: json["culture"],
+ eula_accepted: json["eulaAccepted"],
+ is_authenticated: json["isAuthenticated"],
+ time_zone: json["timeZone"],
+ token: token
+ }}
+ else
+ _ -> :error
end
-
- json = Jason.decode!(response.body)
-
- {:ok, valid_to, _} = DateTime.from_iso8601(json["tokenValidToUtc"])
-
- token = %Auth.Token{
- token: json["token"],
- token_valid_to: valid_to
- }
-
- %Auth.User{
- user_name: json["userName"],
- email: json["email"],
- first_name: json["firstName"],
- last_name: json["lastName"],
- culture: json["culture"],
- eula_accepted: json["eulaAccepted"],
- is_authenticated: json["isAuthenticated"],
- time_zone: json["timeZone"],
- token: token
- }
end
@spec installations_info(Auth.User.t()) :: [Auth.InstallationInfo.t()]
diff --git a/lib/geo_therminator/pump_api/auth/server.ex b/lib/geo_therminator/pump_api/auth/server.ex
index 0fa5377..b89fdd8 100644
--- a/lib/geo_therminator/pump_api/auth/server.ex
+++ b/lib/geo_therminator/pump_api/auth/server.ex
@@ -32,24 +32,25 @@ defmodule GeoTherminator.PumpAPI.Auth.Server do
@impl true
def init(%Options{} = opts) do
- {:ok, %State{username: opts.username, password: opts.password}, {:continue, :init}}
- end
+ case Auth.API.auth(opts.username, opts.password) do
+ {:ok, user} ->
+ installations = Auth.API.installations_info(user)
- @impl true
- def handle_continue(:init, state) do
- user = Auth.API.auth(state.username, state.password)
- installations = Auth.API.installations_info(user)
+ schedule_token_check()
- schedule_token_check()
+ state = %State{
+ authed_user: user,
+ installations: installations,
+ installations_fetched: true,
+ username: opts.username,
+ password: opts.password
+ }
- state = %State{
- state
- | authed_user: user,
- installations: installations,
- installations_fetched: true
- }
+ {:ok, state}
- {:noreply, state}
+ :error ->
+ {:stop, :error}
+ end
end
@impl true
diff --git a/lib/geo_therminator_web/live/main/device_list.ex b/lib/geo_therminator_web/live/main/device_list.ex
new file mode 100644
index 0000000..25e37b0
--- /dev/null
+++ b/lib/geo_therminator_web/live/main/device_list.ex
@@ -0,0 +1,13 @@
+defmodule GeoTherminatorWeb.MainLive.DeviceList do
+ use GeoTherminatorWeb, :live_view
+
+ @impl true
+ def mount(_params, _session, socket) do
+ user = GeoTherminator.PumpAPI.Auth.Server.get_auth(GeoTherminator.PumpAPI.Auth.Server)
+
+ installations =
+ GeoTherminator.PumpAPI.Auth.Server.get_installations(GeoTherminator.PumpAPI.Auth.Server)
+
+ {:ok, assign(socket, user: user, installations: installations)}
+ end
+end
diff --git a/lib/geo_therminator_web/live/main/device_list.html.heex b/lib/geo_therminator_web/live/main/device_list.html.heex
new file mode 100644
index 0000000..52e57b0
--- /dev/null
+++ b/lib/geo_therminator_web/live/main/device_list.html.heex
@@ -0,0 +1,20 @@
+
+
+ Welcome, <%= @user.first_name %>!
+
+
+
+ Your available pumps
+
+ <%= for installation <- @installations do %>
+ -
+ <%= live_redirect(installation.id,
+ to: Routes.live_path(@socket, GeoTherminatorWeb.MainLive.Pump, installation.id)
+ ) %>
+
+ <% end %>
+
+
+
+
+
diff --git a/lib/geo_therminator_web/live/main/index.ex b/lib/geo_therminator_web/live/main/index.ex
index 78c71da..1b9dd24 100644
--- a/lib/geo_therminator_web/live/main/index.ex
+++ b/lib/geo_therminator_web/live/main/index.ex
@@ -1,13 +1,35 @@
defmodule GeoTherminatorWeb.MainLive.Index do
use GeoTherminatorWeb, :live_view
- @impl true
+ @impl Phoenix.LiveView
def mount(_params, _session, socket) do
- user = GeoTherminator.PumpAPI.Auth.Server.get_auth(GeoTherminator.PumpAPI.Auth.Server)
+ {:ok, assign(socket, error: false)}
+ end
- installations =
- GeoTherminator.PumpAPI.Auth.Server.get_installations(GeoTherminator.PumpAPI.Auth.Server)
+ @impl Phoenix.LiveView
+ def handle_event(evt, val, socket)
- {:ok, assign(socket, user: user, installations: installations)}
+ def handle_event("login", values, socket) do
+ on_start =
+ DynamicSupervisor.start_child(
+ GeoTherminator.PumpAPI.Auth.Server.Supervisor,
+ {GeoTherminator.PumpAPI.Auth.Server,
+ %GeoTherminator.PumpAPI.Auth.Server.Options{
+ server_name: GeoTherminator.PumpAPI.Auth.Server,
+ username: values["username"],
+ password: values["password"]
+ }}
+ )
+
+ case on_start do
+ {:ok, _} ->
+ {:noreply,
+ push_redirect(socket,
+ to: Routes.live_path(socket, GeoTherminatorWeb.MainLive.DeviceList)
+ )}
+
+ _ ->
+ {:noreply, assign(socket, error: true)}
+ end
end
end
diff --git a/lib/geo_therminator_web/live/main/index.html.heex b/lib/geo_therminator_web/live/main/index.html.heex
index 99a38c0..71b4596 100644
--- a/lib/geo_therminator_web/live/main/index.html.heex
+++ b/lib/geo_therminator_web/live/main/index.html.heex
@@ -1,17 +1,9 @@
-
-
- Welcome, <%= @user.first_name %>!
-
+
+ <%= if @error do %>
+
Error occurred, please try again.
+ <% end %>
+
diff --git a/lib/geo_therminator_web/router.ex b/lib/geo_therminator_web/router.ex
index 566e4d3..b0bf41c 100644
--- a/lib/geo_therminator_web/router.ex
+++ b/lib/geo_therminator_web/router.ex
@@ -18,6 +18,7 @@ defmodule GeoTherminatorWeb.Router do
pipe_through :browser
live "/", MainLive.Index
+ live "/devices", MainLive.DeviceList
live "/pump/:id", MainLive.Pump
end
diff --git a/mix.exs b/mix.exs
index 0c12809..0a53755 100644
--- a/mix.exs
+++ b/mix.exs
@@ -42,7 +42,7 @@ defmodule GeoTherminator.MixProject do
{:phoenix, "~> 1.6.2"},
{:phoenix_html, "~> 3.0"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
- {:phoenix_live_view, "~> 0.17.0"},
+ {:phoenix_live_view, "~> 0.17.11"},
{:floki, ">= 0.30.0", only: :test},
{:phoenix_live_dashboard, "~> 0.6"},
{:esbuild, "~> 0.2", runtime: Mix.env() == :dev},
diff --git a/mix.lock b/mix.lock
index ca6c2e3..2955dd9 100644
--- a/mix.lock
+++ b/mix.lock
@@ -15,26 +15,26 @@
"floki": {:hex, :floki, "0.32.0", "f915dc15258bc997d49be1f5ef7d3992f8834d6f5695270acad17b41f5bcc8e2", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "1c5a91cae1fd8931c26a4826b5e2372c284813904c8bacb468b5de39c7ececbd"},
"gettext": {:hex, :gettext, "0.18.2", "7df3ea191bb56c0309c00a783334b288d08a879f53a7014341284635850a6e55", [:mix], [], "hexpm", "f9f537b13d4fdd30f3039d33cb80144c3aa1f8d9698e47d7bcbcc8df93b1f5c5"},
"html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"},
- "jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"},
+ "jason": {:hex, :jason, "1.3.0", "fa6b82a934feb176263ad2df0dbd91bf633d4a46ebfdffea0c8ae82953714946", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "53fc1f51255390e0ec7e50f9cb41e751c260d065dcba2bf0d08dc51a4002c2ac"},
"mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"},
"mint": {:hex, :mint, "1.4.0", "cd7d2451b201fc8e4a8fd86257fb3878d9e3752899eb67b0c5b25b180bde1212", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "10a99e144b815cbf8522dccbc8199d15802440fc7a64d67b6853adb6fa170217"},
"nimble_options": {:hex, :nimble_options, "0.3.7", "1e52dd7673d36138b1a5dede183b5d86dff175dc46d104a8e98e396b85b04670", [:mix], [], "hexpm", "2086907e6665c6b6579be54ef5001928df5231f355f71ed258f80a55e9f63633"},
"nimble_pool": {:hex, :nimble_pool, "0.2.4", "1db8e9f8a53d967d595e0b32a17030cdb6c0dc4a451b8ac787bf601d3f7704c3", [:mix], [], "hexpm", "367e8071e137b787764e6a9992ccb57b276dc2282535f767a07d881951ebeac6"},
"oncrash": {:hex, :oncrash, "0.1.0", "9cf4ae8eba4ea250b579470172c5e9b8c75418b2264de7dbcf42e408d62e30fb", [:mix], [], "hexpm", "6968e775491cd857f9b6ff940bf2574fd1c2fab84fa7e14d5f56c39174c00018"},
- "phoenix": {:hex, :phoenix, "1.6.2", "6cbd5c8ed7a797f25a919a37fafbc2fb1634c9cdb12a4448d7a5d0b26926f005", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7bbee475acae0c3abc229b7f189e210ea788e63bd168e585f60c299a4b2f9133"},
- "phoenix_html": {:hex, :phoenix_html, "3.1.0", "0b499df05aad27160d697a9362f0e89fa0e24d3c7a9065c2bd9d38b4d1416c09", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "0c0a98a2cefa63433657983a2a594c7dee5927e4391e0f1bfd3a151d1def33fc"},
+ "phoenix": {:hex, :phoenix, "1.6.12", "f8f8ac077600f84419806dd53114b2e77aedde7a502e74181a7d886355aa0643", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2d6cf5583c9c20f7103c40e6014ef802d96553b8e5d6585ad6e627bd5ddb0d12"},
+ "phoenix_html": {:hex, :phoenix_html, "3.2.0", "1c1219d4b6cb22ac72f12f73dc5fad6c7563104d083f711c3fcd8551a1f4ae11", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "36ec97ba56d25c0136ef1992c37957e4246b649d620958a1f9fa86165f8bc54f"},
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.6.1", "fb94a33c077141f9ac7930b322a7a3b99f9b144bf3a08dd667b9f9aaf0319889", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.3", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.17.1", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "6faf1373e5846c8ab68c2cf55cfa5c196c1fbbe0c72d12a4cdfaaac6ef189948"},
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.3.3", "3a53772a6118d5679bf50fc1670505a290e32a1d195df9e069d8c53ab040c054", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "766796676e5f558dbae5d1bdb066849673e956005e3730dfd5affd7a6da4abac"},
- "phoenix_live_view": {:hex, :phoenix_live_view, "0.17.5", "63f52a6f9f6983f04e424586ff897c016ecc5e4f8d1e2c22c2887af1c57215d8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.5.9 or ~> 1.6.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c5586e6a3d4df71b8214c769d4f5eb8ece2b4001711a7ca0f97323c36958b0e3"},
- "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.0.0", "a1ae76717bb168cdeb10ec9d92d1480fec99e3080f011402c0a2d68d47395ffb", [:mix], [], "hexpm", "c52d948c4f261577b9c6fa804be91884b381a7f8f18450c5045975435350f771"},
- "phoenix_view": {:hex, :phoenix_view, "1.0.0", "fea71ecaaed71178b26dd65c401607de5ec22e2e9ef141389c721b3f3d4d8011", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "82be3e2516f5633220246e2e58181282c71640dab7afc04f70ad94253025db0c"},
- "plug": {:hex, :plug, "1.12.1", "645678c800601d8d9f27ad1aebba1fdb9ce5b2623ddb961a074da0b96c35187d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d57e799a777bc20494b784966dc5fbda91eb4a09f571f76545b72a634ce0d30b"},
+ "phoenix_live_view": {:hex, :phoenix_live_view, "0.17.11", "205f6aa5405648c76f2abcd57716f42fc07d8f21dd8ea7b262dd12b324b50c95", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7177791944b7f90ed18f5935a6a5f07f760b36f7b3bdfb9d28c57440a3c43f99"},
+ "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"},
+ "phoenix_view": {:hex, :phoenix_view, "1.1.2", "1b82764a065fb41051637872c7bd07ed2fdb6f5c3bd89684d4dca6e10115c95a", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "7ae90ad27b09091266f6adbb61e1d2516a7c3d7062c6789d46a7554ec40f3a56"},
+ "plug": {:hex, :plug, "1.13.6", "187beb6b67c6cec50503e940f0434ea4692b19384d47e5fdfd701e93cadb4cc2", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "02b9c6b9955bce92c829f31d6284bf53c591ca63c4fb9ff81dfd0418667a34ff"},
"plug_cowboy": {:hex, :plug_cowboy, "2.5.2", "62894ccd601cf9597e2c23911ff12798a8a18d237e9739f58a6b04e4988899fe", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ea6e87f774c8608d60c8d34022a7d073bd7680a0a013f049fc62bf35efea1044"},
- "plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"},
+ "plug_crypto": {:hex, :plug_crypto, "1.2.3", "8f77d13aeb32bfd9e654cb68f0af517b371fb34c56c9f2b58fe3df1235c1251a", [:mix], [], "hexpm", "b5672099c6ad5c202c45f5a403f21a3411247f164e4a8fab056e5cd8a290f4a2"},
"poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"},
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
"saxy": {:hex, :saxy, "1.4.0", "c7203ad20001f72eaaad07d08f82be063fa94a40924e6bb39d93d55f979abcba", [:mix], [], "hexpm", "3fe790354d3f2234ad0b5be2d99822a23fa2d4e8ccd6657c672901dac172e9a9"},
- "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"},
+ "telemetry": {:hex, :telemetry, "1.1.0", "a589817034a27eab11144ad24d5c0f9fab1f58173274b1e9bae7074af9cbee51", [:rebar3], [], "hexpm", "b727b2a1f75614774cff2d7565b64d0dfa5bd52ba517f16543e6fc7efcc0df48"},
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"},
"telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"},
"wx": {:hex, :bridge, "1.0.10", "5051dfe881e498a0bc056603df97b734bfe5fdc084f5e56dc42fab8049247144", [:mix], [{:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "b30941e57a194e557a123c5246f123f8b13acdd5c580f75590a52e72bda15632"},