{"id":22085594,"url":"https://github.com/nexmo/enter-our-orbit","last_synced_at":"2025-07-24T17:31:30.947Z","repository":{"id":37014638,"uuid":"333791664","full_name":"Nexmo/enter-our-orbit","owner":"Nexmo","description":"An app for ingesting custom data sources into Orbit.love","archived":false,"fork":false,"pushed_at":"2025-06-30T04:53:59.000Z","size":64,"stargazers_count":9,"open_issues_count":12,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-30T05:31:17.811Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/Nexmo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","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}},"created_at":"2021-01-28T14:57:29.000Z","updated_at":"2024-08-26T06:22:31.000Z","dependencies_parsed_at":"2025-02-06T07:23:21.564Z","dependency_job_id":"22daf14b-8d6e-4e25-8105-3da77c25e5cb","html_url":"https://github.com/Nexmo/enter-our-orbit","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Nexmo/enter-our-orbit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nexmo%2Fenter-our-orbit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nexmo%2Fenter-our-orbit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nexmo%2Fenter-our-orbit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nexmo%2Fenter-our-orbit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nexmo","download_url":"https://codeload.github.com/Nexmo/enter-our-orbit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nexmo%2Fenter-our-orbit/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266878569,"owners_count":23999619,"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-07-24T02:00:09.469Z","response_time":99,"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":[],"created_at":"2024-12-01T01:15:12.437Z","updated_at":"2025-07-24T17:31:30.235Z","avatar_url":"https://github.com/Nexmo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Vonage + Orbit](.github/logo.png)\n\n# Enter Our Orbit\n\nAn express application which ingests the following data into [Orbit](https://orbit.love):\n\n* Active participants in Twitch stream chat\n* YouTube users who leave comments on a specified channel\n* Questions asked on Stackoverflow\n\n## Setup\n\nRename `.env.example` to `.env` and fill out all of the fields for the components you wish to use. The following environment variables are always required:\n\n* ORBIT_WS - the name of your Orbit workspace\n* ORBIT_KEY - an API key for your Orbit user (it is reommended that you use another user for API access)\n\nIf you don't want to use any components, just remove them from `index.js`.\n\n## Running the Application\n\n```\n$ npm run start # spins up application\n$ npm run dev # spins up app with nodemon and ngrok\n```\n\nIf you have a paid ngrok account, add the `NGROK_TOKEN` environment variable to get custom domains based on the project name in `package.json`.\n\n## Orbit\n\nThe __orbit__ component wraps the Orbit API and allows for the addition and retrieval of activities.\n\n```\nconst orbit = require('./orbit.js')\n\nawait orbit.addActivity({\n    activity: {},\n    member: {},\n    identity: {}\n})\n\nawait orbit.getActivities('activity:type')\n```\n\n### Potential Improvements\n\n* No rate-limiting measures have been implemented\n* orbit.getActivities() only returns the first 500 items\n\n## Twitch Chat\n\nThe __twitchChat__ component connects to a channel's Twitch channel and adds activities the first time a user sends a message into the chat while a stream is live, and when they are banned.\n\nWhen banned, the 'Banned' tag is added to the member. Mod messages are ignored.\n\nTo set up the twitchChat component:\n\n1. [Generate Twitch OAuth Token](https://twitchapps.com/tmi/)\n2. [Register a Twitch application](https://dev.twitch.tv/console)\n3. Add the following environment variables:\n    * TWITCH_CHANNEL - the Twitch channel to watch chat for\n    * TWITCH_USER - your twitch username for auth\n    * TWITCH_USER_TOKEN - your twitch oauth token starting 'oauth:'\n    * TWITCH_CLIENT_ID - twitch application client id\n    * TWITCH_CLIENT_SECRET - twitch application client secret\n\n### Potential Improvements\n\n* An activity is added every time a message is sent, and the application swallows the Orbit error if there is a matching key (already a user message logged for this stream).\n* No rate-limiting measures on the assumption 120 messages will not be sent per minute.\n\n## YouTube Comments\n\nThe __youtubeComments__ component runs a daily cron job. On a daily schedule, all comments are retrieved from Orbit and YouTube on every video posted by a specificed channel. New comments are added as Orbit activities.\n\nTo set up the youtubeComments component:\n\n1. [Register a YouTube Application and API Key](https://developers.google.com/youtube/registering_an_application)\n2. [Locate your YouTube Channel ID](https://support.google.com/youtube/answer/3250431?hl=en-GB)\n3. Add the following environment variables:\n    * YOUTUBE_CHANNEL_USERNAME - channel username to get videos from\n    * YOUTUBE_API_KEY - api key from step 1\n    * YOUTUBE_CHANNEL_ID - your ID from step 2\n\n### Potential Improvements\n\n* Does not paginate the Orbit API when getting existing activities. You are limited to the first 500.\n* No rate-limiting measures on the assumption 120 comments won't be ingested at the same time.\n\n## Stack Overflow Questions\n\nThe __stackoverflowQuestions__ component runs on a daily cron job. On a daily schedule, all questions are retrieved from Orbit and on Stackoverflow from a specified list of tags. The component then visits each question owner's profile and also grabs their Twitter \u0026 GitHub usernames, if present. New questions are added as Orbit activities.\n\nNote that a question requires only one of these tags to be included in the results, not all.\n\nTo set up the stackoverflowQuestions component:\n\n1. [Register a StackExchange App and note the app key](https://stackapps.com/apps/oauth/register)\n2. Add the following environment variables:\n    * STACK_KEY - your app key\n    * STACK_TERMS - comma-separated tag list\n\n### Potential Improvements\n\n* Does not paginate the Orbit API when getting existing activities. You are limited to the first 500.\n* Only will ingest 120 questions per run. It is recommended you manually run the app a few times to backfill data 120 activities at a time.\n* Does not include any answers.\n\n## Code of Conduct\n\nIn the interest of fostering an open and welcoming environment, we strive to make participation in our project and our community a harassment-free experience for everyone. Please check out our [Code of Conduct](.github/CODE_OF_CONDUCT.md) in full.\n\n## Contributing\n\nWe :heart: contributions from everyone! Check out the [Contributing Guidelines](.github/CONTRIBUTING.md) for more information.\n\n\u003ca href=\"./../../issues\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat\" alt=\"Contributions Welcome\"\u003e\n\u003c/a\u003e\n\n## License\n\nThis project is subject to the [MIT License](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnexmo%2Fenter-our-orbit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnexmo%2Fenter-our-orbit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnexmo%2Fenter-our-orbit/lists"}