{"id":26265659,"url":"https://github.com/slack-edge/slack-edge-app-template","last_synced_at":"2025-04-30T16:46:06.874Z","repository":{"id":225770854,"uuid":"766808067","full_name":"slack-edge/slack-edge-app-template","owner":"slack-edge","description":"Slack app project template demonstrating how to manage your slack-edge app using Slack CLI","archived":false,"fork":false,"pushed_at":"2025-02-08T23:53:43.000Z","size":35,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-21T08:11:22.570Z","etag":null,"topics":["nodejs","slack","socket-mode","typescript","websocket","webstandards"],"latest_commit_sha":null,"homepage":"https://github.com/seratch/slack-edge","language":"TypeScript","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/slack-edge.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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-04T06:55:56.000Z","updated_at":"2025-02-08T23:53:46.000Z","dependencies_parsed_at":"2025-01-24T06:41:12.918Z","dependency_job_id":null,"html_url":"https://github.com/slack-edge/slack-edge-app-template","commit_stats":null,"previous_names":["seratch/slack-edge-app-template","slack-edge/slack-edge-app-template"],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slack-edge%2Fslack-edge-app-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slack-edge%2Fslack-edge-app-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slack-edge%2Fslack-edge-app-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slack-edge%2Fslack-edge-app-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/slack-edge","download_url":"https://codeload.github.com/slack-edge/slack-edge-app-template/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251747663,"owners_count":21637404,"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":["nodejs","slack","socket-mode","typescript","websocket","webstandards"],"created_at":"2025-03-14T03:12:28.515Z","updated_at":"2025-04-30T16:46:06.854Z","avatar_url":"https://github.com/slack-edge.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## slack-edge app template (Socket Mode)\n\nThis is a Slack app project template demonstrating how to manage your [slack-edge](https://github.com/seratch/slack-edge) app using [Slack CLI](https://api.slack.com/automation/cli/install) for local development.\n\nThe notable qualities of this app template include:\n\n* Smooth integration with [Slack CLI](https://api.slack.com/automation/cli/install) for rapid local app development\n* No need to serve a public URL to receive Slack events, thanks to [Socket Mode](https://api.slack.com/apis/connections/socket)\n* Auto-reloading for both TypeScript code and App Manifest (see: [1](https://github.com/seratch/slack-edge-app-template/blob/main/package.json))\n* Steamlined robust type-safety in TypeScript programming (see: [1](https://github.com/seratch/slack-edge), [2](https://github.com/seratch/slack-web-api-client))\n\n## Getting Started\n\n### Install CLI and grant permissions\n\nIf you haven't yet installed Slack CLI, I recommend visiting [the guide page](https://api.slack.com/automation/cli/install) to do so, and allowing it to install apps into your sandbox or paid Slack workspaces. To complete this, you will need to run `slack login` command on your terminal, plus execute `/slackauthticket` with the given parameter in your Slack workspace.\n\nPlease remember that either a sandbox or paid workpace is required to use the CLI. To learn more about the \"sandbox\", read [this article](https://dev.to/seratch/rapid-slack-app-development-using-slack-cli-and-sandboxes-2f6m) for details.\n\n### Start your app on your local machine\n\nOnce your CLI obtains the permission to install a local dev app, there is nothing else to prepare before running this template app. Clone this repo and install all the required npm packages:\n\n```bash\ngit clone git@github.com:seratch/slack-edge-app-template.git my-slack-app\ncd my-slack-app/\nnpm i\n```\n\nNow you can execute `slack run` to activate your first Slack app connected to a workspace via the CLI. The CLI automaticaly creates a new local dev app, which synchronizes the `manifest.json` data behind the scenes and establishes a Socket Mode connection (WebSocket protocol) with the authorized Slack workspace.\n\n```bash\nunset SLACK_APP_TOKEN\nunset SLACK_BOT_TOKEN\nslack run\n```\n\nIf you see `[INFO]  socket-mode:SocketModeClient:0 Now connected to Slack` in the console output, the local dev app is successfully connected to your Slack workspace :tada:\n\nUnlike before, you don't need to set any environment variables such as `SLACK_BOT_TOKEN`. The CLI passes the required variables to your app instance. If you have some env variables in the terminal session, you might need to unset them (e.g., `unset SLACK_BOT_TOKEN`) to prevent potential misbehavior.\n\n### Deploy the app to prod environment\n\nFor operational efficiency at a production-grade level, using a container is currently considered one of the best practices. You can use the `Dockerfile`, located at the project's root directory, for this purpose. To see how it works, you can execute the following commands:\n\n```bash\ndocker build . -t my-awesome-slack-app\n\nexport SLACK_APP_TOKEN=xapp-...\nexport SLACK_BOT_TOKEN=xoxb-...\n\ndocker run \\\n  -e SLACK_APP_TOKEN=$SLACK_APP_TOKEN \\\n  -e SLACK_BOT_TOKEN=$SLACK_BOT_TOKEN \\\n  -e SLACK_APP_LOG_LEVEL=info \\\n  -it my-awesome-slack-app\n```\n\n## Features in the app\n\nThis example app contains the following feature sets (release status; required scopes; the settings in manifest.json):\n\n* An [\"app_mention\" event](https://api.slack.com/events/app_mention) listener (GA; [app_mentions:read](https://api.slack.com/scopes/app_mentions:read) scope; [settings.event_subscriptions](https://api.slack.com/reference/manifests#settings))\n* A [\"message\" event](https://api.slack.com/events/message) listener (GA; [channels:history](https://api.slack.com/scopes/channels:history), [groups:history](https://api.slack.com/scopes/groups:history) scopes; [settings.event_subscriptions](https://api.slack.com/reference/manifests#settings))\n* A [\"reaction_added\" event](https://api.slack.com/events/reaction_added) listener (GA; [reactions:read](https://api.slack.com/scopes/reactions:read) scope; [settings.event_subscriptions](https://api.slack.com/reference/manifests#settings))\n* A `/run-test-app` [slash command](https://api.slack.com/interactivity/slash-commands) (GA; [commands](https://api.slack.com/scopes/commands) scope; [features.slash_commands](https://api.slack.com/reference/manifests#features))\n* A global [shortcut](https://api.slack.com/interactivity/shortcuts) (GA; [commands](https://api.slack.com/scopes/commands) scope, [features.shortcuts](https://api.slack.com/reference/manifests#features))\n* A message [shortcut](https://api.slack.com/interactivity/shortcuts) (GA; [commands](https://api.slack.com/scopes/commands) scope; [features.shortcuts](https://api.slack.com/reference/manifests#features))\n* [Modal](https://api.slack.com/surfaces/modals) interactions (GA; [commands](https://api.slack.com/scopes/commands) scope; [settings.interactivity](https://api.slack.com/reference/manifests#features))\n* A [custom step](https://api.slack.com/automation/functions/custom-bolt) within Workflow Builder (Still in beta; no scope reqiured; [functions](https://api.slack.com/reference/manifests#functions))\n\nIf certain functionalities are deemed unnecessary, you can safely delete the corresponding code lines in `src/app.ts` and required scopes and settings in `manifest.json`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslack-edge%2Fslack-edge-app-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fslack-edge%2Fslack-edge-app-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslack-edge%2Fslack-edge-app-template/lists"}