diff --git a/documentation/dsls/DSL:-Wayfarer.cheatmd b/documentation/dsls/DSL:-Wayfarer.cheatmd deleted file mode 100644 index 530ad54..0000000 --- a/documentation/dsls/DSL:-Wayfarer.cheatmd +++ /dev/null @@ -1,2142 +0,0 @@ - -# DSL: Wayfarer.Dsl - -The Wayfarer DSL for defining static proxy configurations. - -## DSL options - -## wayfarer - - - - * [config](#module-config) - * health_checks - * check - * host_patterns - * pattern - * listeners - * http - * https - * targets - * http - * health_checks - * check - * https - * health_checks - * check - * plug - - - - - ---- - - - -### config - - - - * health_checks - * check - * host_patterns - * pattern - * listeners - * http - * https - * targets - * http - * health_checks - * check - * https - * health_checks - * check - * plug - - - -* `:name` (`t:String.t/0`) - - - - -##### health_checks - - - - * check - - - - - -###### check - - - - - - - -* `:name` - A unique name for the health check. - -* `:method` - The HTTP method to use for the request. Valid values are :get, :head, :post, :put, :delete, :connect, :options, :trace, :patch The default value is `:get`. - -* `:connect_timeout` (`t:pos_integer/0`) - Connection timeout in milliseconds The default value is `5000`. - -* `:response_timeout` (`t:pos_integer/0`) - Response timeout in milliseconds The default value is `500`. - -* `:hostname` - The HTTP hostname to use when sending the request. Defaults to the IP address. - -* `:interval` (`t:pos_integer/0`) - Interval in milliseconds The default value is `30000`. - -* `:threshold` (`t:pos_integer/0`) - Success threshold The default value is `3`. - -* `:path` (`t:String.t/0`) - Path The default value is `"/"`. - -* `:success_codes` - HTTP status codes which are considered successful. The default value is `[200..299]`. - - - - - - - -##### host_patterns - - - - * pattern - - - - - -###### pattern - - - - - - - -* `:pattern` (`t:String.t/0`) - Required. A hostname matching pattern. - - - - - - - -##### listeners - - - - * http - * https - - - - - -###### http - - - - - - - -* `:scheme` - Required. The listening protocol. Valid values are :http, :https - -* `:address` - Required. The address of the interface to listen on. - -* `:name` - A unique name for the listener (defaults to the URI). - -* `:port` (`t:pos_integer/0`) - Required. The TCP port on which to listen for incoming connections. - -* `:http_1_options` (`t:keyword/0`) - Options to configure the HTTP/1 stack in Bandit. The default value is `[]`. - -* `:http_2_options` (`t:keyword/0`) - Options to configure the HTTP/2 stack in Bandit. The default value is `[]`. - -* `:thousand_island_options` (`t:keyword/0`) - Possible options to configure a ThousandIsland server. The default value is `[]`. - -* `:websocket_options` (`t:keyword/0`) - Options to configure the WebSocket stack in Bandit. The default value is `[]`. - - - - - - -###### https - - - - - - - -* `:scheme` - Required. The listening protocol. Valid values are :http, :https - -* `:address` - Required. The address of the interface to listen on. - -* `:name` - A unique name for the listener (defaults to the URI). - -* `:port` (`t:pos_integer/0`) - Required. The TCP port on which to listen for incoming connections. - -* `:http_1_options` (`t:keyword/0`) - Options to configure the HTTP/1 stack in Bandit. The default value is `[]`. - -* `:http_2_options` (`t:keyword/0`) - Options to configure the HTTP/2 stack in Bandit. The default value is `[]`. - -* `:thousand_island_options` (`t:keyword/0`) - Possible options to configure a ThousandIsland server. The default value is `[]`. - -* `:websocket_options` (`t:keyword/0`) - Options to configure the WebSocket stack in Bandit. The default value is `[]`. - -* `:certfile` (`t:String.t/0`) - The path to a file containing the SSL certificate to use for this listener. - -* `:keyfile` (`t:String.t/0`) - The path to a file containing the SSL key to use for this listener. - -* `:cipher_suite` - Used to define a pre-selected set of ciphers, as described by `Plug.SSL.configure/1`. Valid values are nil, :strong, :compatible - - - - - - - -##### targets - - - - * http - * health_checks - * check - * https - * health_checks - * check - * plug - - - -* `:algorithm` - The target selection algorithm. Valid values are :round_robin, :sticky The default value is `:round_robin`. - - - -###### http - - - - * health_checks - * check - - - -* `:address` - Required. The address of the interface to listen on. - -* `:name` - A unique name for the target (defaults to the URI). - -* `:port` (`t:pos_integer/0`) - Required. The TCP port on which to listen for incoming connections. - - - -####### health_checks - - - - * check - - - - - -######## check - - - - - - - -* `:name` - A unique name for the health check. - -* `:method` - The HTTP method to use for the request. Valid values are :get, :head, :post, :put, :delete, :connect, :options, :trace, :patch The default value is `:get`. - -* `:connect_timeout` (`t:pos_integer/0`) - Connection timeout in milliseconds The default value is `5000`. - -* `:response_timeout` (`t:pos_integer/0`) - Response timeout in milliseconds The default value is `500`. - -* `:hostname` - The HTTP hostname to use when sending the request. Defaults to the IP address. - -* `:interval` (`t:pos_integer/0`) - Interval in milliseconds The default value is `30000`. - -* `:threshold` (`t:pos_integer/0`) - Success threshold The default value is `3`. - -* `:path` (`t:String.t/0`) - Path The default value is `"/"`. - -* `:success_codes` - HTTP status codes which are considered successful. The default value is `[200..299]`. - - - - - - - - -###### https - - - - * health_checks - * check - - - -* `:address` - Required. The address of the interface to listen on. - -* `:name` - A unique name for the target (defaults to the URI). - -* `:port` (`t:pos_integer/0`) - Required. The TCP port on which to listen for incoming connections. - - - -####### health_checks - - - - * check - - - - - -######## check - - - - - - - -* `:name` - A unique name for the health check. - -* `:method` - The HTTP method to use for the request. Valid values are :get, :head, :post, :put, :delete, :connect, :options, :trace, :patch The default value is `:get`. - -* `:connect_timeout` (`t:pos_integer/0`) - Connection timeout in milliseconds The default value is `5000`. - -* `:response_timeout` (`t:pos_integer/0`) - Response timeout in milliseconds The default value is `500`. - -* `:hostname` - The HTTP hostname to use when sending the request. Defaults to the IP address. - -* `:interval` (`t:pos_integer/0`) - Interval in milliseconds The default value is `30000`. - -* `:threshold` (`t:pos_integer/0`) - Success threshold The default value is `3`. - -* `:path` (`t:String.t/0`) - Path The default value is `"/"`. - -* `:success_codes` - HTTP status codes which are considered successful. The default value is `[200..299]`. - - - - - - - - -###### plug - - - - - - - -* `:module` - Required. A plug which can handle requests. - - - - - - - - - - - - -## wayfarer - - -### Nested DSLs - * [config](#wayfarer-config) - * health_checks - * check - * host_patterns - * pattern - * listeners - * http - * https - * targets - * http - * health_checks - * check - * https - * health_checks - * check - * plug - - - - - -## wayfarer.config -```elixir -config name \ nil -``` - - - - -### Nested DSLs - * [health_checks](#wayfarer-config-health_checks) - * check - * [host_patterns](#wayfarer-config-host_patterns) - * pattern - * [listeners](#wayfarer-config-listeners) - * http - * https - * [targets](#wayfarer-config-targets) - * http - * health_checks - * check - * https - * health_checks - * check - * plug - - - - -### Arguments - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - name - - - - - String.t - - - - -
- - - -## wayfarer.config.health_checks - - - - -### Nested DSLs - * [check](#wayfarer-config-health_checks-check) - - - - - - -## wayfarer.config.health_checks.check -```elixir -check name \ nil -``` - - - - - - - - -### Arguments - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - name - - - - - String.t | nil - - - - A unique name for the health check. -
-### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - method - - - - - :get | :head | :post | :put | :delete | :connect | :options | :trace | :patch - - :get - - The HTTP method to use for the request. -
- - - connect_timeout - - - - - pos_integer - - 5000 - - Connection timeout in milliseconds -
- - - response_timeout - - - - - pos_integer - - 500 - - Response timeout in milliseconds -
- - - hostname - - - - - nil | String.t - - - - The HTTP hostname to use when sending the request. Defaults to the IP address. -
- - - interval - - - - - pos_integer - - 30000 - - Interval in milliseconds -
- - - threshold - - - - - pos_integer - - 3 - - Success threshold -
- - - path - - - - - String.t - - "/" - - Path -
- - - success_codes - - - - - list(Range) | Range - - [200..299] - - HTTP status codes which are considered successful. -
- - - - - -### Introspection - -Target: `Wayfarer.Dsl.HealthCheck` - - - - -### Introspection - -Target: `Wayfarer.Dsl.HealthChecks` - -## wayfarer.config.host_patterns - - - - -### Nested DSLs - * [pattern](#wayfarer-config-host_patterns-pattern) - - - - - - -## wayfarer.config.host_patterns.pattern -```elixir -pattern pattern -``` - - - - - - - - -### Arguments - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - pattern - - - * - - - String.t - - - - A hostname matching pattern. -
- - - - - - -### Introspection - -Target: `Wayfarer.Dsl.HostPattern` - - - - -### Introspection - -Target: `Wayfarer.Dsl.HostPatterns` - -## wayfarer.config.listeners - - - - -### Nested DSLs - * [http](#wayfarer-config-listeners-http) - * [https](#wayfarer-config-listeners-https) - - - - - - -## wayfarer.config.listeners.http -```elixir -http address, port -``` - - - - - - - - -### Arguments - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - address - - - * - - - IP.Address | String.t - - - - The address of the interface to listen on. -
- - - port - - - * - - - pos_integer - - - - The TCP port on which to listen for incoming connections. -
-### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - scheme - - - * - - - :http | :https - - - - The listening protocol. -
- - - name - - - - - nil | String.t - - - - A unique name for the listener (defaults to the URI). -
- - - http_1_options - - - - - Keyword.t - - [] - - Options to configure the HTTP/1 stack in Bandit. -
- - - http_2_options - - - - - Keyword.t - - [] - - Options to configure the HTTP/2 stack in Bandit. -
- - - thousand_island_options - - - - - Keyword.t - - [] - - Possible options to configure a ThousandIsland server. -
- - - websocket_options - - - - - Keyword.t - - [] - - Options to configure the WebSocket stack in Bandit. -
- - - - - -### Introspection - -Target: `Wayfarer.Dsl.Listener` - -## wayfarer.config.listeners.https -```elixir -https address, port -``` - - - - - - - - -### Arguments - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - address - - - * - - - IP.Address | String.t - - - - The address of the interface to listen on. -
- - - port - - - * - - - pos_integer - - - - The TCP port on which to listen for incoming connections. -
-### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - scheme - - - * - - - :http | :https - - - - The listening protocol. -
- - - name - - - - - nil | String.t - - - - A unique name for the listener (defaults to the URI). -
- - - http_1_options - - - - - Keyword.t - - [] - - Options to configure the HTTP/1 stack in Bandit. -
- - - http_2_options - - - - - Keyword.t - - [] - - Options to configure the HTTP/2 stack in Bandit. -
- - - thousand_island_options - - - - - Keyword.t - - [] - - Possible options to configure a ThousandIsland server. -
- - - websocket_options - - - - - Keyword.t - - [] - - Options to configure the WebSocket stack in Bandit. -
- - - certfile - - - - - String.t - - - - The path to a file containing the SSL certificate to use for this listener. -
- - - keyfile - - - - - String.t - - - - The path to a file containing the SSL key to use for this listener. -
- - - cipher_suite - - - - - nil | :strong | :compatible - - - - Used to define a pre-selected set of ciphers, as described by `Plug.SSL.configure/1`. -
- - - - - -### Introspection - -Target: `Wayfarer.Dsl.Listener` - - - - -### Introspection - -Target: `Wayfarer.Dsl.Listeners` - -## wayfarer.config.targets - - - - -### Nested DSLs - * [http](#wayfarer-config-targets-http) - * health_checks - * check - * [https](#wayfarer-config-targets-https) - * health_checks - * check - * [plug](#wayfarer-config-targets-plug) - - - - - -### Options - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - algorithm - - - - - :round_robin | :sticky - - :round_robin - - The target selection algorithm. -
- - -## wayfarer.config.targets.http -```elixir -http address, port -``` - - - - -### Nested DSLs - * [health_checks](#wayfarer-config-targets-http-health_checks) - * check - - - - -### Arguments - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - address - - - * - - - IP.Address | String.t - - - - The address of the interface to listen on. -
- - - port - - - * - - - pos_integer - - - - The TCP port on which to listen for incoming connections. -
-### Options - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - name - - - - - nil | String.t - - - - A unique name for the target (defaults to the URI). -
- - -## wayfarer.config.targets.http.health_checks - - - - -### Nested DSLs - * [check](#wayfarer-config-targets-http-health_checks-check) - - - - - - -## wayfarer.config.targets.http.health_checks.check -```elixir -check name \ nil -``` - - - - - - - - -### Arguments - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - name - - - - - String.t | nil - - - - A unique name for the health check. -
-### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - method - - - - - :get | :head | :post | :put | :delete | :connect | :options | :trace | :patch - - :get - - The HTTP method to use for the request. -
- - - connect_timeout - - - - - pos_integer - - 5000 - - Connection timeout in milliseconds -
- - - response_timeout - - - - - pos_integer - - 500 - - Response timeout in milliseconds -
- - - hostname - - - - - nil | String.t - - - - The HTTP hostname to use when sending the request. Defaults to the IP address. -
- - - interval - - - - - pos_integer - - 30000 - - Interval in milliseconds -
- - - threshold - - - - - pos_integer - - 3 - - Success threshold -
- - - path - - - - - String.t - - "/" - - Path -
- - - success_codes - - - - - list(Range) | Range - - [200..299] - - HTTP status codes which are considered successful. -
- - - - - -### Introspection - -Target: `Wayfarer.Dsl.HealthCheck` - - - - -### Introspection - -Target: `Wayfarer.Dsl.HealthChecks` - - - - -### Introspection - -Target: `Wayfarer.Dsl.Target` - -## wayfarer.config.targets.https -```elixir -https address, port -``` - - - - -### Nested DSLs - * [health_checks](#wayfarer-config-targets-https-health_checks) - * check - - - - -### Arguments - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - address - - - * - - - IP.Address | String.t - - - - The address of the interface to listen on. -
- - - port - - - * - - - pos_integer - - - - The TCP port on which to listen for incoming connections. -
-### Options - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - name - - - - - nil | String.t - - - - A unique name for the target (defaults to the URI). -
- - -## wayfarer.config.targets.https.health_checks - - - - -### Nested DSLs - * [check](#wayfarer-config-targets-https-health_checks-check) - - - - - - -## wayfarer.config.targets.https.health_checks.check -```elixir -check name \ nil -``` - - - - - - - - -### Arguments - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - name - - - - - String.t | nil - - - - A unique name for the health check. -
-### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - method - - - - - :get | :head | :post | :put | :delete | :connect | :options | :trace | :patch - - :get - - The HTTP method to use for the request. -
- - - connect_timeout - - - - - pos_integer - - 5000 - - Connection timeout in milliseconds -
- - - response_timeout - - - - - pos_integer - - 500 - - Response timeout in milliseconds -
- - - hostname - - - - - nil | String.t - - - - The HTTP hostname to use when sending the request. Defaults to the IP address. -
- - - interval - - - - - pos_integer - - 30000 - - Interval in milliseconds -
- - - threshold - - - - - pos_integer - - 3 - - Success threshold -
- - - path - - - - - String.t - - "/" - - Path -
- - - success_codes - - - - - list(Range) | Range - - [200..299] - - HTTP status codes which are considered successful. -
- - - - - -### Introspection - -Target: `Wayfarer.Dsl.HealthCheck` - - - - -### Introspection - -Target: `Wayfarer.Dsl.HealthChecks` - - - - -### Introspection - -Target: `Wayfarer.Dsl.Target` - -## wayfarer.config.targets.plug -```elixir -plug module -``` - - - - - - - - -### Arguments - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDocs
- - - module - - - * - - - module - - - - A plug which can handle requests. -
- - - - - - -### Introspection - -Target: `Wayfarer.Dsl.Target` - - - - -### Introspection - -Target: `Wayfarer.Dsl.Targets` - - - - -### Introspection - -Target: `Wayfarer.Dsl.Config` - - - - diff --git a/documentation/dsls/DSL:-Wayfarer.md b/documentation/dsls/DSL:-Wayfarer.md new file mode 100644 index 0000000..36223c0 --- /dev/null +++ b/documentation/dsls/DSL:-Wayfarer.md @@ -0,0 +1,888 @@ + +# DSL: Wayfarer.Dsl + +The Wayfarer DSL for defining static proxy configurations. + +## DSL options + +## wayfarer + + + + * [config](#module-config) + * health_checks + * check + * host_patterns + * pattern + * listeners + * http + * https + * targets + * http + * health_checks + * check + * https + * health_checks + * check + * plug + + + + + +--- + + + +### config + + + + * health_checks + * check + * host_patterns + * pattern + * listeners + * http + * https + * targets + * http + * health_checks + * check + * https + * health_checks + * check + * plug + + + +* `:name` (`t:String.t/0`) - + + + +##### health_checks + + + + * check + + + + + +###### check + + + + + + + +* `:name` - A unique name for the health check. + +* `:method` - The HTTP method to use for the request. Valid values are :get, :head, :post, :put, :delete, :connect, :options, :trace, :patch The default value is `:get`. + +* `:connect_timeout` (`t:pos_integer/0`) - Connection timeout in milliseconds The default value is `5000`. + +* `:response_timeout` (`t:pos_integer/0`) - Response timeout in milliseconds The default value is `500`. + +* `:hostname` - The HTTP hostname to use when sending the request. Defaults to the IP address. + +* `:interval` (`t:pos_integer/0`) - Interval in milliseconds The default value is `30000`. + +* `:threshold` (`t:pos_integer/0`) - Success threshold The default value is `3`. + +* `:path` (`t:String.t/0`) - Path The default value is `"/"`. + +* `:success_codes` (one or a list of struct of type `Range`) - HTTP status codes which are considered successful. The default value is `[200..299]`. + + + + + + + +##### host_patterns + + + + * pattern + + + + + +###### pattern + + + + + + + +* `:pattern` (`t:String.t/0`) - Required. A hostname matching pattern. + + + + + + + +##### listeners + + + + * http + * https + + + + + +###### http + + + + + + + +* `:scheme` - Required. The listening protocol. Valid values are :http, :https + +* `:address` - Required. The address of the interface to listen on. + +* `:name` - A unique name for the listener (defaults to the URI). + +* `:port` (`t:pos_integer/0`) - Required. The TCP port on which to listen for incoming connections. + +* `:http_1_options` (`t:keyword/0`) - Options to configure the HTTP/1 stack in Bandit. The default value is `[]`. + +* `:http_2_options` (`t:keyword/0`) - Options to configure the HTTP/2 stack in Bandit. The default value is `[]`. + +* `:thousand_island_options` (`t:keyword/0`) - Possible options to configure a ThousandIsland server. The default value is `[]`. + +* `:websocket_options` (`t:keyword/0`) - Options to configure the WebSocket stack in Bandit. The default value is `[]`. + + + + + + +###### https + + + + + + + +* `:scheme` - Required. The listening protocol. Valid values are :http, :https + +* `:address` - Required. The address of the interface to listen on. + +* `:name` - A unique name for the listener (defaults to the URI). + +* `:port` (`t:pos_integer/0`) - Required. The TCP port on which to listen for incoming connections. + +* `:http_1_options` (`t:keyword/0`) - Options to configure the HTTP/1 stack in Bandit. The default value is `[]`. + +* `:http_2_options` (`t:keyword/0`) - Options to configure the HTTP/2 stack in Bandit. The default value is `[]`. + +* `:thousand_island_options` (`t:keyword/0`) - Possible options to configure a ThousandIsland server. The default value is `[]`. + +* `:websocket_options` (`t:keyword/0`) - Options to configure the WebSocket stack in Bandit. The default value is `[]`. + +* `:certfile` (`t:String.t/0`) - The path to a file containing the SSL certificate to use for this listener. + +* `:keyfile` (`t:String.t/0`) - The path to a file containing the SSL key to use for this listener. + +* `:cipher_suite` - Used to define a pre-selected set of ciphers, as described by `Plug.SSL.configure/1`. Valid values are nil, :strong, :compatible + + + + + + + +##### targets + + + + * http + * health_checks + * check + * https + * health_checks + * check + * plug + + + +* `:algorithm` - The target selection algorithm. Valid values are :round_robin, :sticky The default value is `:round_robin`. + + + +###### http + + + + * health_checks + * check + + + +* `:address` - Required. The address of the interface to listen on. + +* `:name` - A unique name for the target (defaults to the URI). + +* `:port` (`t:pos_integer/0`) - Required. The TCP port on which to listen for incoming connections. + + + +####### health_checks + + + + * check + + + + + +######## check + + + + + + + +* `:name` - A unique name for the health check. + +* `:method` - The HTTP method to use for the request. Valid values are :get, :head, :post, :put, :delete, :connect, :options, :trace, :patch The default value is `:get`. + +* `:connect_timeout` (`t:pos_integer/0`) - Connection timeout in milliseconds The default value is `5000`. + +* `:response_timeout` (`t:pos_integer/0`) - Response timeout in milliseconds The default value is `500`. + +* `:hostname` - The HTTP hostname to use when sending the request. Defaults to the IP address. + +* `:interval` (`t:pos_integer/0`) - Interval in milliseconds The default value is `30000`. + +* `:threshold` (`t:pos_integer/0`) - Success threshold The default value is `3`. + +* `:path` (`t:String.t/0`) - Path The default value is `"/"`. + +* `:success_codes` (one or a list of struct of type `Range`) - HTTP status codes which are considered successful. The default value is `[200..299]`. + + + + + + + + +###### https + + + + * health_checks + * check + + + +* `:address` - Required. The address of the interface to listen on. + +* `:name` - A unique name for the target (defaults to the URI). + +* `:port` (`t:pos_integer/0`) - Required. The TCP port on which to listen for incoming connections. + + + +####### health_checks + + + + * check + + + + + +######## check + + + + + + + +* `:name` - A unique name for the health check. + +* `:method` - The HTTP method to use for the request. Valid values are :get, :head, :post, :put, :delete, :connect, :options, :trace, :patch The default value is `:get`. + +* `:connect_timeout` (`t:pos_integer/0`) - Connection timeout in milliseconds The default value is `5000`. + +* `:response_timeout` (`t:pos_integer/0`) - Response timeout in milliseconds The default value is `500`. + +* `:hostname` - The HTTP hostname to use when sending the request. Defaults to the IP address. + +* `:interval` (`t:pos_integer/0`) - Interval in milliseconds The default value is `30000`. + +* `:threshold` (`t:pos_integer/0`) - Success threshold The default value is `3`. + +* `:path` (`t:String.t/0`) - Path The default value is `"/"`. + +* `:success_codes` (one or a list of struct of type `Range`) - HTTP status codes which are considered successful. The default value is `[200..299]`. + + + + + + + + +###### plug + + + + + + + +* `:module` (module that adopts `Plug` or a module and options) - Required. A plug which can handle requests. + + + + + + + + + + + + +## wayfarer + + +### Nested DSLs + * [config](#wayfarer-config) + * health_checks + * check + * host_patterns + * pattern + * listeners + * http + * https + * targets + * http + * health_checks + * check + * https + * health_checks + * check + * plug + + + + + +## wayfarer.config +```elixir +config name \\ nil +``` + + + + +### Nested DSLs + * [health_checks](#wayfarer-config-health_checks) + * check + * [host_patterns](#wayfarer-config-host_patterns) + * pattern + * [listeners](#wayfarer-config-listeners) + * http + * https + * [targets](#wayfarer-config-targets) + * http + * health_checks + * check + * https + * health_checks + * check + * plug + + + + +### Arguments + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`name`](#wayfarer-config-name){: #wayfarer-config-name } | `String.t` | | | + + + +## wayfarer.config.health_checks + + + + +### Nested DSLs + * [check](#wayfarer-config-health_checks-check) + + + + + + +## wayfarer.config.health_checks.check +```elixir +check name \\ nil +``` + + + + + + + + +### Arguments + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`name`](#wayfarer-config-health_checks-check-name){: #wayfarer-config-health_checks-check-name } | `String.t \| nil` | | A unique name for the health check. | +### Options + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`method`](#wayfarer-config-health_checks-check-method){: #wayfarer-config-health_checks-check-method } | `:get \| :head \| :post \| :put \| :delete \| :connect \| :options \| :trace \| :patch` | `:get` | The HTTP method to use for the request. | +| [`connect_timeout`](#wayfarer-config-health_checks-check-connect_timeout){: #wayfarer-config-health_checks-check-connect_timeout } | `pos_integer` | `5000` | Connection timeout in milliseconds | +| [`response_timeout`](#wayfarer-config-health_checks-check-response_timeout){: #wayfarer-config-health_checks-check-response_timeout } | `pos_integer` | `500` | Response timeout in milliseconds | +| [`hostname`](#wayfarer-config-health_checks-check-hostname){: #wayfarer-config-health_checks-check-hostname } | `nil \| String.t` | | The HTTP hostname to use when sending the request. Defaults to the IP address. | +| [`interval`](#wayfarer-config-health_checks-check-interval){: #wayfarer-config-health_checks-check-interval } | `pos_integer` | `30000` | Interval in milliseconds | +| [`threshold`](#wayfarer-config-health_checks-check-threshold){: #wayfarer-config-health_checks-check-threshold } | `pos_integer` | `3` | Success threshold | +| [`path`](#wayfarer-config-health_checks-check-path){: #wayfarer-config-health_checks-check-path } | `String.t` | `"/"` | Path | +| [`success_codes`](#wayfarer-config-health_checks-check-success_codes){: #wayfarer-config-health_checks-check-success_codes } | `Range \| list(Range)` | `[200..299]` | HTTP status codes which are considered successful. | + + + + + +### Introspection + +Target: `Wayfarer.Dsl.HealthCheck` + + + + +### Introspection + +Target: `Wayfarer.Dsl.HealthChecks` + +## wayfarer.config.host_patterns + + + + +### Nested DSLs + * [pattern](#wayfarer-config-host_patterns-pattern) + + + + + + +## wayfarer.config.host_patterns.pattern +```elixir +pattern pattern +``` + + + + + + + + +### Arguments + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`pattern`](#wayfarer-config-host_patterns-pattern-pattern){: #wayfarer-config-host_patterns-pattern-pattern .spark-required} | `String.t` | | A hostname matching pattern. | + + + + + + +### Introspection + +Target: `Wayfarer.Dsl.HostPattern` + + + + +### Introspection + +Target: `Wayfarer.Dsl.HostPatterns` + +## wayfarer.config.listeners + + + + +### Nested DSLs + * [http](#wayfarer-config-listeners-http) + * [https](#wayfarer-config-listeners-https) + + + + + + +## wayfarer.config.listeners.http +```elixir +http address, port +``` + + + + + + + + +### Arguments + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`address`](#wayfarer-config-listeners-http-address){: #wayfarer-config-listeners-http-address .spark-required} | `IP.Address \| String.t` | | The address of the interface to listen on. | +| [`port`](#wayfarer-config-listeners-http-port){: #wayfarer-config-listeners-http-port .spark-required} | `pos_integer` | | The TCP port on which to listen for incoming connections. | +### Options + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`scheme`](#wayfarer-config-listeners-http-scheme){: #wayfarer-config-listeners-http-scheme .spark-required} | `:http \| :https` | | The listening protocol. | +| [`name`](#wayfarer-config-listeners-http-name){: #wayfarer-config-listeners-http-name } | `nil \| String.t` | | A unique name for the listener (defaults to the URI). | +| [`http_1_options`](#wayfarer-config-listeners-http-http_1_options){: #wayfarer-config-listeners-http-http_1_options } | `keyword` | `[]` | Options to configure the HTTP/1 stack in Bandit. | +| [`http_2_options`](#wayfarer-config-listeners-http-http_2_options){: #wayfarer-config-listeners-http-http_2_options } | `keyword` | `[]` | Options to configure the HTTP/2 stack in Bandit. | +| [`thousand_island_options`](#wayfarer-config-listeners-http-thousand_island_options){: #wayfarer-config-listeners-http-thousand_island_options } | `keyword` | `[]` | Possible options to configure a ThousandIsland server. | +| [`websocket_options`](#wayfarer-config-listeners-http-websocket_options){: #wayfarer-config-listeners-http-websocket_options } | `keyword` | `[]` | Options to configure the WebSocket stack in Bandit. | + + + + + +### Introspection + +Target: `Wayfarer.Dsl.Listener` + +## wayfarer.config.listeners.https +```elixir +https address, port +``` + + + + + + + + +### Arguments + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`address`](#wayfarer-config-listeners-https-address){: #wayfarer-config-listeners-https-address .spark-required} | `IP.Address \| String.t` | | The address of the interface to listen on. | +| [`port`](#wayfarer-config-listeners-https-port){: #wayfarer-config-listeners-https-port .spark-required} | `pos_integer` | | The TCP port on which to listen for incoming connections. | +### Options + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`scheme`](#wayfarer-config-listeners-https-scheme){: #wayfarer-config-listeners-https-scheme .spark-required} | `:http \| :https` | | The listening protocol. | +| [`name`](#wayfarer-config-listeners-https-name){: #wayfarer-config-listeners-https-name } | `nil \| String.t` | | A unique name for the listener (defaults to the URI). | +| [`http_1_options`](#wayfarer-config-listeners-https-http_1_options){: #wayfarer-config-listeners-https-http_1_options } | `keyword` | `[]` | Options to configure the HTTP/1 stack in Bandit. | +| [`http_2_options`](#wayfarer-config-listeners-https-http_2_options){: #wayfarer-config-listeners-https-http_2_options } | `keyword` | `[]` | Options to configure the HTTP/2 stack in Bandit. | +| [`thousand_island_options`](#wayfarer-config-listeners-https-thousand_island_options){: #wayfarer-config-listeners-https-thousand_island_options } | `keyword` | `[]` | Possible options to configure a ThousandIsland server. | +| [`websocket_options`](#wayfarer-config-listeners-https-websocket_options){: #wayfarer-config-listeners-https-websocket_options } | `keyword` | `[]` | Options to configure the WebSocket stack in Bandit. | +| [`certfile`](#wayfarer-config-listeners-https-certfile){: #wayfarer-config-listeners-https-certfile } | `String.t` | | The path to a file containing the SSL certificate to use for this listener. | +| [`keyfile`](#wayfarer-config-listeners-https-keyfile){: #wayfarer-config-listeners-https-keyfile } | `String.t` | | The path to a file containing the SSL key to use for this listener. | +| [`cipher_suite`](#wayfarer-config-listeners-https-cipher_suite){: #wayfarer-config-listeners-https-cipher_suite } | `nil \| :strong \| :compatible` | | Used to define a pre-selected set of ciphers, as described by `Plug.SSL.configure/1`. | + + + + + +### Introspection + +Target: `Wayfarer.Dsl.Listener` + + + + +### Introspection + +Target: `Wayfarer.Dsl.Listeners` + +## wayfarer.config.targets + + + + +### Nested DSLs + * [http](#wayfarer-config-targets-http) + * health_checks + * check + * [https](#wayfarer-config-targets-https) + * health_checks + * check + * [plug](#wayfarer-config-targets-plug) + + + + + +### Options + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`algorithm`](#wayfarer-config-targets-algorithm){: #wayfarer-config-targets-algorithm } | `:round_robin \| :sticky` | `:round_robin` | The target selection algorithm. | + + +## wayfarer.config.targets.http +```elixir +http address, port +``` + + + + +### Nested DSLs + * [health_checks](#wayfarer-config-targets-http-health_checks) + * check + + + + +### Arguments + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`address`](#wayfarer-config-targets-http-address){: #wayfarer-config-targets-http-address .spark-required} | `IP.Address \| String.t` | | The address of the interface to listen on. | +| [`port`](#wayfarer-config-targets-http-port){: #wayfarer-config-targets-http-port .spark-required} | `pos_integer` | | The TCP port on which to listen for incoming connections. | +### Options + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`name`](#wayfarer-config-targets-http-name){: #wayfarer-config-targets-http-name } | `nil \| String.t` | | A unique name for the target (defaults to the URI). | + + +## wayfarer.config.targets.http.health_checks + + + + +### Nested DSLs + * [check](#wayfarer-config-targets-http-health_checks-check) + + + + + + +## wayfarer.config.targets.http.health_checks.check +```elixir +check name \\ nil +``` + + + + + + + + +### Arguments + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`name`](#wayfarer-config-targets-http-health_checks-check-name){: #wayfarer-config-targets-http-health_checks-check-name } | `String.t \| nil` | | A unique name for the health check. | +### Options + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`method`](#wayfarer-config-targets-http-health_checks-check-method){: #wayfarer-config-targets-http-health_checks-check-method } | `:get \| :head \| :post \| :put \| :delete \| :connect \| :options \| :trace \| :patch` | `:get` | The HTTP method to use for the request. | +| [`connect_timeout`](#wayfarer-config-targets-http-health_checks-check-connect_timeout){: #wayfarer-config-targets-http-health_checks-check-connect_timeout } | `pos_integer` | `5000` | Connection timeout in milliseconds | +| [`response_timeout`](#wayfarer-config-targets-http-health_checks-check-response_timeout){: #wayfarer-config-targets-http-health_checks-check-response_timeout } | `pos_integer` | `500` | Response timeout in milliseconds | +| [`hostname`](#wayfarer-config-targets-http-health_checks-check-hostname){: #wayfarer-config-targets-http-health_checks-check-hostname } | `nil \| String.t` | | The HTTP hostname to use when sending the request. Defaults to the IP address. | +| [`interval`](#wayfarer-config-targets-http-health_checks-check-interval){: #wayfarer-config-targets-http-health_checks-check-interval } | `pos_integer` | `30000` | Interval in milliseconds | +| [`threshold`](#wayfarer-config-targets-http-health_checks-check-threshold){: #wayfarer-config-targets-http-health_checks-check-threshold } | `pos_integer` | `3` | Success threshold | +| [`path`](#wayfarer-config-targets-http-health_checks-check-path){: #wayfarer-config-targets-http-health_checks-check-path } | `String.t` | `"/"` | Path | +| [`success_codes`](#wayfarer-config-targets-http-health_checks-check-success_codes){: #wayfarer-config-targets-http-health_checks-check-success_codes } | `Range \| list(Range)` | `[200..299]` | HTTP status codes which are considered successful. | + + + + + +### Introspection + +Target: `Wayfarer.Dsl.HealthCheck` + + + + +### Introspection + +Target: `Wayfarer.Dsl.HealthChecks` + + + + +### Introspection + +Target: `Wayfarer.Dsl.Target` + +## wayfarer.config.targets.https +```elixir +https address, port +``` + + + + +### Nested DSLs + * [health_checks](#wayfarer-config-targets-https-health_checks) + * check + + + + +### Arguments + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`address`](#wayfarer-config-targets-https-address){: #wayfarer-config-targets-https-address .spark-required} | `IP.Address \| String.t` | | The address of the interface to listen on. | +| [`port`](#wayfarer-config-targets-https-port){: #wayfarer-config-targets-https-port .spark-required} | `pos_integer` | | The TCP port on which to listen for incoming connections. | +### Options + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`name`](#wayfarer-config-targets-https-name){: #wayfarer-config-targets-https-name } | `nil \| String.t` | | A unique name for the target (defaults to the URI). | + + +## wayfarer.config.targets.https.health_checks + + + + +### Nested DSLs + * [check](#wayfarer-config-targets-https-health_checks-check) + + + + + + +## wayfarer.config.targets.https.health_checks.check +```elixir +check name \\ nil +``` + + + + + + + + +### Arguments + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`name`](#wayfarer-config-targets-https-health_checks-check-name){: #wayfarer-config-targets-https-health_checks-check-name } | `String.t \| nil` | | A unique name for the health check. | +### Options + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`method`](#wayfarer-config-targets-https-health_checks-check-method){: #wayfarer-config-targets-https-health_checks-check-method } | `:get \| :head \| :post \| :put \| :delete \| :connect \| :options \| :trace \| :patch` | `:get` | The HTTP method to use for the request. | +| [`connect_timeout`](#wayfarer-config-targets-https-health_checks-check-connect_timeout){: #wayfarer-config-targets-https-health_checks-check-connect_timeout } | `pos_integer` | `5000` | Connection timeout in milliseconds | +| [`response_timeout`](#wayfarer-config-targets-https-health_checks-check-response_timeout){: #wayfarer-config-targets-https-health_checks-check-response_timeout } | `pos_integer` | `500` | Response timeout in milliseconds | +| [`hostname`](#wayfarer-config-targets-https-health_checks-check-hostname){: #wayfarer-config-targets-https-health_checks-check-hostname } | `nil \| String.t` | | The HTTP hostname to use when sending the request. Defaults to the IP address. | +| [`interval`](#wayfarer-config-targets-https-health_checks-check-interval){: #wayfarer-config-targets-https-health_checks-check-interval } | `pos_integer` | `30000` | Interval in milliseconds | +| [`threshold`](#wayfarer-config-targets-https-health_checks-check-threshold){: #wayfarer-config-targets-https-health_checks-check-threshold } | `pos_integer` | `3` | Success threshold | +| [`path`](#wayfarer-config-targets-https-health_checks-check-path){: #wayfarer-config-targets-https-health_checks-check-path } | `String.t` | `"/"` | Path | +| [`success_codes`](#wayfarer-config-targets-https-health_checks-check-success_codes){: #wayfarer-config-targets-https-health_checks-check-success_codes } | `Range \| list(Range)` | `[200..299]` | HTTP status codes which are considered successful. | + + + + + +### Introspection + +Target: `Wayfarer.Dsl.HealthCheck` + + + + +### Introspection + +Target: `Wayfarer.Dsl.HealthChecks` + + + + +### Introspection + +Target: `Wayfarer.Dsl.Target` + +## wayfarer.config.targets.plug +```elixir +plug module +``` + + + + + + + + +### Arguments + +| Name | Type | Default | Docs | +|------|------|---------|------| +| [`module`](#wayfarer-config-targets-plug-module){: #wayfarer-config-targets-plug-module .spark-required} | `module` | | A plug which can handle requests. | + + + + + + +### Introspection + +Target: `Wayfarer.Dsl.Target` + + + + +### Introspection + +Target: `Wayfarer.Dsl.Targets` + + + + +### Introspection + +Target: `Wayfarer.Dsl.Config` + + + + + + diff --git a/lib/wayfarer/dsl/target.ex b/lib/wayfarer/dsl/target.ex index cc0c6fa..274f9a7 100644 --- a/lib/wayfarer/dsl/target.ex +++ b/lib/wayfarer/dsl/target.ex @@ -3,7 +3,7 @@ defmodule Wayfarer.Dsl.Target do A struct for storing a target generated by the DSL. """ - alias Spark.{Dsl.Entity, OptionsHelpers} + alias Spark.{Dsl.Entity, Options} alias Wayfarer.Dsl.{HealthCheck, HealthChecks} alias Wayfarer.Utils @@ -98,8 +98,8 @@ defmodule Wayfarer.Dsl.Target do @doc false def schema do @shared_schema - |> OptionsHelpers.make_optional!(:address) - |> OptionsHelpers.make_optional!(:port) + |> Options.Helpers.make_optional!(:address) + |> Options.Helpers.make_optional!(:port) |> Keyword.merge( scheme: [ type: {:in, [:http, :https, :plug]}, diff --git a/lib/wayfarer/listener.ex b/lib/wayfarer/listener.ex index e0191c5..e894962 100644 --- a/lib/wayfarer/listener.ex +++ b/lib/wayfarer/listener.ex @@ -3,7 +3,7 @@ defmodule Wayfarer.Listener do use GenServer, restart: :transient require Logger - alias Spark.OptionsHelpers + alias Spark.Options import Wayfarer.Utils @options_schema [ @@ -90,7 +90,7 @@ defmodule Wayfarer.Listener do ## Options - #{OptionsHelpers.docs(@options_schema)} + #{Options.docs(@options_schema)} """ @doc false @@ -126,14 +126,14 @@ defmodule Wayfarer.Listener do {:ok, :https} -> schema = @options_schema - |> OptionsHelpers.make_required!(:keyfile) - |> OptionsHelpers.make_required!(:certfile) - |> OptionsHelpers.make_required!(:cipher_suite) + |> Options.Helpers.make_required!(:keyfile) + |> Options.Helpers.make_required!(:certfile) + |> Options.Helpers.make_required!(:cipher_suite) - OptionsHelpers.validate(options, schema) + Options.validate(options, schema) _ -> - OptionsHelpers.validate(options, @options_schema) + Options.validate(options, @options_schema) end end diff --git a/lib/wayfarer/server.ex b/lib/wayfarer/server.ex index 2e8bbc3..ff47ab3 100644 --- a/lib/wayfarer/server.ex +++ b/lib/wayfarer/server.ex @@ -1,5 +1,5 @@ defmodule Wayfarer.Server do - alias Spark.OptionsHelpers + alias Spark.Options alias Wayfarer.{Dsl, Listener, Router, Server, Target} use GenServer require Logger @@ -78,7 +78,7 @@ defmodule Wayfarer.Server do ## Options - #{OptionsHelpers.docs(@options_schema)} + #{Options.docs(@options_schema)} """ @type options :: keyword @@ -145,7 +145,7 @@ defmodule Wayfarer.Server do @impl true @spec init(options) :: {:ok, map} | {:stop, any} def init(options) do - with {:ok, options} <- OptionsHelpers.validate(options, @options_schema), + with {:ok, options} <- Options.validate(options, @options_schema), {:ok, module} <- assert_is_server(options[:module]), listeners <- Keyword.get(options, :listeners, []), targets <- Keyword.get(options, :targets, []), diff --git a/lib/wayfarer/target.ex b/lib/wayfarer/target.ex index 7a61c4e..f8c62a1 100644 --- a/lib/wayfarer/target.ex +++ b/lib/wayfarer/target.ex @@ -3,7 +3,7 @@ defmodule Wayfarer.Target do use GenServer, restart: :transient require Logger - alias Spark.OptionsHelpers + alias Spark.Options alias Wayfarer.{Dsl.HealthCheck, Router, Server, Target} import Wayfarer.Utils @@ -61,7 +61,7 @@ defmodule Wayfarer.Target do ## Options - #{OptionsHelpers.docs(@options_schema)} + #{Options.docs(@options_schema)} """ @type key :: {module, :http | :https, IP.Address.t(), :socket.port_number()} @@ -90,7 +90,7 @@ defmodule Wayfarer.Target do @doc false @impl true def init(options) do - with {:ok, options} <- OptionsHelpers.validate(options, @options_schema), + with {:ok, options} <- Options.validate(options, @options_schema), {:ok, uri} <- to_uri(options[:scheme], options[:address], options[:port]) do target = options |> Keyword.take(~w[scheme address port]a) |> Map.new() module = options[:module] diff --git a/mix.exs b/mix.exs index 61fff05..f6993b4 100644 --- a/mix.exs +++ b/mix.exs @@ -95,7 +95,7 @@ defmodule Wayfarer.MixProject do {:mint, "~> 1.5"}, {:nimble_options, "~> 1.0"}, {:plug, "~> 1.15"}, - {:spark, "~> 1.1"}, + {:spark, "~> 2.0"}, {:telemetry, "~> 1.2"}, {:websock, "~> 0.5"}, diff --git a/mix.lock b/mix.lock index 3d92b1c..e300cb4 100644 --- a/mix.lock +++ b/mix.lock @@ -25,12 +25,12 @@ "mimic": {:hex, :mimic, "1.7.4", "cd2772ffbc9edefe964bc668bfd4059487fa639a5b7f1cbdf4fd22946505aa4f", [:mix], [], "hexpm", "437c61041ecf8a7fae35763ce89859e4973bb0666e6ce76d75efc789204447c3"}, "mint": {:hex, :mint, "1.5.1", "8db5239e56738552d85af398798c80648db0e90f343c8469f6c6d8898944fb6f", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "4a63e1e76a7c3956abd2c72f370a0d0aecddc3976dea5c27eccbecfa5e7d5b1e"}, "mix_audit": {:hex, :mix_audit, "2.1.1", "653aa6d8f291fc4b017aa82bdb79a4017903902ebba57960ef199cbbc8c008a1", [:make, :mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:yaml_elixir, "~> 2.9", [hex: :yaml_elixir, repo: "hexpm", optional: false]}], "hexpm", "541990c3ab3a7bb8c4aaa2ce2732a4ae160ad6237e5dcd5ad1564f4f85354db1"}, - "nimble_options": {:hex, :nimble_options, "1.0.2", "92098a74df0072ff37d0c12ace58574d26880e522c22801437151a159392270e", [:mix], [], "hexpm", "fd12a8db2021036ce12a309f26f564ec367373265b53e25403f0ee697380f1b8"}, + "nimble_options": {:hex, :nimble_options, "1.1.0", "3b31a57ede9cb1502071fade751ab0c7b8dbe75a9a4c2b5bbb0943a690b63172", [:mix], [], "hexpm", "8bbbb3941af3ca9acc7835f5655ea062111c9c27bcac53e004460dfd19008a99"}, "nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"}, "plug": {:hex, :plug, "1.15.1", "b7efd81c1a1286f13efb3f769de343236bd8b7d23b4a9f40d3002fc39ad8f74c", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "459497bd94d041d98d948054ec6c0b76feacd28eec38b219ca04c0de13c79d30"}, "plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"}, - "sourceror": {:hex, :sourceror, "0.14.0", "b6b8552d0240400d66b6f107c1bab7ac1726e998efc797f178b7b517e928e314", [:mix], [], "hexpm", "809c71270ad48092d40bbe251a133e49ae229433ce103f762a2373b7a10a8d8b"}, - "spark": {:hex, :spark, "1.1.48", "64b804711818526e371d12ea3acc886365b14239565e361001aad801a38bad85", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.5 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:sourceror, "~> 0.1", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "3215a8b1bb1dc93945ce9a0f68430d7265ea596c6b911f7bd6dba77b65cee370"}, + "sourceror": {:hex, :sourceror, "1.0.1", "ec2c41726d181adce888ac94b3f33b359a811b46e019c084509e02c70042e424", [:mix], [], "hexpm", "28225464ffd68bda1843c974f3ff7ccef35e29be09a65dfe8e3df3f7e3600c57"}, + "spark": {:hex, :spark, "2.0.1", "6701ca7908923767f60d1a9df7274053e2f7c8a0a594452006d038b05193e450", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.0", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "cc3c871dc40184edf2253d1fffcaa931856dac28c6990c4a202bc61f529e266a"}, "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, "thousand_island": {:hex, :thousand_island, "1.1.0", "dcc115650adc61c5e7de12619f0cb94b2b8f050326e7f21ffbf6fdeb3d291e4c", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7745cf71520d74e119827ff32c2da6307e822cf835bebed3b2c459cc57f32d21"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"},