{"id":18017577,"url":"https://github.com/cakekindel/egg-party","last_synced_at":"2026-02-28T17:03:29.508Z","repository":{"id":36203005,"uuid":"201568866","full_name":"cakekindel/egg-party","owner":"cakekindel","description":"A new way to celebrate your teammates in Slack, and have fun doing it!","archived":false,"fork":false,"pushed_at":"2022-12-30T18:29:54.000Z","size":3008,"stargazers_count":2,"open_issues_count":46,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-22T07:51:20.605Z","etag":null,"topics":["culture","egg-party","nestjs","slack","slack-apps","social","teammates","typeorm"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cakekindel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-10T02:34:03.000Z","updated_at":"2020-02-27T22:29:56.000Z","dependencies_parsed_at":"2023-01-16T23:46:41.117Z","dependency_job_id":null,"html_url":"https://github.com/cakekindel/egg-party","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cakekindel%2Fegg-party","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cakekindel%2Fegg-party/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cakekindel%2Fegg-party/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cakekindel%2Fegg-party/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cakekindel","download_url":"https://codeload.github.com/cakekindel/egg-party/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245722812,"owners_count":20661830,"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":["culture","egg-party","nestjs","slack","slack-apps","social","teammates","typeorm"],"created_at":"2024-10-30T04:23:39.313Z","updated_at":"2026-02-28T17:03:24.458Z","avatar_url":"https://github.com/cakekindel.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Egg Party 🥚🎉\n\n### Egg party is a Slack App for thanking teammates, raising chickens, and having a rowdy ol' time\n\n---\n\n![GitHub top language](https://img.shields.io/github/languages/top/cakekindel/egg-party)\n[![Azure DevOps builds](https://img.shields.io/azure-devops/build/egg-party/466bd0c0-cb88-4264-9c33-42defabff549/4)](https://dev.azure.com/egg-party/egg-party-api/_build?definitionId=4)\n[![Azure DevOps coverage](https://img.shields.io/azure-devops/coverage/egg-party/466bd0c0-cb88-4264-9c33-42defabff549/4)](https://dev.azure.com/egg-party/egg-party-api/_dashboards/dashboard/663d6429-94b5-48ec-b08c-829ef80489aa)\n[![Greenkeeper badge](https://badges.greenkeeper.io/cakekindel/egg-party.svg)](https://greenkeeper.io/)\n\n\n[![GitHub issues](https://img.shields.io/github/issues/cakekindel/egg-party?color=%2360bec4)](https://github.com/cakekindel/egg-party/issues)\n[![Good First Issues](https://img.shields.io/github/labels/cakekindel/egg-party/tag%3Agood%20first%20issue)](https://github.com/cakekindel/egg-party/labels/tag%3Agood%20first%20issue)\n[![Features](https://img.shields.io/github/labels/cakekindel/egg-party/type%3Afeature)](https://github.com/cakekindel/egg-party/labels/type%3Afeature)\n[![Bugs](https://img.shields.io/github/labels/cakekindel/egg-party/type%3Abug)](https://github.com/cakekindel/egg-party/labels/type%3Abug)\n\n\n[![CII Best Practices Tiered Percentage](https://img.shields.io/cii/percentage/3447)](https://bestpractices.coreinfrastructure.org/en/projects/3447)\n![GitHub](https://img.shields.io/github/license/cakekindel/egg-party)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcakekindel%2Fegg-party.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fcakekindel%2Fegg-party?ref=badge_shield)\n\n\n### Table of Contents\n---\n- [**Want to contribute?**](#want-to-contribute)\n- [**Setup**](#setup)\n    - [**Set up your local .env / dotenv file**](#local-environment-config)\n    - [**Set up your local SQL Database**](#sql-database-setup)\n    - [**Set up a Slack App for testing in Slack**](#sql-database-setup)\n- [**Slack Setup**](#slack-setup)\n    - [**Slack App Settings**](#slack-app-settings)\n    - [**Using your Local API with your Slack App**](#using-your-local-api-with-your-slack-app)\n- [**Scripts**](#scripts)\n- [**Debugging**](#debugging)\n    - [**Visual Studio Code**](#visual-studio-code)\n- [**Common Errors**](#common-errors)\n- [**Helpful Links**](#helpful-links)\n\n\u003cbr/\u003e\n\n### **Want to contribute?**\n---\n\n* **Read**: [Contributing Guidelines](.github/CONTRIBUTING.md)\n* **Install** all of the following:\n    - [SQL Server Express][sql-server-download] or your favorite SQL technology that [TypeORM supports][typeorm-connection-types].\n    - [Node v10+][node-download]\n    - [TypeORM CLI][typeorm-install]\n\n\u003cbr/\u003e\n\n### **Setup**\n---\n\n1. Clone this repo\n1. Run `npm install`\n1. Set up your [.env / dotenv file](#local-environment-config)\n1. Set up your [local database](#sql-database-setup)\n1. In a shell in Egg Party, run `npm test` to build the project\n    and run the unit tests.\n    * If your tests run and pass, WOO! 🎉💃\n    * If they don't, check:\n        - That you [**installed everything**](#want-to-contribute)\n        - The [**Troubleshooting**](#common-errors) section\n        - Our [**GitHub project's issues**][issues-list]\n    * If all else fails, [report an issue here][report-issue].\n      Sorry we couldn't get you fixed sooner 😢\n\n#### **Local Environment Config**\nMake a file called \"`.env`\" in project root, with these contents:\n```python\nENVIRONMENT=\"Local\"\n\nSLACK_CLIENT_ID=\"\"     # CLIENT ID HERE\nSLACK_CLIENT_SECRET=\"\" # CLIENT SECRET HERE\nSLACK_SIGNING_SECRET=\"\"# SIGNING SECRET HERE\n\n# For more information see https://typeorm.io/#/connection-options/common-connection-options\nTYPEORM_CONNECTION=\"\" # if you're using SQL Server, use \"mssql\"\nTYPEORM_DATABASE=\"EggParty\"\nTYPEORM_ENTITIES=\"./dist/src/db/entities/*.entity.js\"\nTYPEORM_MIGRATIONS=\"./dist/src/db/migrations/*.js\"\nTYPEORM_HOST=\"localhost\"\nTYPEORM_USERNAME=\"admin\"\nTYPEORM_PASSWORD=\"password\"\n```\n\n#### **SQL Database Setup**\n\n1. Create a local SQL Database named `EggParty`\n    * e.g. `CREATE DATABASE EggParty;`\n1. Make sure your local database server has these features enabled:\n    * [SQL Server Auth][sql-server-auth-mode]\n    * [TCP/IP][sql-enable-tcp]\n1. [Create a local SQL admin][create-sql-admin] with the credentials in your `.env` file\n1. Run `npm run migration:run` to set up the Egg Party schema in your local database.\n\n\u003cbr/\u003e\n\n### **Slack Setup**\n---\n\n**[Something out of date? Click here to report an issue!][report-issue]**\n\nIn order to run locally against Slack, you'll need:\n- A Slack Workspace to test in (_[create one here][slack-create-workspace]_), and\n- A Slack App (_[create one here][slack-manage-apps]_)\n\n#### Slack App Setup\n\n1. You should be taken to a **Basic Information** view after creating your app.\n1. Scroll down to **App Credentials**, and copy these credentials to the `.env` file you [created earlier](#local-configuration-files):\n    - **Client ID** \u003e `SLACK_CLIENT_ID`\n    - **Client Secret** \u003e `SLACK_CLIENT_SECRET`\n    - **Signing Secret** \u003e `SLACK_SIGNING_SECRET`\n1. From the **Features** sidebar, go to **Oauth \u0026 Permissions**.\n1. For now, add a **Redirect URL** of `https://www.egg-party.com/api/v1/slack/oauth/redirect`.\n1. Down in the **Scopes** view, add the following scopes:\n    - `channels:history`\n    - `reactions:read`\n    - `im:history`\n    - `im:write`\n    - `chat:write`\n1. From the **Features** sidebar, go to **Event Subscriptions**.\n1. Turn **Events** on.\n1. For now, put a **Request URL** of `https://www.egg-party.com/api/v1/slack/events`.\n1. Down in the **Subscribe to Bot Events** view, add the following **Bot User Events**:\n    - `message.channels`\n    - `message.im`\n    - `reaction_added`\n1. From the **Features** sidebar, go to **Interactive Components**.\n1. Turn **Interactivity** on.\n1. For now, put a **Request URL** of `https://www.egg-party.com/api/v1/slack/interactions`.\n\n#### Using your Local API with your Slack App\n\n1. In a shell, run `npm start` to run your local API.\n1. In another shell, run `npm run tunnel` to tunnel your local traffic to a public URL.\n1. The URL printed by `ngrok` is a URL that Slack can use to interact with your local environment.\n1. From the **Features** sidebar, go to **Oauth \u0026 Permissions**.\n1. Replace the Redirect URL you added earlier with `https://{{ngrokUrl}}/api/v1/slack/oauth/redirect`\n1. From the **Features** sidebar, go to **Event Subscriptions**.\n1. Replace the Request URL you put earlier with `https://{{ngrokUrl}}/api/v1/slack/events`\n1. From the **Features** sidebar, go to **Interactive Components**.\n1. Replace the Request URL you put earlier with `https://{{ngrokUrl}}/api/v1/slack/interactions`\n1. From the **Features** sidebar, go to **Manage Distribution**.\n1. Click the **Embeddable Slack Button** to install your app to your workspace.\n    * This should create a `slack_team` entry in your database,\n        and redirect you to Egg Party in your Slack Workspace.\n\n\u003cbr/\u003e\n\n### **Scripts**\n---\n\n\u003ctable\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003cth colspan=\"2\"\u003eRunning\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cnobr\u003e\n                \u003ccode\u003enpm start\u003c/code\u003e\u003cbr/\u003e\n                \u003ccode\u003enpm run serve\u003c/code\u003e\n            \u003c/nobr\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Run the API locally, hot reload when you make typescript changes\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003cth colspan=\"2\"\u003eTesting\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cnobr\u003e\n                \u003ccode\u003enpm test\u003c/code\u003e\u003cbr/\u003e\n                \u003ccode\u003enpm run test:single-run\u003c/code\u003e\n            \u003c/nobr\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Build \u0026 run all unit tests\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cnobr\u003e\u003ccode\u003enpm run test:watch\u003c/code\u003e\u003c/nobr\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Run all unit tests \u0026 re-run when you make changes\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003cth colspan=\"2\"\u003eUtilities\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cnobr\u003e\u003ccode\u003enpm run tunnel\u003c/code\u003e\u003c/nobr\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Tunnel your local traffic to a public URL using `ngrok`.\u003cbr/\u003e\n            Use this to run locally against Slack.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003cth colspan=\"2\"\u003eStyle / Linting\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cnobr\u003e\u003ccode\u003enpm run style:fix\u003c/code\u003e\u003c/nobr\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Formats your local codebase to the Google Typescript Style\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003cth colspan=\"2\"\u003eDatabase\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cnobr\u003e\u003ccode\u003enpm\u0026nbsp;run\u0026nbsp;migration:generate\u003c/code\u003e\u003c/nobr\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Generate a TypeORM migration file based on changes made to entities since the last migration was made\u003cbr/\u003e\u003cbr/\u003e\n            Usage note: you must pass the migration script a name for the migration\u003cbr/\u003e\n            e.g. \u003ccode\u003enpm run migration:generate -- -n AddCreatedDateColumn\u003c/code\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cnobr\u003e\u003ccode\u003enpm run migration:run\u003c/code\u003e\u003c/nobr\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Runs migrations against the database specified in \u003ccode\u003e.env\u003c/code\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cbr/\u003e\n\n### **Debugging**\n---\n\n#### Visual Studio Code\n\nRun the command `Debug: Start Debugging` by pressing `F5`, by searching in the command palette (`F1`),\nor from the Debug panel (`Ctrl/Cmd + Shift + D`)\n\n\u003cbr/\u003e\n\n### **Common Errors**\n---\n* `Failed to connect to localhost:1433 - Could not connect (sequence)`\n    * **Cause**: [TCP is not enabled][sql-enable-tcp] or\n        the [SQL Server Browser Service][sql-enable-server-browser] is not running\n        *(Related: [typeorm#2333][typeorm#2333])*\n\n\u003cbr/\u003e\n\n### **Helpful Links:**\n---\n* Making changes to the Guide Book? Use the [Guide Book Template][guide-book-template]!\n\n[issues-list]: https://github.com/cakekindel/egg-party/issues\n[report-issue]: https://github.com/cakekindel/egg-party/issues/new\n[sql-server-download]: https://www.microsoft.com/en-us/sql-server/sql-server-downloads\n[node-download]: https://nodejs.org/en/\n[typeorm-connection-types]: https://typeorm.io/#/connection-options/common-connection-options\n[typeorm-install]: https://github.com/typeorm/typeorm/blob/master/docs/using-cli.md\n\n[sql-server-auth-mode]: https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/change-server-authentication-mode?view=sql-server-2017\n[create-sql-admin]: https://www.godaddy.com/help/create-an-admin-user-for-microsoft-sql-server-19032\n[sql-enable-tcp]: https://www.habaneroconsulting.com/stories/insights/2015/tcpip-is-disabled-by-default-in-microsoft-sql-server-2014\n[sql-enable-server-browser]: https://www.godaddy.com/help/enable-the-sql-server-browser-service-19117\n[typeorm#2333]: https://github.com/typeorm/typeorm/issues/2133\n\n[slack-create-workspace]: https://slack.com/create\n[slack-manage-apps]: https://api.slack.com/apps\n\n[gts-url]: https://github.com/google/gts\n\n[guide-book-template]: https://bit.ly/2NypQvF\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcakekindel%2Fegg-party","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcakekindel%2Fegg-party","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcakekindel%2Fegg-party/lists"}