* profile browser vnc support + fixes: - switch profile browser rendering to use VNC - frontend: add @novnc/novnc as dependency, create separate bundle novnc.js to load into vnc browser (to avoid loading from each container) - frontend: update proxy paths to proxy websocket, index page to crawler - frontend: allow browser profiles in all browsers, remove browser compatibility check - frontend: update webpack dev config, apply prettier - frontend: node version fix - backend: get vncpassword, build new URL for proxying to crawler iframe - backend: fix profile / crawl job pull policy from 'Always' -> 'Never', should use existing image for job - backend: fix kill signal to use bash -c to work with latest backend image - backend/chart: add 'profile_browser_timeout_seconds' to chart values to control how long profile browser to remain when idle (default to 60) - backend: remove utils.py, now using secret.token_hex() for random suffix Co-authored-by: sua yoo <sua@suayoo.com>
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const path = require("path");
 | |
| const { merge } = require("webpack-merge");
 | |
| 
 | |
| const [main, vnc] = require("./webpack.config.js");
 | |
| 
 | |
| // for testing: for prod, the Dockerfile should have the official prod version used
 | |
| const RWP_BASE_URL = process.env.RWP_BASE_URL || "https://replayweb.page/";
 | |
| 
 | |
| if (!process.env.API_BASE_URL) {
 | |
|   throw new Error(
 | |
|     "To run a dev frontend server, please set the API_BASE_URL pointing to your backend api server in '.env.local'"
 | |
|   );
 | |
| }
 | |
| 
 | |
| const devBackendUrl = new URL(process.env.API_BASE_URL);
 | |
| const shoelaceAssetsSrcPath = path.resolve(
 | |
|   __dirname,
 | |
|   "node_modules/@shoelace-style/shoelace/dist/assets"
 | |
| );
 | |
| const shoelaceAssetsPublicPath = "shoelace/assets";
 | |
| 
 | |
| module.exports = [
 | |
|   merge(main, {
 | |
|     devServer: {
 | |
|       watchFiles: ["src/*.js"],
 | |
|       open: true,
 | |
|       compress: true,
 | |
|       hot: true,
 | |
|       static: [
 | |
|         {
 | |
|           directory: shoelaceAssetsSrcPath,
 | |
|           publicPath: "/" + shoelaceAssetsPublicPath,
 | |
|         },
 | |
|         {
 | |
|           directory: path.join(__dirname),
 | |
|           //publicPath: "/",
 | |
|           watch: true,
 | |
|         },
 | |
|       ],
 | |
|       historyApiFallback: true,
 | |
|       proxy: {
 | |
|         "/api": {
 | |
|           target: devBackendUrl.href,
 | |
|           headers: {
 | |
|             Host: devBackendUrl.host,
 | |
|           },
 | |
|           ws: true,
 | |
|         },
 | |
| 
 | |
|         "/data": {
 | |
|           target: devBackendUrl.href,
 | |
|           headers: {
 | |
|             Host: devBackendUrl.host,
 | |
|           },
 | |
|         },
 | |
|       },
 | |
|       // Serve replay service worker file
 | |
|       onBeforeSetupMiddleware: (server) => {
 | |
|         server.app.get("/replay/sw.js", (req, res) => {
 | |
|           res.set("Content-Type", "application/javascript");
 | |
|           res.send(`importScripts("${RWP_BASE_URL}sw.js")`);
 | |
|         });
 | |
|       },
 | |
|       port: 9870,
 | |
|     },
 | |
|   }),
 | |
|   {
 | |
|     ...vnc,
 | |
|     mode: "production",
 | |
|   },
 | |
| ];
 |