{"id":18576859,"url":"https://github.com/niqdev/mobile-carrier-bot","last_synced_at":"2026-06-19T01:31:32.646Z","repository":{"id":87767588,"uuid":"176301885","full_name":"niqdev/mobile-carrier-bot","owner":"niqdev","description":"[WIP] Scala FP bot deployed on k8s","archived":false,"fork":false,"pushed_at":"2019-10-20T20:45:30.000Z","size":166,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-19T11:45:50.526Z","etag":null,"topics":["cats","cats-effect","circe","ciris","doobie","enumeratum","fs2","http4s","kubernetes","monocle","refined","scala-scraper","telegram-bot"],"latest_commit_sha":null,"homepage":"","language":"Scala","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/niqdev.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-18T14:19:35.000Z","updated_at":"2019-10-20T20:45:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"85eec68f-1d32-4d3e-893e-a0da1d1edb4e","html_url":"https://github.com/niqdev/mobile-carrier-bot","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/niqdev/mobile-carrier-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niqdev%2Fmobile-carrier-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niqdev%2Fmobile-carrier-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niqdev%2Fmobile-carrier-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niqdev%2Fmobile-carrier-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/niqdev","download_url":"https://codeload.github.com/niqdev/mobile-carrier-bot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niqdev%2Fmobile-carrier-bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34514282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cats","cats-effect","circe","ciris","doobie","enumeratum","fs2","http4s","kubernetes","monocle","refined","scala-scraper","telegram-bot"],"created_at":"2024-11-06T23:26:53.233Z","updated_at":"2026-06-19T01:31:32.610Z","avatar_url":"https://github.com/niqdev.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mobile-carrier-bot\n\n[![Build Status][travis-image]][travis-url]\n\n[travis-image]: https://travis-ci.org/niqdev/mobile-carrier-bot.svg?branch=master\n[travis-url]: https://travis-ci.org/niqdev/mobile-carrier-bot\n\nA bot to access mobile carrier services, currently supports\n\n* [x] Three IE\n* [x] TIM\n* [ ] Iliad\n\n---\n\n:construction::construction::construction::construction::construction::construction::construction::construction::construction::construction:\n:warning: **Heavy Work in Progress** :warning:\n:construction::construction::construction::construction::construction::construction::construction::construction::construction::construction:\n\n*TODO (not in order):*\n\n- [x] skeleton, plugins, setup\n- [ ] architecture docs and diagrams\n- [x] healtcheck status/info/env\n- [ ] expose prometheus metrics via endpoint\n- [ ] expose JVM metrics via JMX\n- [ ] scalatest and scalacheck\n- [ ] codecov or alternatives\n- [x] telegram client (polling)\n- [ ] slack client (webhook)\n- [x] scrape at least 2 mobile carrier services to check balance\n- [ ] (polling) notify for low credits and expiry date\n- [x] in-memory db with Ref\n- [ ] doobie db with PostgreSQL and H2\n- [ ] if/how store credentials in a safe way\n- [ ] authenticated endpoints as alternative to telegram/slack\n- [ ] write pure FP lib alternative to scala-scraper and jsoup (I will never do this!)\n- [ ] fix scalastyle and scalafmt\n- [ ] [slate](https://lord.github.io/slate) static site for api\n- [ ] [gitpitch](https://gitpitch.com) for 5@4 presentation\n- [ ] constrain all types with refined where possible\n- [x] travis\n- [ ] travis automate publish to dockerhub\n- [x] publish to dockerhub\n- [x] create deployment k8s chart\n- [x] create argocd app\n- [ ] statefulset with PostgreSQL\n- [ ] alerting with prometheus to slack\n- [ ] grafana dashboard\n- [ ] backup/restore logs and metrics even if re-create cluster\n- [ ] generate and publish scaladoc\n- [x] fix manual Circe codecs with withSnakeCaseMemberNames config\n- [ ] add gatling stress tests\n- [ ] add integration tests\n- [ ] manage secrets in k8s\n\n---\n\n## Endpoints\n\n```\n# healt checks\nhttp :8080/status\nhttp :8080/info\nhttp :8080/env\n```\n\n## Development\n\n```bash\n# test\nsbt test -jvm-debug 5005\nsbt \"test:testOnly *HealthCheckEndpointsSpec\"\nsbt \"test:testOnly *HealthCheckEndpointsSpec -- -z statusEndpoint\"\n\n# run with default\nTELEGRAM_API_TOKEN=123:xyz sbt app/run\n```\n\n### sbt aliases\n\n* `checkFormat` checks format\n* `format` formats sources\n* `update` checks outdated dependencies\n* `build` checks format and runs tests\n\n### Other sbt plugins\n\n* `dependencyTree` shows project dependencies\n\n## Deployment\n\n* [dockerhub](https://hub.docker.com/u/niqdev)\n\n```bash\n# build image\nsbt clean docker:publishLocal\n\n# run temporary container\ndocker run \\\n  --rm \\\n  --name mobile-carrier-bot \\\n  niqdev/mobile-carrier-bot-app:0.1\n\n# access container\ndocker exec -it mobile-carrier-bot bash\n\n# publish\ndocker login\ndocker tag niqdev/mobile-carrier-bot-app:0.1 niqdev/mobile-carrier-bot-app:latest\ndocker push niqdev/mobile-carrier-bot-app:latest\n```\n\n### Charts\n\n* [Docs](https://helm.sh/docs/developing_charts/#charts)\n\n```bash\n# print chart\nhelm template -f charts/app/values.yaml charts/app/\n\n# apply chart\nhelm template -f charts/app/values.yaml charts/app/ | kubectl apply -f -\n\n# verify healtcheck\nkubectl port-forward deployment/\u003cDEPLOYMENT_NAME\u003e 8888:8080\nhttp :8888/status\n\n# logs\nkubectl logs \u003cPOD_NAME\u003e -f\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniqdev%2Fmobile-carrier-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fniqdev%2Fmobile-carrier-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniqdev%2Fmobile-carrier-bot/lists"}