From 710eabfd3e1909b4a68032253255d5b000b376f3 Mon Sep 17 00:00:00 2001 From: Rohit Rajan Date: Thu, 4 Dec 2025 11:25:21 +0530 Subject: [PATCH 1/8] fix: rm build platform condition --- Dockerfile.backend | 2 +- Dockerfile.frontend | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile.backend b/Dockerfile.backend index d0143a3d..197b7bfd 100644 --- a/Dockerfile.backend +++ b/Dockerfile.backend @@ -1,4 +1,4 @@ -FROM --platform=$BUILDPLATFORM node:20-slim +FROM node:20-slim # Set working directory WORKDIR /app diff --git a/Dockerfile.frontend b/Dockerfile.frontend index 9cb25d6f..b75bb1ab 100644 --- a/Dockerfile.frontend +++ b/Dockerfile.frontend @@ -1,4 +1,4 @@ -FROM --platform=$BUILDPLATFORM node:18-alpine AS builder +FROM node:18-alpine AS builder WORKDIR /app From 970bc017dd3ff604f77023524e187f34e2c04972 Mon Sep 17 00:00:00 2001 From: Rohit Rajan Date: Thu, 4 Dec 2025 11:33:20 +0530 Subject: [PATCH 2/8] fix: rm env copying --- Dockerfile.backend | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile.backend b/Dockerfile.backend index 197b7bfd..3fffd154 100644 --- a/Dockerfile.backend +++ b/Dockerfile.backend @@ -4,7 +4,6 @@ FROM node:20-slim WORKDIR /app COPY .sequelizerc .sequelizerc -COPY .env .env # Install node dependencies COPY package*.json ./ From cb88cd872136fcf0876bcb97fc9edc7f7a8e6241 Mon Sep 17 00:00:00 2001 From: Rohit Rajan Date: Thu, 4 Dec 2025 14:05:45 +0530 Subject: [PATCH 3/8] fix: robot edit type errors --- src/components/robot/pages/RobotEditPage.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/robot/pages/RobotEditPage.tsx b/src/components/robot/pages/RobotEditPage.tsx index 178c5ad3..70fd9f36 100644 --- a/src/components/robot/pages/RobotEditPage.tsx +++ b/src/components/robot/pages/RobotEditPage.tsx @@ -383,15 +383,18 @@ export const RobotEditPage = ({ handleStart }: RobotSettingsProps) => { if (!prev) return prev; const updatedWorkflow = [...prev.recording.workflow]; + const pair = updatedWorkflow[pairIndex]; + const action = pair?.what?.[actionIndex]; if ( updatedWorkflow.length > pairIndex && - updatedWorkflow[pairIndex]?.what && - updatedWorkflow[pairIndex].what.length > actionIndex && - updatedWorkflow[pairIndex].what[actionIndex].args && - updatedWorkflow[pairIndex].what[actionIndex].args.length > argIndex + pair?.what && + pair.what.length > actionIndex && + action?.args && + action.args.length > argIndex ) { - updatedWorkflow[pairIndex].what[actionIndex].args[argIndex].limit = - newLimit; + if (action.args[argIndex]) { + action.args[argIndex].limit = newLimit; + } setScrapeListLimits((prev) => { return prev.map((item) => { From 6ef725ddcd7417cd15a923d4ee1bfac2aae5715c Mon Sep 17 00:00:00 2001 From: Rohit Rajan Date: Thu, 4 Dec 2025 14:07:07 +0530 Subject: [PATCH 4/8] chore: compile ts for docker env --- Dockerfile.backend | 9 ++++++--- package.json | 7 ++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Dockerfile.backend b/Dockerfile.backend index 3fffd154..fae0d146 100644 --- a/Dockerfile.backend +++ b/Dockerfile.backend @@ -8,18 +8,21 @@ COPY .sequelizerc .sequelizerc # Install node dependencies COPY package*.json ./ COPY src ./src -COPY public ./public +COPY public ./public COPY server ./server COPY tsconfig.json ./ COPY server/tsconfig.json ./server/ -# COPY server/start.sh ./ +# COPY server/start.sh ./ # Install dependencies RUN npm install --legacy-peer-deps +# Build TypeScript server +RUN npm run build:server + # Expose backend port EXPOSE ${BACKEND_PORT:-8080} -# Run migrations & start backend using start script +# Run migrations & start backend using plain node CMD ["npm", "run", "server"] # CMD ["sh", "-c", "npm run migrate && npm run server"] \ No newline at end of file diff --git a/package.json b/package.json index 41b1255c..d8a6a831 100644 --- a/package.json +++ b/package.json @@ -83,12 +83,13 @@ "winston": "^3.5.1" }, "scripts": { - "start": "concurrently -k \"npm run server\" \"npm run client\"", - "server": "cross-env NODE_OPTIONS='--max-old-space-size=8000' nodemon server/src/server.ts", + "start": "concurrently -k \"npm run server:dev\" \"npm run client\"", + "server": "cross-env NODE_OPTIONS='--max-old-space-size=8000' node server/dist/server/src/server.js", + "server:dev": "cross-env NODE_OPTIONS='--max-old-space-size=8000' nodemon --exec ts-node server/src/server.ts", "client": "vite", "build": "vite build", "build:server": "tsc -p server/tsconfig.json", - "start:server": "cross-env NODE_OPTIONS='--max-old-space-size=8000' server/dist/server/src/server.js", + "start:server": "cross-env NODE_OPTIONS='--max-old-space-size=8000' node server/dist/server/src/server.js", "preview": "vite preview", "lint": "./node_modules/.bin/eslint .", "migrate": "sequelize-cli db:migrate", From d477402287e1efc01abe1319fa84c9ec8fa4a08f Mon Sep 17 00:00:00 2001 From: Rohit Rajan Date: Thu, 4 Dec 2025 14:08:15 +0530 Subject: [PATCH 5/8] chore: build compiled migration --- server/docker-entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/docker-entrypoint.sh b/server/docker-entrypoint.sh index ad670faf..9101cb0f 100644 --- a/server/docker-entrypoint.sh +++ b/server/docker-entrypoint.sh @@ -27,7 +27,7 @@ wait_for_postgres() { wait_for_postgres # Run the application with migrations before startup -NODE_OPTIONS="--max-old-space-size=4096" node -e "require('./server/src/db/migrate')().then(() => { console.log('Migration process completed.'); })" +NODE_OPTIONS="--max-old-space-size=4096" node -e "require('./server/dist/server/src/db/migrate')().then(() => { console.log('Migration process completed.'); })" -# Run the server normally +# Run the server normally exec "$@" \ No newline at end of file From 88a01fdfa48655e806af6f91a672c3d144f7eddc Mon Sep 17 00:00:00 2001 From: Rohit Rajan Date: Thu, 4 Dec 2025 16:42:04 +0530 Subject: [PATCH 6/8] chore: align docker and local launch --- package.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index d8a6a831..d658d553 100644 --- a/package.json +++ b/package.json @@ -83,13 +83,11 @@ "winston": "^3.5.1" }, "scripts": { - "start": "concurrently -k \"npm run server:dev\" \"npm run client\"", - "server": "cross-env NODE_OPTIONS='--max-old-space-size=8000' node server/dist/server/src/server.js", - "server:dev": "cross-env NODE_OPTIONS='--max-old-space-size=8000' nodemon --exec ts-node server/src/server.ts", + "start": "concurrently -k \"npm run server\" \"npm run client\"", + "server": "cross-env NODE_OPTIONS='--max-old-space-size=512' node server/dist/server/src/server.js", "client": "vite", "build": "vite build", "build:server": "tsc -p server/tsconfig.json", - "start:server": "cross-env NODE_OPTIONS='--max-old-space-size=8000' node server/dist/server/src/server.js", "preview": "vite preview", "lint": "./node_modules/.bin/eslint .", "migrate": "sequelize-cli db:migrate", From 021cdada46eed2a71ac5f2cf71940db1f8f035e3 Mon Sep 17 00:00:00 2001 From: Rohit Rajan Date: Thu, 4 Dec 2025 16:44:41 +0530 Subject: [PATCH 7/8] chore: add built and start script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d658d553..1446418b 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "winston": "^3.5.1" }, "scripts": { - "start": "concurrently -k \"npm run server\" \"npm run client\"", + "start": "npm run build:server && concurrently -k \"npm run server\" \"npm run client\"", "server": "cross-env NODE_OPTIONS='--max-old-space-size=512' node server/dist/server/src/server.js", "client": "vite", "build": "vite build", From 0bc6c128201044bb1a02e0ef7c3b0015b35a851d Mon Sep 17 00:00:00 2001 From: Rohit Rajan Date: Thu, 4 Dec 2025 17:16:47 +0530 Subject: [PATCH 8/8] fix: partial data recovery --- server/src/server.ts | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/server/src/server.ts b/server/src/server.ts index 61f57756..316bf3de 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -280,27 +280,39 @@ if (require.main === module) { const run = await Run.findOne({ where: { browserId, status: 'running' } }); if (run) { const limitedData = { - scrapeSchemaOutput: browser.interpreter.serializableDataByType?.scrapeSchema - ? { "schema-tabular": browser.interpreter.serializableDataByType.scrapeSchema } - : {}, + scrapeSchemaOutput: browser.interpreter.serializableDataByType?.scrapeSchema || {}, scrapeListOutput: browser.interpreter.serializableDataByType?.scrapeList || {}, binaryOutput: browser.interpreter.binaryData || [] }; const binaryOutputRecord = limitedData.binaryOutput.reduce((acc: Record, item: any, index: number) => { - acc[`item-${index}`] = item; + const key = item.name || `Screenshot ${index + 1}`; + acc[key] = { data: item.data, mimeType: item.mimeType }; return acc; }, {}); + let uploadedBinaryOutput = {}; + if (Object.keys(binaryOutputRecord).length > 0) { + try { + const { BinaryOutputService } = require('./storage/mino'); + const binaryOutputService = new BinaryOutputService('maxun-run-screenshots'); + uploadedBinaryOutput = await binaryOutputService.uploadAndStoreBinaryOutput(run, binaryOutputRecord); + logger.log('info', `Successfully uploaded ${Object.keys(uploadedBinaryOutput).length} screenshots to MinIO for interrupted run`); + } catch (minioError: any) { + logger.log('error', `Failed to upload binary data to MinIO during shutdown: ${minioError.message}`); + uploadedBinaryOutput = binaryOutputRecord; + } + } + await run.update({ status: 'failed', finishedAt: new Date().toLocaleString(), log: 'Process interrupted during execution - partial data preserved', serializableOutput: { - scrapeSchema: Object.values(limitedData.scrapeSchemaOutput), - scrapeList: Object.values(limitedData.scrapeListOutput), + scrapeSchema: limitedData.scrapeSchemaOutput, + scrapeList: limitedData.scrapeListOutput, }, - binaryOutput: binaryOutputRecord + binaryOutput: uploadedBinaryOutput }); } }