{"id":16109088,"url":"https://github.com/tripolskypetr/pwalauncher","last_synced_at":"2026-02-13T13:03:10.685Z","repository":{"id":233856667,"uuid":"787928364","full_name":"tripolskypetr/pwalauncher","owner":"tripolskypetr","description":"The PWA launcher for react-declarative","archived":false,"fork":false,"pushed_at":"2024-07-07T15:04:39.000Z","size":969,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-09T15:59:35.272Z","etag":null,"topics":["cors","cors-proxy","honeypot","http","https","mixed-content","osint","path-proxy","port-forwarding","proxy","pwa","react-declarative","reverse-proxy","same-origin","websocket"],"latest_commit_sha":null,"homepage":"https://github.com/react-declarative/react-declarative","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/tripolskypetr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-04-17T12:59:43.000Z","updated_at":"2024-07-07T15:04:42.000Z","dependencies_parsed_at":"2024-05-01T16:05:30.512Z","dependency_job_id":"4c03791b-efb3-4eee-8122-2fddc4f0caad","html_url":"https://github.com/tripolskypetr/pwalauncher","commit_stats":null,"previous_names":["tripolskypetr/pwalauncher"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tripolskypetr/pwalauncher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tripolskypetr%2Fpwalauncher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tripolskypetr%2Fpwalauncher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tripolskypetr%2Fpwalauncher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tripolskypetr%2Fpwalauncher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tripolskypetr","download_url":"https://codeload.github.com/tripolskypetr/pwalauncher/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tripolskypetr%2Fpwalauncher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29407052,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T06:24:03.484Z","status":"ssl_error","status_checked_at":"2026-02-13T06:23:12.830Z","response_time":78,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cors","cors-proxy","honeypot","http","https","mixed-content","osint","path-proxy","port-forwarding","proxy","pwa","react-declarative","reverse-proxy","same-origin","websocket"],"created_at":"2024-10-09T19:29:38.354Z","updated_at":"2026-02-13T13:03:10.665Z","avatar_url":"https://github.com/tripolskypetr.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pwalauncher\n\n\u003e The microservice bootstrap for PWA with [serverless functions](https://appwrite.io/docs/products/functions)\n\n## Usage\n\n```bash\nnpm install -g pwalauncher\npwalauncher # Will share `wwwroot` subfolder with static assets and redirect to `index.html` if 404\n```\n\n## Benefits\n\n1. **Free SSL Certificate obuse**\n\nCreate a [ZeroSSL](https://zerossl.com/) 90-days sertificate for single domain and multiply it to several websites shared on different ports\n\n2. **Port forward over SSL**\n\nForwarding `https://example.com/8081` to `http://localhost:8081`. Both websoket and http forwarding are supported\n\n3. **JWT Validation for each forwarded port**\n\nWhile forwarding to `http://localhost:8081` the `pwalauncher` can intercept `Authorization: Bearer \u003ctoken\u003e` header and validate the token. The UI can sign a token every 10 seconds to avoid DDOS\n\n4. **CRA-like API proxy**\n\nRequest to `https://example.com/v1` can be forwarded to `https://cloud.appwrite.io/v1`\n\n4. **Cors-everywhere like file download proxy**\n\nFetch from `https://example.com/cors/http://filedownload.com/demo.mp3` will download `http://filedownload.com/demo.mp3` ignoring mixed content and cord origin policy\n\n5. **Mutal SSL auth on a server side**\n\nA self-signed SSL certificate installed localy can be used to restrict access to application authorisation with second layer of authentification\n\n## Ecosystem\n\nThis tool is extreamly powerfull with [PM2](https://pm2.keymetrics.io/). The `pm2` should be used for *instantiation* while `pwalauncher` used as *easy-config reverse-proxy*\n\n```bash\npm2 start ecosystem.config.js\npm2 list\npm2 save\npm2 monit\npm2 stop service\npm2 kill\n```\n\nThe [tmux](https://github.com/tmux/tmux) also can be used to start microservices in `debug` mode with direct stdin/stdout pipe\n\n```bash\ntmux kill-session\ntmux\ntmux attach\nCtrl + B + D\nCtrl + B + C\nCtrl + B + P\nCtrl + B + N\n```\n\nThe `pwalaunch` used single argument if you want to use different name of config.\n\n```bash\npwalaunch launcher.config.json\n```\n\n## Configutation\n\n```javascript\nconst fs = require('fs');\n\nmodule.exports = {\n    ports: [\n        8081,\n        8082,\n        8083,\n        8084,\n        8085,\n        8086,\n        8087,\n        8088,\n        8089,\n        8090,\n    ],\n    proxy: [\n        {\n            path: 'v1',\n            link: 'http://127.0.0.1:8080/v1'\n        }\n    ],\n    ssl: {\n        key: fs.readFileSync('./ssl/private.key', 'utf8'),\n        cert: fs.readFileSync('./ssl/certificate.crt', 'utf8'),\n    },\n    sslPort: 444,\n    sslVerify: true,\n    jwtSecret: \"TEST\",\n    cookieSecret: true, // { key: \"test\", value: \"1\", }\n    cookieSecretAllowed: ['/', '/index.html', '/favicon.ico'],\n    ipBlacklist: [\"95.173.136.72\"],\n    port: 80,\n    redirectHttps: false,\n    wwwroot: \"build\"\n};\n```\n\n## Self-signed SSL Setup\n\nIf you getting trouble while trying to setup self-signed ssl, check the [3rdparty folder](./3rdparty/). The `SSLCertificateMaker.exe` will help you create root certificate (CA) for client devices and self-signed children (CERT) for the server. The `CertTrustManager.exe` will help you create a one-button setup file for root certificate (CA), to create that file right click on CertTrustManager window. \n\n![screenshot](./docs/screenshot.png)\n\nP.S. If you choose wrong certificate in modal run `chrome://restart` to choose It again or use Edge\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftripolskypetr%2Fpwalauncher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftripolskypetr%2Fpwalauncher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftripolskypetr%2Fpwalauncher/lists"}