diff --git a/app/package.json b/app/package.json index d66e4eb..fa33ee8 100644 --- a/app/package.json +++ b/app/package.json @@ -4,6 +4,7 @@ "private": true, "scripts": { "dev": "next dev", + "https": "node server.js", "build": "next build", "start": "next start", "lint": "next lint" @@ -23,5 +24,10 @@ "react": "18.2.0", "react-dom": "18.2.0", "typescript": "4.9.5" + }, + "devDependencies": { + "http-proxy": "^1.18.1", + "https": "^1.0.0", + "ws": "^8.12.1" } } diff --git a/app/server.js b/app/server.js new file mode 100644 index 0000000..38c8842 --- /dev/null +++ b/app/server.js @@ -0,0 +1,34 @@ +const https = require('https'); +const httpProxy = require('http-proxy'); +const ws = require('ws'); +const fs = require('fs'); +const port = 3001 + +console.log('running') + +const options = { + key: fs.readFileSync('localhost-key.pem'), + cert: fs.readFileSync('localhost.pem') +}; + +const proxy = httpProxy.createProxyServer({ + target: 'http://0.0.0.0:3000' +}); + +const server = https.createServer(options, (req, res) => { + proxy.web(req, res); +}); + +const wssProxy = new ws.Server({ noServer: true }); +server.on('upgrade', (req, socket, head) => { + console.log(req.url) + if (req.url.startsWith('/_next/webpack-hmr')) { + wssProxy.handleUpgrade(req, socket, head, (ws) => { + proxy.ws(req, ws, head); + }); + } else { + socket.destroy(); + } +}); + +server.listen(port) \ No newline at end of file diff --git a/app/yarn.lock b/app/yarn.lock index 49332a4..2fd6278 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -1923,6 +1923,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -2003,6 +2008,11 @@ focus-lock@^0.11.6: dependencies: tslib "^2.0.3" +follow-redirects@^1.0.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -2238,6 +2248,20 @@ hoist-non-react-statics@^3.3.1: dependencies: react-is "^16.7.0" +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4" + integrity sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg== + ignore@^5.2.0: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -2926,6 +2950,11 @@ regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -3312,6 +3341,11 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +ws@^8.12.1: + version "8.12.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" + integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" diff --git a/ecosystem.config.js b/ecosystem.config.js index 595e872..352874a 100644 --- a/ecosystem.config.js +++ b/ecosystem.config.js @@ -5,6 +5,11 @@ module.exports = { name: "thingtime-app", namespace: "thingtime" }, + { + script: 'npm run app-https', + name: "thingtime-app-https", + namespace: "thingtime" + }, { script: 'npm run api', name: 'thingtime-api', diff --git a/package.json b/package.json index 0e31349..ade09b4 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,9 @@ "main": "none", "scripts": { "app": "npm run dev --prefix app", + "app-https": "npm run https --prefix app", "api": "npm run dev --prefix api", + "api-https": "npm run https --prefix api", "postinstall": "npm ci --prefix=app ; npm ci --prefix=api" }, "repository": {