From 9ae4476b26f5b8cfd451eca1bf1e113a739985bd Mon Sep 17 00:00:00 2001 From: Henry Popp Date: Sun, 8 Dec 2024 18:37:35 -0600 Subject: [PATCH 1/4] docs: v2 migration guide --- CHANGELOG.md | 4 ++ README.md | 19 ++--- docs/Migrating to v2-0-0.md | 134 ++++++++++++++++++++++++++++++++++++ 3 files changed, 148 insertions(+), 9 deletions(-) create mode 100644 docs/Migrating to v2-0-0.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bae528b..4176419a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## v2.0.0 + +No additional changes since v2.0.0-rc.3. + ## v2.0.0-rc.3 ### Breaking Changes diff --git a/README.md b/README.md index 3c6d29e4..f539eeb0 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,6 @@ [![Last Updated](https://img.shields.io/github/last-commit/codedge-llc/pigeon.svg)](https://github.com/codedge-llc/pigeon/commits/master) [![Documentation](https://img.shields.io/badge/documentation-gray)](https://hexdocs.pm/pigeon/) -_Pigeon v2.0 is in release candidate status. See [the latest stable 1.6 on Hex](https://hex.pm/packages/pigeon) -or [the 1.6 branch on GitHub](https://github.com/codedge-llc/pigeon/tree/v1.6) for installation._ - ## Installation Add `:pigeon` and as a `mix.exs` dependency: @@ -19,31 +16,35 @@ Add `:pigeon` and as a `mix.exs` dependency: ```elixir def deps do [ - {:pigeon, "~> 2.0.0-rc.3"} + {:pigeon, "~> 2.0"} ] end ``` +## Upgrading from v1.6 + +See the [migration guide](./docs/Migrating to v2-0-0.md) for instructions. + ## Getting Started Check the module documentation for your push notification service. -- [Pigeon.ADM](https://hexdocs.pm/pigeon/2.0.0-rc.2/Pigeon.ADM.html) - Amazon Android. -- [Pigeon.APNS](https://hexdocs.pm/pigeon/2.0.0-rc.2/Pigeon.APNS.html) - Apple iOS. -- [Pigeon.FCM](https://hexdocs.pm/pigeon/2.0.0-rc.2/Pigeon.FCM.html) - Firebase Cloud Messaging v1 API. +- [Pigeon.ADM](https://hexdocs.pm/pigeon/2.0.0/Pigeon.ADM.html) - Amazon Android. +- [Pigeon.APNS](https://hexdocs.pm/pigeon/2.0.0/Pigeon.APNS.html) - Apple iOS. +- [Pigeon.FCM](https://hexdocs.pm/pigeon/2.0.0/Pigeon.FCM.html) - Firebase Cloud Messaging v1 API. ### Creating Dynamic Runtime Dispatchers Pigeon can spin up dynamic dispatchers for a variety of advanced use-cases, such as supporting dozens of dispatcher configurations or custom connection pools. -See [Pigeon.Dispatcher](https://hexdocs.pm/pigeon/2.0.0-rc.1/Pigeon.Dispatcher.html) for instructions. +See [Pigeon.Dispatcher](https://hexdocs.pm/pigeon/2.0.0/Pigeon.Dispatcher.html) for instructions. ### Writing a Custom Dispatcher Adapter Want to write a Pigeon adapter for an unsupported push notification service? -See [Pigeon.Adapter](https://hexdocs.pm/pigeon/2.0.0-rc.1/Pigeon.Adapter.html) for instructions. +See [Pigeon.Adapter](https://hexdocs.pm/pigeon/2.0.0/Pigeon.Adapter.html) for instructions. ## Contributing diff --git a/docs/Migrating to v2-0-0.md b/docs/Migrating to v2-0-0.md new file mode 100644 index 00000000..20d6f637 --- /dev/null +++ b/docs/Migrating to v2-0-0.md @@ -0,0 +1,134 @@ +# Migrating to v2.0 + +## Migrating from v2.0 RCs + +See the CHANGELOG for specific breaking changes from each RC. If upgrading from RC3, +no additional changes are required. + +## Migrating from v1.6 + +1. Update your mix.exs dependencies. + +```diff +[ + + {:pigeon, "~> 2.0"} # Change this + - {:kadadbra, ~> 0.6.0} # Remove this +] +``` + +2. Update configuration of your push workers. + +Pigeon push workers are now started under your application supervision tree instead of +Pigeon. + +Using APNS as an example, if you have a default push worker configured like this: + +``` +config :pigeon, :apns, + apns_default: %{ + cert: "cert.pem", + key: "key_unencrypted.pem", + mode: :dev + } +``` + +Remove the config and instead define a push worker like this: + +``` +# lib/your_app/apns.ex + +defmodule YourApp.APNS do + use Pigeon.Dispatcher, otp_app: :your_app +end +``` + +``` +# config.exs + +config :your_app, YourApp.APNS, + adapter: Pigeon.APNS, + cert: File.read!("cert.pem"), + key: File.read!("key_unencrypted.pem"), + mode: :dev +``` + +And add it to your supervision tree. + +``` +defmodule YourApp.Application do + @moduledoc false + + use Application + + @doc false + def start(_type, _args) do + children = [ + YourApp.APNS + ] + opts = [strategy: :one_for_one, name: YourApp.Supervisor] + Supervisor.start_link(children, opts) + end +end +``` + +Configuration of the worker can now be passed directly if desired. + +``` +defmodule YourApp.Application do + @moduledoc false + + use Application + + @doc false + def start(_type, _args) do + children = [ + {YourApp.APNS, apns_opts()} + ] + opts = [strategy: :one_for_one, name: YourApp.Supervisor] + Supervisor.start_link(children, opts) + end + + defp apns_opts do + [ + adapter: Pigeon.APNS, + cert: File.read!("cert.pem"), + key: File.read!("key_unencrypted.pem"), + mode: :dev + ] + end +end +``` + +And that's it! See the rest of this guide for other breaking changes specific to your +push type. + +### Breaking Changes for ADM + +No addtional changes required apart from the configuration above. + +### Breaking Changes for APNS + +- `:certfile` and `:keyfile` are no longer valid options for APNS configurations. + Instead, read the file before loading (e.g. `cert: File.read!("cert.pem")`) + ([#183](https://github.com/codedge-llc/pigeon/pull/183)) + +### Breaking Changes for FCM + +1. FCM's legacy API, used by Pigeon v1.6, has been decommissioned. To upgrade, add the legacy + adapter to your mix.exs. + +```elixir +def deps do + [ + {:pigeon_legacy_fcm, "~> 0.1.0"} + ] +end +``` + +2. Rename all instances of `Pigeon.FCM` in your project to `Pigeon.LegacyFCM`. For example, + `Pigeon.FCM.Notification` becomes `Pigeon.LegacyFCM.Notification`. + +Once renamed, your project should now compile again. + +3. Upgrade to the new FCM v1 API. Follow the instructions in `Pigeon.FCM` to set up a new + push worker and update your Pigeon FCM notifications accordingly. From 6c94c817523388332b806c136d9152961411647d Mon Sep 17 00:00:00 2001 From: Henry Popp Date: Sun, 8 Dec 2024 18:40:40 -0600 Subject: [PATCH 2/4] fix: minor tweaks --- docs/Migrating to v2-0-0.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/Migrating to v2-0-0.md b/docs/Migrating to v2-0-0.md index 20d6f637..9dce672c 100644 --- a/docs/Migrating to v2-0-0.md +++ b/docs/Migrating to v2-0-0.md @@ -2,17 +2,17 @@ ## Migrating from v2.0 RCs -See the CHANGELOG for specific breaking changes from each RC. If upgrading from RC3, +See the [CHANGELOG](./CHANGELOG.md) for specific breaking changes from each RC. If upgrading from RC3, no additional changes are required. ## Migrating from v1.6 1. Update your mix.exs dependencies. -```diff +```elixir [ - + {:pigeon, "~> 2.0"} # Change this - - {:kadadbra, ~> 0.6.0} # Remove this + {:pigeon, "~> 2.0"} # Change this + {:kadadbra, ~> 0.6.0} # Remove this ] ``` @@ -23,7 +23,7 @@ Pigeon. Using APNS as an example, if you have a default push worker configured like this: -``` +```elixir config :pigeon, :apns, apns_default: %{ cert: "cert.pem", @@ -34,7 +34,7 @@ config :pigeon, :apns, Remove the config and instead define a push worker like this: -``` +```elixir # lib/your_app/apns.ex defmodule YourApp.APNS do @@ -42,7 +42,7 @@ defmodule YourApp.APNS do end ``` -``` +```elixir # config.exs config :your_app, YourApp.APNS, @@ -54,7 +54,7 @@ config :your_app, YourApp.APNS, And add it to your supervision tree. -``` +```elixir defmodule YourApp.Application do @moduledoc false @@ -73,7 +73,7 @@ end Configuration of the worker can now be passed directly if desired. -``` +```elixir defmodule YourApp.Application do @moduledoc false From 18b0ac6b8e46f48e1e3d868c9492b6b032a8c9eb Mon Sep 17 00:00:00 2001 From: Henry Popp Date: Sun, 8 Dec 2024 18:47:26 -0600 Subject: [PATCH 3/4] docs: more tweaks --- CHANGELOG.md | 2 +- README.md | 10 +++++----- docs/Migrating to v2-0-0.md | 2 +- mix.exs | 3 ++- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4176419a..8c664b5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## v2.0.0 -No additional changes since v2.0.0-rc.3. +No additional changes since v2.0.0-rc.3. Stable release. ## v2.0.0-rc.3 diff --git a/README.md b/README.md index f539eeb0..f558809a 100644 --- a/README.md +++ b/README.md @@ -29,22 +29,22 @@ See the [migration guide](./docs/Migrating to v2-0-0.md) for instructions. Check the module documentation for your push notification service. -- [Pigeon.ADM](https://hexdocs.pm/pigeon/2.0.0/Pigeon.ADM.html) - Amazon Android. -- [Pigeon.APNS](https://hexdocs.pm/pigeon/2.0.0/Pigeon.APNS.html) - Apple iOS. -- [Pigeon.FCM](https://hexdocs.pm/pigeon/2.0.0/Pigeon.FCM.html) - Firebase Cloud Messaging v1 API. +- [Pigeon.ADM](https://hexdocs.pm/pigeon/Pigeon.ADM.html) - Amazon Android. +- [Pigeon.APNS](https://hexdocs.pm/pigeon/Pigeon.APNS.html) - Apple iOS. +- [Pigeon.FCM](https://hexdocs.pm/pigeon/Pigeon.FCM.html) - Firebase Cloud Messaging v1 API. ### Creating Dynamic Runtime Dispatchers Pigeon can spin up dynamic dispatchers for a variety of advanced use-cases, such as supporting dozens of dispatcher configurations or custom connection pools. -See [Pigeon.Dispatcher](https://hexdocs.pm/pigeon/2.0.0/Pigeon.Dispatcher.html) for instructions. +See [Pigeon.Dispatcher](https://hexdocs.pm/pigeon/Pigeon.Dispatcher.html) for instructions. ### Writing a Custom Dispatcher Adapter Want to write a Pigeon adapter for an unsupported push notification service? -See [Pigeon.Adapter](https://hexdocs.pm/pigeon/2.0.0/Pigeon.Adapter.html) for instructions. +See [Pigeon.Adapter](https://hexdocs.pm/pigeon/Pigeon.Adapter.html) for instructions. ## Contributing diff --git a/docs/Migrating to v2-0-0.md b/docs/Migrating to v2-0-0.md index 9dce672c..6450c38c 100644 --- a/docs/Migrating to v2-0-0.md +++ b/docs/Migrating to v2-0-0.md @@ -2,7 +2,7 @@ ## Migrating from v2.0 RCs -See the [CHANGELOG](./CHANGELOG.md) for specific breaking changes from each RC. If upgrading from RC3, +See the [CHANGELOG](../CHANGELOG.md) for specific breaking changes from each RC. If upgrading from RC3, no additional changes are required. ## Migrating from v1.6 diff --git a/mix.exs b/mix.exs index 4b79e925..7cd5eab1 100644 --- a/mix.exs +++ b/mix.exs @@ -60,7 +60,8 @@ defmodule Pigeon.Mixfile do [ extras: [ "CHANGELOG.md", - LICENSE: [title: "License"] + LICENSE: [title: "License"], + "docs/Migrating to v2-0-0.md": [title: "Upgrading to v2.0"] ], groups_for_modules: [ "ADM - Amazon Android": [Pigeon.ADM, Pigeon.ADM.Notification], From 8a39b3e2a1a6d18650bcbf08ce35463b14e7c318 Mon Sep 17 00:00:00 2001 From: Henry Popp Date: Mon, 9 Dec 2024 10:06:06 -0600 Subject: [PATCH 4/4] chore: bump version to 2.0.0 --- docs/Migrating to v2-0-0.md | 2 +- mix.exs | 2 +- mix.lock | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/Migrating to v2-0-0.md b/docs/Migrating to v2-0-0.md index 6450c38c..6863d696 100644 --- a/docs/Migrating to v2-0-0.md +++ b/docs/Migrating to v2-0-0.md @@ -115,7 +115,7 @@ No addtional changes required apart from the configuration above. ### Breaking Changes for FCM 1. FCM's legacy API, used by Pigeon v1.6, has been decommissioned. To upgrade, add the legacy - adapter to your mix.exs. + adapter to your mix.exs and follow worker setup instructions. ```elixir def deps do diff --git a/mix.exs b/mix.exs index 7cd5eab1..59bcdc67 100644 --- a/mix.exs +++ b/mix.exs @@ -2,7 +2,7 @@ defmodule Pigeon.Mixfile do use Mix.Project @source_url "https://github.com/codedge-llc/pigeon" - @version "2.0.0-rc.3" + @version "2.0.0" def project do [ diff --git a/mix.lock b/mix.lock index 5cb239f0..b3d9461c 100644 --- a/mix.lock +++ b/mix.lock @@ -2,28 +2,28 @@ "bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"}, "castore": {:hex, :castore, "1.0.8", "dedcf20ea746694647f883590b82d9e96014057aff1d44d03ec90f36a5c0dc6e", [:mix], [], "hexpm", "0b2b66d2ee742cb1d9cb8c8be3b43c3a70ee8651f37b75a8b982e036752983f1"}, "certifi": {:hex, :certifi, "2.13.0", "e52be248590050b2dd33b0bb274b56678f9068e67805dca8aa8b1ccdb016bbf6", [:rebar3], [], "hexpm", "8f3d9533a0f06070afdfd5d596b32e21c6580667a492891851b0e2737bc507a1"}, - "credo": {:hex, :credo, "1.7.7", "771445037228f763f9b2afd612b6aa2fd8e28432a95dbbc60d8e03ce71ba4446", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8bc87496c9aaacdc3f90f01b7b0582467b69b4bd2441fe8aae3109d843cc2f2e"}, - "dialyxir": {:hex, :dialyxir, "1.4.3", "edd0124f358f0b9e95bfe53a9fcf806d615d8f838e2202a9f430d59566b6b53b", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "bf2cfb75cd5c5006bec30141b131663299c661a864ec7fbbc72dfa557487a986"}, + "credo": {:hex, :credo, "1.7.10", "6e64fe59be8da5e30a1b96273b247b5cf1cc9e336b5fd66302a64b25749ad44d", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "71fbc9a6b8be21d993deca85bf151df023a3097b01e09a2809d460348561d8cd"}, + "dialyxir": {:hex, :dialyxir, "1.4.5", "ca1571ac18e0f88d4ab245f0b60fa31ff1b12cbae2b11bd25d207f865e8ae78a", [:mix], [{:erlex, ">= 0.2.7", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "b0fb08bb8107c750db5c0b324fa2df5ceaa0f9307690ee3c1f6ba5b9eb5d35c3"}, "earmark": {:hex, :earmark, "1.4.47", "7e7596b84fe4ebeb8751e14cbaeaf4d7a0237708f2ce43630cfd9065551f94ca", [:mix], [], "hexpm", "3e96bebea2c2d95f3b346a7ff22285bc68a99fbabdad9b655aa9c6be06c698f8"}, "earmark_parser": {:hex, :earmark_parser, "1.4.41", "ab34711c9dc6212dda44fcd20ecb87ac3f3fce6f0ca2f28d4a00e4154f8cd599", [:mix], [], "hexpm", "a81a04c7e34b6617c2792e291b5a2e57ab316365c2644ddc553bb9ed863ebefa"}, "erlex": {:hex, :erlex, "0.2.7", "810e8725f96ab74d17aac676e748627a07bc87eb950d2b83acd29dc047a30595", [:mix], [], "hexpm", "3ed95f79d1a844c3f6bf0cea61e0d5612a42ce56da9c03f01df538685365efb0"}, - "ex_doc": {:hex, :ex_doc, "0.34.2", "13eedf3844ccdce25cfd837b99bea9ad92c4e511233199440488d217c92571e8", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "5ce5f16b41208a50106afed3de6a2ed34f4acfd65715b82a0b84b49d995f95c1"}, - "excoveralls": {:hex, :excoveralls, "0.18.2", "86efd87a0676a3198ff50b8c77620ea2f445e7d414afa9ec6c4ba84c9f8bdcc2", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "230262c418f0de64077626a498bd4fdf1126d5c2559bb0e6b43deac3005225a4"}, + "ex_doc": {:hex, :ex_doc, "0.35.1", "de804c590d3df2d9d5b8aec77d758b00c814b356119b3d4455e4b8a8687aecaf", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "2121c6402c8d44b05622677b761371a759143b958c6c19f6558ff64d0aed40df"}, + "excoveralls": {:hex, :excoveralls, "0.18.3", "bca47a24d69a3179951f51f1db6d3ed63bca9017f476fe520eb78602d45f7756", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "746f404fcd09d5029f1b211739afb8fb8575d775b21f6a3908e7ce3e640724c6"}, "file_system": {:hex, :file_system, "1.0.1", "79e8ceaddb0416f8b8cd02a0127bdbababe7bf4a23d2a395b983c1f8b3f73edd", [:mix], [], "hexpm", "4414d1f38863ddf9120720cd976fce5bdde8e91d8283353f0e31850fa89feb9e"}, - "finch": {:hex, :finch, "0.18.0", "944ac7d34d0bd2ac8998f79f7a811b21d87d911e77a786bc5810adb75632ada4", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "69f5045b042e531e53edc2574f15e25e735b522c37e2ddb766e15b979e03aa65"}, + "finch": {:hex, :finch, "0.19.0", "c644641491ea854fc5c1bbaef36bfc764e3f08e7185e1f084e35e0672241b76d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "fc5324ce209125d1e2fa0fcd2634601c52a787aff1cd33ee833664a5af4ea2b6"}, "gen_stage": {:hex, :gen_stage, "1.1.0", "dd0c0f8d2f3b993fdbd3d58e94abbe65380f4e78bdee3fa93d5618d7d14abe60", [:mix], [], "hexpm", "7f2b36a6d02f7ef2ba410733b540ec423af65ec9c99f3d1083da508aca3b9305"}, "goth": {:hex, :goth, "1.4.3", "80e86225ae174844e6a77b61982fafadfc715277db465e0956348d8bdd56b231", [:mix], [{:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:jose, "~> 1.11", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "34e2012ed1af2fe2446083da60a988fd9829943d30e4447832646c3a6863a7e6"}, "hackney": {:hex, :hackney, "1.17.1", "08463f93d2cc1a03817bf28d8dae6021543f773bd436c9377047224856c4422c", [:rebar3], [{:certifi, "~> 2.5", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "~> 3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "d2cba9e3c8103ad0320623e9f1c33e8d378a15eaabe2ee8ae441898f3d35a18c"}, "hpack": {:hex, :hpack_erl, "0.3.0", "2461899cc4ab6a0ef8e970c1661c5fc6a52d3c25580bc6dd204f84ce94669926", [:rebar3], [], "hexpm", "d6137d7079169d8c485c6962dfe261af5b9ef60fbc557344511c1e65e3d95fb0"}, - "hpax": {:hex, :hpax, "1.0.0", "28dcf54509fe2152a3d040e4e3df5b265dcb6cb532029ecbacf4ce52caea3fd2", [:mix], [], "hexpm", "7f1314731d711e2ca5fdc7fd361296593fc2542570b3105595bb0bc6d0fad601"}, + "hpax": {:hex, :hpax, "1.0.1", "c857057f89e8bd71d97d9042e009df2a42705d6d690d54eca84c8b29af0787b0", [:mix], [], "hexpm", "4e2d5a4f76ae1e3048f35ae7adb1641c36265510a2d4638157fbcb53dda38445"}, "httpoison": {:hex, :httpoison, "2.2.1", "87b7ed6d95db0389f7df02779644171d7319d319178f6680438167d7b69b1f3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "51364e6d2f429d80e14fe4b5f8e39719cacd03eb3f9a9286e61e216feac2d2df"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, "joken": {:hex, :joken, "2.6.2", "5daaf82259ca603af4f0b065475099ada1b2b849ff140ccd37f4b6828ca6892a", [:mix], [{:jose, "~> 1.11.10", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "5134b5b0a6e37494e46dbf9e4dad53808e5e787904b7c73972651b51cce3d72b"}, "jose": {:hex, :jose, "1.11.10", "a903f5227417bd2a08c8a00a0cbcc458118be84480955e8d251297a425723f83", [:mix, :rebar3], [], "hexpm", "0d6cd36ff8ba174db29148fc112b5842186b68a90ce9fc2b3ec3afe76593e614"}, "kadabra": {:hex, :kadabra, "0.6.1", "c28a7bc310e0dcb671ab13f181d653479157a7764c06c5d9778e3953ed0e3c61", [:mix], [{:certifi, "~> 2.5", [hex: :certifi, repo: "hexpm", optional: false]}, {:hpack, "~> 0.3.0", [hex: :hpack_erl, repo: "hexpm", optional: false]}], "hexpm", "a87f29709326ee9b9dfa78e52bf9e6e99bc375c528347ff1363aa6748061cf35"}, - "makeup": {:hex, :makeup, "1.1.2", "9ba8837913bdf757787e71c1581c21f9d2455f4dd04cfca785c70bbfff1a76a3", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cce1566b81fbcbd21eca8ffe808f33b221f9eee2cbc7a1706fc3da9ff18e6cac"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.16.2", "627e84b8e8bf22e60a2579dad15067c755531fea049ae26ef1020cad58fe9578", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "41193978704763f6bbe6cc2758b84909e62984c7752b3784bd3c218bb341706b"}, + "makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"}, + "makeup_elixir": {:hex, :makeup_elixir, "1.0.0", "74bb8348c9b3a51d5c589bf5aebb0466a84b33274150e3b6ece1da45584afc82", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "49159b7d7d999e836bedaf09dcf35ca18b312230cf901b725a64f3f42e407983"}, "makeup_erlang": {:hex, :makeup_erlang, "1.0.1", "c7f58c120b2b5aa5fd80d540a89fdf866ed42f1f3994e4fe189abebeab610839", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "8a89a1eeccc2d798d6ea15496a6e4870b75e014d1af514b1b71fa33134f57814"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"},