# CHANGELOG

## v0.12.2 (2026-02-27)

* Exclude `src/safe_erl_term.erl` from package.

## v0.12.1 (2026-02-27)

* Fix unsafe deserialization of Erlang terms in API responses (CVE-2026-21619).

## v0.12.0 (2025-10-26)

* Add short URL API `hex_api_short_url:create/2`.
* Add OAuth API:
  * `hex_api_oauth:device_authorization/3,4`
  * `hex_api_oauth:poll_device_token/3`
  * `hex_api_oauth:refresh_token/3`
  * `hex_api_oauth:revoke_token/3`
  * `hex_api_oauth:client_credentials_token/4,5`
* Support 2FA authentication, any API request can now return `{error, otp_required | invalid_totp}`
  if 2FA is required. The config option `api_otp` can be used to provide the TOTP code.
* Differentiate between registry verification errors. `{error, unverified}` has been replaced with
  `{error, bad_repo_name | bad_signature}`.
* Support nested maps in `extra` package metadata field.

## v0.11.0 (2024-12-03)

* Use secure SSL defaults for OTP 25+.
* Start inets and ssl applications.

## v0.10.3 (2024-06-28)

* Fix `hex_api_release:retirement_params/0` type spec.

## v0.10.2 (2024-06-12)

* Fix `hex_tarball:create_docs/1` type spec.

## v0.10.1 (2024-06-11)

* Drop support for OTP 20.
* Update `hex_licenses` module to reflect most recent list available from SPDX.

## v0.10.0 (2023-05-09)

* Drop support for old OTP and Rebar versions. `hex_core` now requires OTP20+ and Rebar 3.15.1+.

* Add `hex_repo:get_docs/3` and `hex_repo:get_public_key/1`.

## v0.9.0 (2022-11-03)

* Change `hex_registry` functions to match protobuf fields

  Before:

      > hex_registry:unpack_names(Payload, <<"test">>, TestPublicKey)
      {ok,[#{name => <<"package1">>, ...},
           #{name => <<"package2">>, ...}]}

  After:

      > hex_registry:unpack_names(Payload, <<"test">>, TestPublicKey)
      {ok,#{packages => [#{name => <<"package1">>, ...},
                         #{name => <<"package2">>, ...}],
            repository: <<"test">>}}

* Change `hex_repo` functions to match protobuf fields

  Before:

      > hex_repo:get_names(Config),
      {ok,{200, ...,
           [#{name => <<"pacakge2">>, ...},
            #{name => <<"pacakge2">>, ...},
            ...]}}

  After:

      > hex_repo:get_names(Config),
      {ok,{200, ...,
           #{packages => [#{name => <<"pacakge2">>, ...},
                          #{name => <<"pacakge2">>, ...},
                          ...],
             repository => <<"test">>}}}

## v0.8.4 (2021-12-20)

* Add `@doc` to `hex_licenses`

## v0.8.3 (2021-12-14)

* Don't warn on non-https URLs
* Add `hex_licenses` module

## v0.8.2 (2021-05-28)

* Warn on unsafe httpc default SSL settings

## v0.8.1 (2021-05-20)

* Update gpb to 4.17.6 to avoid dialyzer warnings

## v0.8.0 (2021-05-02)

* Deprecate registry encode/decode API in favour of new high-level build/unpack API
* Add `updated_at` to repository names resource

## v0.7.1 (2020-10-12)

* Fix dialyzer warnings on OTP 23

## v0.7.0 (2020-10-20)

* Fix compatibility with OTP 24
* Change `hex_tarball:create/2` error value from `{error, too_big}` to `{tarball, {too_big_compressed | too_big_uncompressed, Size}}`.

## v0.6.10 (2020-08-25)

* Add configuration for max tarball size
* Do not create extraneous "memory" directory when unpacking

## v0.6.9 (2020-05-24)

* Add `hex_api_release:publish/3`

## v0.6.8 (2020-02-04)

* Fix tarball file extraction through symlinks

## v0.6.7 (2020-02-03)

* Fix compatibility with OTP 18 and 17

## v0.6.6 (2020-02-03)

* Do not crash on empty tarballs
* Fix directory traversal vulnerability for symlinks in tarballs

## v0.6.5 (2020-01-14)

* Transition away from `http_uri` when using newer OTP releases
* Ensure `Role` is given as an atom in `hex_api_organization_member:add/3`
* Add `http_headers` to the `hex_core:config()` type
* Add default `http_headers` to `hex_core:default_config/0`
* Fix `hex_registry:decode_and_verify_signed/2` spec
* Fix `hex_tarball:files/0` type

## v0.6.4 (2019-12-27)

* Fix setting level and transfer options in organization api

## v0.6.3 (2019-12-16)

* Add organization API
* Add level and transfer params to add owner API
* Add `hex_tarball:unpack_docs/2`
* Add `hex_api_auth:test_key/3`

## v0.6.2 (2019-11-11)

* Gracefully handle HTTP errors

## v0.6.1 (2019-07-30)

* Fix bug when publishing with configuration that does not have `repo_organization` key set

## v0.6.0 (2019-07-27)

* **Backwards-incompatible**: Change successful return value of `hex_tarball:create/2` from
  `{ok, {Tarball, Checksum}}` to `{ok, Map}`. Currently, `Map` has `tarball`, `inner_tarball`,
  and `outer_tarball` keys
* Rename existing tarball checksum to inner checksum and deprecate it
* Add tarball outer checksum
* Do not allow comments in `safe_erl_term`
* Forward compatible tarball contents by not failing on unknown files

## v0.5.1 (2019-07-30)

* Fix bug when publishing with configuration that does not have `repo_organization` key set

## v0.5.0 (2019-02-26)

* Fetch package data from proper repository organization and don't verify origin if configured
* **Backwards-incompatible**: Make `hex_api` module private
* **Backwards-incompatible**: `organization` config key has been replaced with `api_organization`
  and `api_repository` keys
* Add `repo_organization` config key
* `vendor.sh`: Add missing `hex_pb_*.erl` files
* `vendor.sh`: Fix replacing `hex_core`

## v0.4.0 (2018-12-30)

* Revert switch from proto2 to proto3
* Verify authenticity of signed payload
* Add `repo_verify_origin` config option

## v0.3.0 (2018-12-14)

* Switch from proto2 to proto3
* Fix `hex_http:body` type
* Fix `hex_http:request` spec

## v0.2.1 (2018-12-13)

* Always return the whole response tuple from requests
* Guess rebar3 as build tool over rebar
* Return compressed tarball from hex_tarball:create_docs/1
* Add package identity to registry records

## v0.2.0 (2018-09-01)

* Accept `{filename(), filename()}` in files list for tarballs
* Support httpc profile through adapter configs
* Update generated protobuf files with OTP 21 compatibility

## v0.1.1 (2018-08-11)

* Use `hex_core` project name in user agent string

## v0.1.0 (2018-08-08)

* First release
