{"id":23511209,"url":"https://github.com/percolate/crostini","last_synced_at":"2025-07-06T07:07:32.052Z","repository":{"id":148675237,"uuid":"169332013","full_name":"percolate/crostini","owner":"percolate","description":"A demonstration app for the Percolate Developer Platform (PDP) written in Typescript","archived":false,"fork":false,"pushed_at":"2023-07-12T03:34:14.000Z","size":270,"stargazers_count":0,"open_issues_count":9,"forks_count":2,"subscribers_count":30,"default_branch":"master","last_synced_at":"2025-05-13T17:21:47.925Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":false,"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/percolate.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-05T23:58:00.000Z","updated_at":"2023-03-16T17:13:27.000Z","dependencies_parsed_at":"2025-02-16T20:40:32.756Z","dependency_job_id":null,"html_url":"https://github.com/percolate/crostini","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/percolate/crostini","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percolate%2Fcrostini","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percolate%2Fcrostini/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percolate%2Fcrostini/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percolate%2Fcrostini/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/percolate","download_url":"https://codeload.github.com/percolate/crostini/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percolate%2Fcrostini/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263861948,"owners_count":23521355,"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":[],"created_at":"2024-12-25T12:13:44.438Z","updated_at":"2025-07-06T07:07:32.040Z","avatar_url":"https://github.com/percolate.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Crostini\nAn app for demonstrating functionality of the Percolate Developer Platform, written in\nTypescript using Express.\n\nDefines a manifest and [a Heroku app](https://prclt-crostini.herokuapp.com/). The\nmanifest defines both lifecycle callback and UI extension URLs, which are served by\nthe Heroku app.\n\nFor a similar app written in Python, see\n[Biscotti.](https://github.com/percolate/biscotti)\n\n\n## Running the app locally\n\nTo create an application server running on your own machine instead of Heroku, use the\nfollowing guide.\n\n### Run the server\n\n1. Install dependencies: `npm install`\n1. Run the app: `npm start`\n1. Verify it's working by navigating to [http://localhost:3000](http://localhost:3000),\n   you should see the string `hi`\n\n### Expose the app publicly with ngrok\n\n1. Install [ngrok](https://ngrok.com/)\n1. Expose the running local server publicly: `ngrok http 3000`\n1. Change the URL domains in the manifest to use the URL displayed by the `ngrok`\n   command. If you see the line `Forwarding https://490d31a3.ngrok.io -\u003e\n   http://localhost:3000`, this means that the `prclt-crostini.herokuapp.com` domains\n   should be changed to `490d31a3.ngrok.io`\n1. Upload the modified app manifest in the \"App registration\" page\n1. Install the app in the \"Manage apps\" page\n1. Verify that your local app received callback request to `/install` in the server logs\n\n### Update the app secret\n\n1. Stop the app if it is running\n1. Navigate to the app details by clicking on the app in the \"App registration\" page\n1. Click the \"Show app secret\" button to view the secret\n1. Start the app back up with the `APP_SECRET` environment variable set to the value\n   shown, an example of this command:\n    ```\n    APP_SECRET=c12de0430670c1e251e0502aa3afb385374df5337bdd20b27b0e77fc702c9b1a \\\n    npm start\n    ```\n1. Navigate to a page with a UI component served by the app and verify that the JWT\n   payload is properly decoded - you should see a JSON payload under the \"decoded\"\n   header\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpercolate%2Fcrostini","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpercolate%2Fcrostini","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpercolate%2Fcrostini/lists"}