{"id":16283368,"url":"https://github.com/angelmunoz/fsfediversearchive","last_synced_at":"2025-03-20T02:30:47.906Z","repository":{"id":87152011,"uuid":"569048118","full_name":"AngelMunoz/FsFediverseArchive","owner":"AngelMunoz","description":"A Set of Google Cloud Functions Written in F# to archive some of my fediverse activity","archived":false,"fork":false,"pushed_at":"2023-08-02T16:49:37.000Z","size":74,"stargazers_count":13,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-05-21T06:31:56.466Z","etag":null,"topics":["automation","dotnet","fediverse","fsharp","function","gcp","lambda","misskey","serverless","webhook"],"latest_commit_sha":null,"homepage":"https://fediverse.tunaxor.me","language":"F#","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/AngelMunoz.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}},"created_at":"2022-11-22T00:55:37.000Z","updated_at":"2023-03-05T10:36:14.000Z","dependencies_parsed_at":"2023-09-22T03:26:09.017Z","dependency_job_id":null,"html_url":"https://github.com/AngelMunoz/FsFediverseArchive","commit_stats":{"total_commits":21,"total_committers":2,"mean_commits":10.5,"dds":0.04761904761904767,"last_synced_commit":"f98a3e47e391c58a114bc26269f7a7d5e5ad7d19"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AngelMunoz%2FFsFediverseArchive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AngelMunoz%2FFsFediverseArchive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AngelMunoz%2FFsFediverseArchive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AngelMunoz%2FFsFediverseArchive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AngelMunoz","download_url":"https://codeload.github.com/AngelMunoz/FsFediverseArchive/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221733630,"owners_count":16871927,"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":["automation","dotnet","fediverse","fsharp","function","gcp","lambda","misskey","serverless","webhook"],"created_at":"2024-10-10T19:13:18.694Z","updated_at":"2024-10-27T21:08:59.755Z","avatar_url":"https://github.com/AngelMunoz.png","language":"F#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[misskey]: https://github.com/misskey-dev/misskey\r\n[twitter]: https://twitter.com\r\n[activitypub]: https://activitypub.rocks/\r\n[google cloud platform]: https://cloud.google.com\r\n[function]: https://cloud.google.com/functions/docs/create-deploy-gcloud#functions-prepare-environment-csharp\r\n[pub/sub]: https://cloud.google.com/pubsub/docs/publish-receive-messages-client-library?hl=en#pubsub-client-libraries-csharp\r\n[firestore]: https://firebase.google.com/docs/firestore/query-data/get-data#c\r\n\r\n# F# and Google Cloud Functions\r\n\r\nThis is a simple and small project to set up an endpoint for misskey webhooks every time I publish a note (toot/tweet) and I (or someone else) reply on my own notes.\r\n\r\nThe idea is quite simple:\r\n\r\n- Publish notes in misskey\r\n- The `MkWebHook` [function] endpoint gets hit in [google cloud platform]\r\n- Parse the content and fire a [Pub/Sub] event\r\n- The `MkSaveNote` function gets triggered when the a Pub/Sub topic is published from `MkWebHook` and saves the content of the note to [Firestore]\r\n- The `MkDisplay` function grabs whatever it is currently stored in firestore and renders an HTML document with some of the information.\r\n\r\nWhile arguably most of that could have been done in the same function I wanted to try to connect different services along the way, as cloud services are often more than just a tutorial kind of function where once you get out of your rails it is nothing like the tutorial, so far I find this satisfactory and it was a good learning excercise, feel free to ask and raise issues if you have questions.\r\n\r\n\r\n\u003e # What is [MissKey]?\r\n\u003e\r\n\u003e Misskey is a social network that just as mastodon, pixelfed, and other decentralized social media, implements the [ActivityPub] protocol\r\n\u003e it can federate content and is compatible with mastodon up to some extent (where the spec is respected by both parties)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangelmunoz%2Ffsfediversearchive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangelmunoz%2Ffsfediversearchive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangelmunoz%2Ffsfediversearchive/lists"}