{"id":30117135,"url":"https://github.com/manyfold3d/fasp_client","last_synced_at":"2025-11-11T11:31:25.471Z","repository":{"id":308334070,"uuid":"1032410526","full_name":"manyfold3d/fasp_client","owner":"manyfold3d","description":"A Rails engine implementing the client (non-provider) side of the FASP standard (https://fediscovery.org)","archived":false,"fork":false,"pushed_at":"2025-09-15T20:53:45.000Z","size":219,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-07T17:22:40.926Z","etag":null,"topics":["fasp","fediverse","rails","rails-engine"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/manyfold3d.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","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,"zenodo":null},"funding":{"open_collective":"manyfold"}},"created_at":"2025-08-05T09:11:14.000Z","updated_at":"2025-09-15T20:53:30.000Z","dependencies_parsed_at":"2025-08-05T12:21:01.043Z","dependency_job_id":null,"html_url":"https://github.com/manyfold3d/fasp_client","commit_stats":null,"previous_names":["manyfold3d/fasp_client"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/manyfold3d/fasp_client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manyfold3d%2Ffasp_client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manyfold3d%2Ffasp_client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manyfold3d%2Ffasp_client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manyfold3d%2Ffasp_client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manyfold3d","download_url":"https://codeload.github.com/manyfold3d/fasp_client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manyfold3d%2Ffasp_client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278981518,"owners_count":26079640,"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","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"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":["fasp","fediverse","rails","rails-engine"],"created_at":"2025-08-10T10:37:45.169Z","updated_at":"2025-10-08T17:08:26.662Z","avatar_url":"https://github.com/manyfold3d.png","language":"Ruby","funding_links":["https://opencollective.com/manyfold"],"categories":[],"sub_categories":[],"readme":"# FaspClient\nA Rails engine that implements the non-provider side of the [Fediverse Auxiliary Service Provider (FASP)](https://fediscovery.org) standard.\n\n## Features\n\n* [Base URL discovery](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/general/v0.1/protocol_basics.md#base-url) ✅\n* [Request integrity](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/general/v0.1/protocol_basics.md#request-integrity) ✅\n* [Authentication](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/general/v0.1/protocol_basics.md#authentication) ✅\n* [Provider registration](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/general/v0.1/registration.md) ✅\n* [Accepting registration requests](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/general/v0.1/registration.md) ✅\n* [Selecting capabilities](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/general/v0.1/registration.md#selecting-capabilities) ✅\n* [Fetching FASP information](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/general/v0.1/provider_info.md) ✅\n* [Discovery APIs](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/discovery/README.md)\n  * [account_search](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/discovery/account_search/v0.1/account_search.md) ✅\n  * [follow_recomendation](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/discovery/follow_recommendation/v0.1/follow_recommendation.md) ✅\n  * [data_sharing](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/discovery/data_sharing/v0.1/data_sharing.md) ✅ + ⏳ (no backfill yet)\n  * [trends](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/discovery/trends/v0.1/trends.md) ⏳\n\n## Installation\n\nAdd to your application's Gemfile:\n\n```ruby\ngem \"fasp_client\"\n```\n\nInstall configuration and run migrations (you'll also want to do this when upgrading).\n\n```shell\nbin/rails generate fasp_client:install \u0026\u0026 bin/rails db:migrate\n```\n\nYou will probably want to customise the view templates used for editing and listing providers.\nYou can copy the default views like so:\n\n```shell\nbin/rails generate fasp_client:views\n```\n\n## Usage\n\nMount the engine in your `routes.rb` file:\n\n```ruby\nmount FaspClient::Engine =\u003e \"/fasp\"\n```\n\nAdd the base URL to your nodeinfo metadata:\n\n```ruby\n\"faspBaseUrl\" =\u003e Rails.application.routes.url_helpers.fasp_client_url\n```\n\nIf you're using [Federails](https://gitlab.com/experimentslabs/federails), you can add this to the metadata using the configuration option (currently only on the `nodeinfo-metadata` branch):\n\n```ruby\nconf.nodeinfo_metadata = -\u003e do\n\t{\"faspBaseUrl\" =\u003e Rails.application.routes.url_helpers.fasp_client_url}\nend\n```\n\nEdit `config/initializers/fasp_client.rb` and add customise the template `authenticate` method. It should return true if the current user should be able to access the provider approval/edit pages.\n\nOnce you've done that, you can sign up to FASP providers using the URL of your site, and you should be able to register, approve, and choose capabilities.\n\n### Capabilities\n\n#### account_search\n\nGet a list of accounts matching the provided search term, returned as a simple array of account URIs. Provide the optional `limit` parameter to control now many results are returned (default = 20).\n\n```ruby\nmy_provider.account_search(\"mastodon\", limit: 5)\n=\u003e [\"https://mastodon.social/users/Gargron\"]\n```\n\n#### data_sharing\n\nAutomatically shares data from your app to the FASP on demand. To configure one of your models to be included in data sharing, include the appropriate concern and set the configuration:\n\n```ruby\nclass MyModel \u003c ApplicationRecord\n  include FaspClient::DataSharing::Lifecycle\n\n  fasp_share_lifecycle category: \"account\", uri_method: :my_canonical_uri\n\n\tdef my_canonical_uri\n\t\t# Any method that returns the canonical activitypub URI for this object\n\tend\nend\n```\n\nOnly lifecycle events are currently supported, trending events will be implemented in future. Valid categories are currently `account`, or `content` (see [the spec](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/discovery/data_sharing/v0.1/data_sharing.md) for details).\n\nThe actual announcements are then sent to all subscribed providers by a background ActiveJob, using the `default` queue. You can set a specific queue name by adding an optional `queue` parameter to `fasp_share_lifecycle`:\n\n```ruby\nfasp_share_lifecycle category: \"account\", uri_method: :my_canonical_uri, queue: \"fasp_broadcasts\"\n```\n\nYou can also add an `only_if` argument to point to a method that returns true if an item should be shared, allowing you to only share certain items:\n\n```ruby\nfasp_share_lifecycle category: \"account\", uri_method: :my_canonical_uri, only_if: :public?\n```\n\nOnly new lifecycle events are currently sent. Whilst backfill requests can be made, they aren't serviced yet (see https://github.com/manyfold3d/fasp_client/issues/25).\n\n#### follow_recommendation\n\nGet a list of follow recommendations, returned as a simple array of account URIs. The account URI argument is required by the [spec](https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications/blob/main/discovery/follow_recommendation/v0.1/follow_recommendation.md), but won't necessarily affect the results, depending on the server implementation.\n\n```ruby\nmy_provider.follow_recommendation(your_account_uri)\n=\u003e [\n\t\"https://mastodon.me.uk/users/Floppy\",\n\t\"https://mastodon.social/users/Gargron\"\n]\n```\n\n## License\nThe gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n\n## Credits\n\nThis code was originally written for the [Manyfold](https://github.com/manyfold3d/manyfold) project, which is funded through [NGI0 Entrust](https://nlnet.nl/entrust), a fund established by [NLnet](https://nlnet.nl) with financial support from the European Commission's [Next Generation Internet](https://ngi.eu) program. Learn more at the [NLnet project page](https://nlnet.nl/project/Personal-3D-archive).\n\n[\u003cimg src=\"https://nlnet.nl/logo/banner.png\" alt=\"NLnet foundation logo\" width=\"20%\" /\u003e](https://nlnet.nl)\n[\u003cimg src=\"https://nlnet.nl/image/logos/NGI0_tag.svg\" alt=\"NGI Zero Logo\" width=\"20%\" /\u003e](https://nlnet.nl/entrust)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanyfold3d%2Ffasp_client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanyfold3d%2Ffasp_client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanyfold3d%2Ffasp_client/lists"}