{"id":18002869,"url":"https://github.com/am-kantox/ack","last_synced_at":"2025-08-31T15:16:51.396Z","repository":{"id":57478726,"uuid":"175034602","full_name":"am-kantox/ack","owner":"am-kantox","description":"Tiny drop-in for painless acknowledgements across different applications.","archived":false,"fork":false,"pushed_at":"2024-05-28T04:13:16.000Z","size":65,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-10-30T00:47:07.280Z","etag":null,"topics":["ack","acknowledgements","elixir","elixir-lang"],"latest_commit_sha":null,"homepage":null,"language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/am-kantox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-11T15:54:57.000Z","updated_at":"2024-05-28T04:13:19.000Z","dependencies_parsed_at":"2022-09-17T04:21:39.367Z","dependency_job_id":null,"html_url":"https://github.com/am-kantox/ack","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/am-kantox%2Fack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/am-kantox%2Fack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/am-kantox%2Fack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/am-kantox%2Fack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/am-kantox","download_url":"https://codeload.github.com/am-kantox/ack/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245618763,"owners_count":20645064,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ack","acknowledgements","elixir","elixir-lang"],"created_at":"2024-10-29T23:24:18.195Z","updated_at":"2025-03-26T08:31:20.057Z","avatar_url":"https://github.com/am-kantox.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ![Ack Logo](https://raw.githubusercontent.com/am-kantox/ack/master/stuff/i/logo-48.png)   Ack [![Kantox ❤ OSS](https://img.shields.io/badge/❤-kantox_oss-informational.svg)](https://kantox.com/)  ![Test](https://github.com/am-kantox/ack/workflows/Test/badge.svg)  ![Dialyzer](https://github.com/am-kantox/ack/workflows/Dialyzer/badge.svg)\n\n**Tiny drop-in for painless acknowledgements across different applications.**\n\n## About\n\n![Ack Message Lifetime](https://raw.githubusercontent.com/am-kantox/ack/master/stuff/i/ack.png)\n\nTo implement `ack` support between two applications, one might use `Ack` application with a very little amount of code needed.\n\nImagine we have two applications, `App1` and `App2` as shown above. When `App1` sends _something_ to `App2` it might require the acknowledgement back confirming the successful processing of this _something_. For instance, `App1` might call an API endpoint of `App2`, which triggers a long process, or it might place a message into RabbitMQ and expect to receive an `ack` to perform some cleanup, or whatever.\n\nUsing `Ack`, one should only:\n\n- add `Ack` to the list of applications started with `App1`\n- implement [`Envio.Subscriber`](https://hexdocs.pm/envio/Envio.Subscriber.html) in `App1`, listening to any of three following channels:\n  - `{Ack.Horn, :ack}`\n  - `{Ack.Horn, :nack}`\n  - `{Ack.Horn, :error}`\n- implement `App2` to `HTTP POST` to `App1.domain:30009` one of two requests (assuming `key` is somewhat negotiated upgront and known to `App1`):\n  - `%{\"key\" =\u003e key, \"value\" =\u003e \"ack\"}` to `ack`, or\n  - `%{\"key\" =\u003e key, \"value\" =\u003e \"nack\"}` to `nack`\n\nThat’s it.\n\n## Installation\n\nThe package can be installed by adding `ack` to your list of dependencies **and** applications in `mix.exs`:\n\n```elixir\ndef deps, do: [{:ack, \"~\u003e 0.1\"}, ...]\ndef applications, do: applications: [:logger, ..., :ack, ...]\n```\n\n## [Documentation](https://hexdocs.pm/ack)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fam-kantox%2Fack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fam-kantox%2Fack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fam-kantox%2Fack/lists"}