From 69ddb4e9ce7ca658bee9e6ba068b70950c3e7f53 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Mar 2026 18:41:59 +0000 Subject: [PATCH 1/4] Initial plan From af0eca43be1a7c039400b53f547c8e797c69c211 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Mar 2026 18:46:46 +0000 Subject: [PATCH 2/4] feat: add one-command Linux run script with self-contained Redis and allow-all-origins Co-authored-by: itsfuad <49100463+itsfuad@users.noreply.github.com> --- docker-compose.yml | 25 +++++++++++++++++++++++++ run.sh | 16 ++++++++++++++++ server/libs/websockets.ts | 8 +++++--- 3 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 docker-compose.yml create mode 100755 run.sh diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1932dd5 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,25 @@ +services: + redis: + image: redis:alpine + restart: unless-stopped + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 5s + timeout: 3s + retries: 5 + + server: + build: . + ports: + - "5000:5000" + environment: + host: redis + port: 6379 + password: "" + devMode: "true" + adminPasskey: "" + clienturl: "" + depends_on: + redis: + condition: service_healthy + restart: unless-stopped diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..c17af54 --- /dev/null +++ b/run.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "Starting Poketab API with self-contained Redis..." + +# Prefer 'docker compose' (v2 plugin) but fall back to 'docker-compose' (v1 standalone) +if docker compose version &>/dev/null; then + COMPOSE_CMD="docker compose" +elif command -v docker-compose &>/dev/null; then + COMPOSE_CMD="docker-compose" +else + echo "Error: neither 'docker compose' nor 'docker-compose' is available." >&2 + exit 1 +fi + +$COMPOSE_CMD up --build diff --git a/server/libs/websockets.ts b/server/libs/websockets.ts index e5d2039..62dfcc0 100644 --- a/server/libs/websockets.ts +++ b/server/libs/websockets.ts @@ -8,7 +8,9 @@ import { redis, Key, User, _R_getAllUsersData, _R_exitUserFromSocket, _R_deleteC import { validatename, validateKey } from './utils.ts'; //get client url from .env file which will be set to CORS -const { clienturl, host, port, password } = Deno.env.toObject(); +const { clienturl, host, port, password, devMode } = Deno.env.toObject(); + +const allowAllOrigins = devMode === 'true'; const [pubClient, subClient] = await Promise.all([ createRedisClient({ @@ -28,9 +30,9 @@ pubClient.hset('server', 'status', 'online'); //initialize socket.io server export const io = new Server({ cors: { - origin: [clienturl], + origin: allowAllOrigins ? '*' : [clienturl], methods: ["GET", "POST"], - credentials: true + credentials: !allowAllOrigins, }, adapter: createRedisAdapter(pubClient, subClient), }); From c445b77daa591c490a69dcef1c439dd9b6fd7ca5 Mon Sep 17 00:00:00 2001 From: Fuad Hasan Date: Wed, 18 Mar 2026 02:56:17 +0600 Subject: [PATCH 3/4] Update docker-compose.yml --- docker-compose.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 1932dd5..e416b5a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,10 @@ services: redis: image: redis:alpine + command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}"] restart: unless-stopped healthcheck: - test: ["CMD", "redis-cli", "ping"] + test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] interval: 5s timeout: 3s retries: 5 @@ -15,7 +16,7 @@ services: environment: host: redis port: 6379 - password: "" + password: "${REDIS_PASSWORD}" devMode: "true" adminPasskey: "" clienturl: "" From 1045d13e6c64c732554b59b45071a98fffa30105 Mon Sep 17 00:00:00 2001 From: Fuad Hasan Date: Wed, 18 Mar 2026 02:56:41 +0600 Subject: [PATCH 4/4] Update run.sh --- run.sh | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/run.sh b/run.sh index c17af54..b83fefc 100755 --- a/run.sh +++ b/run.sh @@ -3,7 +3,6 @@ set -euo pipefail echo "Starting Poketab API with self-contained Redis..." -# Prefer 'docker compose' (v2 plugin) but fall back to 'docker-compose' (v1 standalone) if docker compose version &>/dev/null; then COMPOSE_CMD="docker compose" elif command -v docker-compose &>/dev/null; then @@ -13,4 +12,16 @@ else exit 1 fi +if [ -z "${REDIS_PASSWORD:-}" ]; then + read -rsp "Enter Redis password: " REDIS_PASSWORD + echo +fi + +if [ -z "$REDIS_PASSWORD" ]; then + echo "Error: REDIS_PASSWORD cannot be empty." >&2 + exit 1 +fi + +export REDIS_PASSWORD + $COMPOSE_CMD up --build