{"id":24895209,"url":"https://github.com/jcocozza/cassidy-connector","last_synced_at":"2025-03-27T15:25:16.780Z","repository":{"id":232881536,"uuid":"773060412","full_name":"jcocozza/cassidy-connector","owner":"jcocozza","description":"A tool that allows access to activity data","archived":false,"fork":false,"pushed_at":"2024-10-22T22:38:58.000Z","size":202,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-01T19:16:59.294Z","etag":null,"topics":["strava","strava-api"],"latest_commit_sha":null,"homepage":"","language":"Go","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/jcocozza.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":"2024-03-16T16:27:51.000Z","updated_at":"2024-10-22T22:38:57.000Z","dependencies_parsed_at":"2024-04-14T02:57:19.977Z","dependency_job_id":"a089b08e-4ebf-4184-8800-8e7688004e2e","html_url":"https://github.com/jcocozza/cassidy-connector","commit_stats":null,"previous_names":["jcocozza/cassidy-connector"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcocozza%2Fcassidy-connector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcocozza%2Fcassidy-connector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcocozza%2Fcassidy-connector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcocozza%2Fcassidy-connector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jcocozza","download_url":"https://codeload.github.com/jcocozza/cassidy-connector/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245869590,"owners_count":20685869,"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":["strava","strava-api"],"created_at":"2025-02-01T19:17:10.166Z","updated_at":"2025-03-27T15:25:16.715Z","avatar_url":"https://github.com/jcocozza.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cassidy Connector\n\nCassidy Connector is a part of the larger Cassidy project.\n\nThe goal of this code is to facilitate connections between a whole bunch of activity platforms.\nFor the foreseeable future, this project will only support reading from platforms, not writing to them.\nWhile this is purely to reduce the total scope of the project, I have found that reading is much more common then writing.\n\nThis will start with a basic strava integration and (hopefully) grow overtime to include more.\n\nAs a warning, everything should be considered unstable until v1.0.0 is released.\n\n## Design Philosophy\nEvery platform gets a package (e.g. `strava`, `finalSurge`).\n### App\nEach package contains an `app` folder.\nThe app folder represents an instance of an app created by the user.\nFor example, I need to go to strava and create an application with them.\nI will be given credentials (e.g. client secret). These are used to instantiate the app.\n\nIn each app package is an `api` folder. This will contain a stuct with the name convention `\u003cPlatform\u003eAPI` (e.g. `StravaAPI`).\n\nThe idea is that the App and `\u003cPlatform\u003eAPI` structs are _long lived_.\nYou instantiate them when your app spins up and then use the same `\u003cPlatform\u003eAPI` struct instance to make all of your calls.\n(Or, if you have several, you can distribute the load across several)\n\n### API struct\nThis api struct is the main point of access for users that want to programatically use the platform's api.\nI like to think of this api struct as a convience wrapper. It hides the details of things like a swagger implementation, or even just raw http requests.\nThe api struct contains all the methods users will need for iteracting with the api.\nIt handles authentication, rate limits and will make calls to lower level methods that return things from the platform's api.\n\n### The lower level\nTechnically speaking, the API struct should not call the platform api's directly.\nThere should be a lower level implementation folder in the main package folder that handles this.\nThe API struct will call these methods to make api requests.\nThese lower levels calls are exposed to the developer (in the `App` struct), however none of the convience of rate limiting, authentication, etc is handled.\n\nWhen possible, this lower level implementation should be done using swagger and automatic code gen.\n\n### cmd\nEach platform package also has a `cmd` folder that provides an implementation of a CLI tool that can be used for easy testing of methods.\nThe CLI is not intended for any kind of heavy use. It is merely for ad-hoc work and testing.\n\n## Strava\n\nThe first step in the project is to get some basic data connections to allow users to import their data.\nThis will also give us a better feel of the structure and shape of data that we are dealing with.\n\nAt least in spirit, this portion will be modeled after [stravalib](https://github.com/stravalib/stravalib).\n\n## Final Surge\n\nCurrently, Final Surge does not expose any api for public use, so this is a backengineering.\nAs such, it can break at any time. Moreover, its functionality is limited as I have not figured out all the endpoints.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcocozza%2Fcassidy-connector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjcocozza%2Fcassidy-connector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcocozza%2Fcassidy-connector/lists"}