{"id":15135213,"url":"https://github.com/jetbrains/space-slack-channel-sync","last_synced_at":"2025-10-15T12:40:54.824Z","repository":{"id":47766933,"uuid":"516294241","full_name":"JetBrains/space-slack-channel-sync","owner":"JetBrains","description":"Space Slack two-way message tunnel","archived":false,"fork":false,"pushed_at":"2023-12-08T12:45:34.000Z","size":537,"stargazers_count":6,"open_issues_count":0,"forks_count":3,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-05-28T07:02:46.788Z","etag":null,"topics":["jetbrains-space","slack"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JetBrains.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":"2022-07-21T08:49:23.000Z","updated_at":"2024-05-12T16:46:22.000Z","dependencies_parsed_at":"2023-12-08T13:46:43.028Z","dependency_job_id":null,"html_url":"https://github.com/JetBrains/space-slack-channel-sync","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JetBrains/space-slack-channel-sync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fspace-slack-channel-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fspace-slack-channel-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fspace-slack-channel-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fspace-slack-channel-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JetBrains","download_url":"https://codeload.github.com/JetBrains/space-slack-channel-sync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fspace-slack-channel-sync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279078888,"owners_count":26098622,"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-10-15T02:00:07.814Z","response_time":56,"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":["jetbrains-space","slack"],"created_at":"2024-09-26T05:44:12.714Z","updated_at":"2025-10-15T12:40:54.810Z","avatar_url":"https://github.com/JetBrains.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![JetBrains team project](https://jb.gg/badges/team.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)\n# Space Slack Channel Tunnel\n\nThe application provides a way to tunnel messages between channels in Space and Slack. You can install it from Space\nMarketplace [here](https://plugins.jetbrains.com/plugin/19410-slack-channel-tunnel-beta).\n\nYou can also build and deploy the application on your own, for that please read on.\n\n## Issue tracking\n\nReactions are not synchronized yet, it is a work in progress.\n\nPlease report the issues you find [here](https://youtrack.jetbrains.com/issues/SPACE).\n\n## Application deployment\n\nTo deploy the application please do the following:\n\n1. Build and deploy the application to a host available both to Slack and to your Space instance\n2. Register a corresponding application in Slack\n3. Install the application to Space using an install-link\n\n### 1. Build and deploy the application\n\nTo build the application run the `distZip` gradle task. The application will be at `app/build/distributions/space-slack-sync.zip`.\n\nThe application is intended to be built and run with JDK 11. Other JDK versions have not been tested.\n\nMake sure that the deployed application is available for HTTP requests from/to Slack and from/to your Space instance.\n\n### 2. Register an application in Slack\n\nIf you don't yet have a Slack workspace, please create one. Using the Slack account from that workspace please\ncreate an app on [api.slack.com](https://api.slack.com).\n\nTo set up the application please use the manifest specified below. Replace the host address placeholders with the\nactual value for your deployed application.  \n\n```yaml\ndisplay_information:\n  name: JetBrains Space Slack Channel Sync\n  description: Two-way synchronization of channels in Slack and Space\n  background_color: \"#1a181a\"\nfeatures:\n  bot_user:\n    display_name: JetBrains Space Slack Channel Sync\n    always_online: false\noauth_config:\n  redirect_urls:\n    - https://\u003cHOST_ADDRESS_OF_THE_DEPLOYED_APP\u003e/api/slack/oauth/callback\n  scopes:\n    bot:\n      - users.profile:read\n      - users:read\n      - users:read.email\n      - channels:history\n      - team:read\n      - chat:write\n      - chat:write.customize\nsettings:\n  event_subscriptions:\n    request_url: https://\u003cHOST_ADDRESS_OF_THE_DEPLOYED_APP\u003e/api/slack/events\n    bot_events:\n      - message.channels\n  org_deploy_enabled: false\n  socket_mode_enabled: false\n  token_rotation_enabled: true\n```\n\n### 3. Install the application to Space using an install-link\n\nCreate an installation link for you application by using the following URL template:\n\n```\nhttps://\u003cHOST_ADDRESS_OF_YOUR_SPACE_INSTANCE\u003e/extensions/installedApplications/new?name=Channel%20Tunnel%20Test\u0026endpoint=https%3A%2F%2F\u003cHOST_ADDRESS_OF_THE_DEPLOYED_APP_URL_ENCODED\u003e%2Fapi%2Fspace\u0026code-flow-enabled=true\u0026code-flow-redirect-uris=https://nowhere.domain\n```\n\nNote that the host address of your app needs to be URL encoded as it is a part of a URL query parameter.\n\nPaste the resulting URL into the browser address bar, and you should be taken to the app-install-dialog \nfor the Space Slack Channel Sync app.\n\n## Developing the application\n\nIf you'd like to make changes to the application and need to set up a local development environment, please follow\nthe steps below.\n\n### Run application server locally\n\nThere are two parts of the application: client-side and server-side. You can run them separately, this lets\nyou make changes to the client code and see the effect in your browser immediately after webpage refresh.\nThe production build bundles client- and server-sides together into a single JAR (`distZip` gradle task).\n\nThe client side can be run using `npm`:\n- to initialize node modules, run `npm install` in the `./client` directory. You only need to do this once.\n- to run the client and serve the static content, run `npm run start`. In IntelliJ IDEA you can do this by clicking\n  on a corresponding `Run` icon in `./client/package.json` file.\n\nThe server side can be run using the gradle `run` task: `./gradlew run`.\n\nWhen you locally run client and server sides, you run two separate servers:\n- webpack development server (`npm run start`) that hosts static content\n- JVM server that processes API calls (`./gradlew run`)\n\nIn this configuration webpack dev server proxies the incoming API requests to JVM. The rules for the proxy can be found in\n`./client/src/setupProxy.js`. Thus, an API call made from your browser will go this way:\n\n1. Your browser makes API request, for example, to `HTTP GET https://1877-4533-142-9733-71.eu.ngrok.io/api/homepage-data`.\n2. Request is forwarded to the ngrok instance running locally\n3. Forwarded to webpack dev-server (`localhost:3000`, 3000 being the default port for webpack dev-server)\n4. Forwarded to application server (`localhost:8080`, 8080 being the default port for application server)\n\nWhen running ngrok, specify `--host-header` parameter:\n\n```shell\nngrok http 3000 --host-header=\"localhost:3000\"\n```\nIt is required for the proxy in webpack dev server to function properly.\n\n### Step by step\n\n* Make sure you have Docker compose installed locally - it is needed for running the local DynamoDB container;\n* Set up a Slack application, using the manifest template above\n* Run ngrok as specified above\n* Go to your application settings in Slack and modify all the urls there to point to ngrok tunnel url.\n  The most convenient way to do this is via `App Manifest` tab (https://app.slack.com/app-settings/\u003cteam-id\u003e/\u003capp-id\u003e/app-manifest) because\n  all the urls are there in one place. You need to fix three urls - redirect url for OAuth, request url for event subscriptions and request url for interactivity.\n* Copy `template_local.properties` file in the project root into the `local.properties` file (this isn't intended to be committed to git, so it's included in gitignore);\n* Edit the `local.properties` file to provide proper configuration values:\n    * Specify `app.encryptionKey`: the key for encrypting secrets that are stored in database. A simple way to do this is to generate the key\n      https://www.allkeysgenerator.com/Random/Security-Encryption-Key-Generator.aspx (`Encryption key` tab, `256-bit` option).\n    * Specify `slack.clientId`, `slack.clientSecret`, `slack.signingSecret` and `slack.appId`. They are generated by Slack when creating the application\n      and can be found in the `Basic information` -\u003e `App Credentials` section of the application page (https://api.slack.com/apps/\u003capp-id\u003e/general).\n    * Specify `app.spacePublicUrl` if you have a Space instance that is not open to the internet, but is available locally from your machine\n* Start the server application by `./gradlew run`\n* Run `npm install` in the `./client` directory (only need to do this once)\n* Run `npm run start` in the `./client` directory — this starts the webpack dev-server\n* Create an installation URL for your application that allows you to install the app into Space:\n\n```\nhttps://\u003cSPACE_HOSTNAME\u003e/extensions/installedApplications/new?name=Slack%20Channel%20Tunnel\u0026endpoint=https%3A%2F%2F\u003cNGROK_HOSTNAME_URL_ENCODED\u003e%2Fspace%2Fapi\u0026code-flow-enabled=true\u0026code-flow-redirect-uris=https%3A%2F%2Fnowhere.domain\n```\n\nSubstitute the variables in the URL template and paste the resulting URL into the browser. It will take you to the\napp installation screen.\n\nRemember to reconfigure the Slack application settings and then reinstall the application to both Slack workspace and Space organization\nwhenever the ngrok tunnel is reestablished with a new address. Space allows multiple applications with the same name, so it's better to drop\nthe previous installations from the test organization before installing the application afresh.\n\n# License\n\n`Space Slack Channel Tunnel` is distributed under the terms of the Apache License (Version 2.0).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjetbrains%2Fspace-slack-channel-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjetbrains%2Fspace-slack-channel-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjetbrains%2Fspace-slack-channel-sync/lists"}