--- title: Scripts tags: [development] --- # Scripts A catalogue of every operational script across both repos. For each: **purpose**, **when to run**, and an **example invocation**. Scripts that touch the database have warnings. > [!warning] Many of these scripts mutate live data (drop collections, push Docker tags, force version bumps). Read the script before running it on anything that matters. --- ## Backend — `backend/scripts/` (shell) These shell scripts orchestrate the dev/build/release pipeline. They live next to the repo root and assume the repo is the current working directory. ### `auto-version.sh` **Purpose.** Bump the `version` in `package.json` and create a matching git tag. Has an `auto` mode that asks `ai-enhanced.sh` to suggest the bump from the last commit message. **When to run.** Before pushing a release. The `release:*` npm scripts call this for you. **Example.** ```bash ./scripts/auto-version.sh patch # 2.6.3 → 2.6.4 ./scripts/auto-version.sh minor # 2.6.3 → 2.7.0 ./scripts/auto-version.sh major # 2.6.3 → 3.0.0 ./scripts/auto-version.sh auto # let the AI decide ./scripts/auto-version.sh help # or via npm wrappers: npm run version:patch npm run release:minor npm run smart-release # auto + push + push --tags ``` The script creates a commit `chore: bump version to ` and tag `v`. > [!warning] Make sure your working tree is clean and on the branch you want tagged. The script will not stash changes. --- ### `ai-enhanced.sh` **Purpose.** Analyse a commit message (last commit by default) against rules in `ai-rules.conf` and recommend `major`/`minor`/`patch`/`skip` plus a confidence level. Used by `auto-version.sh auto`. **When to run.** Standalone diagnostic before a release; otherwise invoked indirectly. **Example.** ```bash ./scripts/ai-enhanced.sh # analyse last commit ./scripts/ai-enhanced.sh "feat: add seller payouts" # analyse a string npm run ai:detect ``` Exports `AI_VERSION_TYPE` and `AI_CONFIDENCE` for downstream scripts. --- ### `build-and-push.sh` **Purpose.** Build the production Docker image (`Dockerfile.prod`) tagged with `dev-` plus `latest`, then push to the Gitea registry. **When to run.** For a manual dev release outside of CI. CI does the same thing automatically — see [[CI-CD Pipeline]]. **Example.** ```bash ./scripts/build-and-push.sh ``` You must `docker login git.manko.yoga -u manawenuz` first. Pushes both tags and asks whether to clean up the local images afterwards. --- ### `build-and-push-dev.sh` **Purpose.** Variant of `build-and-push.sh` that tags only with the `dev-*` tag (no `latest`). Used when you want Watchtower to leave production untouched. **When to run.** Manual dev-only push. **Example.** ```bash ./scripts/build-and-push-dev.sh ``` --- ### `build-image.sh` **Purpose.** Local-only build (no push). Tags `/:` and `:latest`. Useful for testing the production Dockerfile locally without sending it anywhere. **When to run.** Verifying a `Dockerfile.prod` change before pushing. **Example.** ```bash ./scripts/build-image.sh ``` --- ### `reset-server.sh` **Purpose.** Stop the dev compose stack, restart it fresh, wait for services, then probe MongoDB, Redis, `/health`, and the login endpoint. Prints the seeded test credentials at the end. **When to run.** When your local containers are in a weird state, or after pulling new images. **Example.** ```bash ./scripts/reset-server.sh ``` > [!warning] By default this preserves volumes. To wipe the database, edit the script to uncomment `docker-compose ... down -v` or run that command manually first. --- ### `start-ngrok.sh` **Purpose.** Start `ngrok http` against a local port (default `8083`) and print the public URL by polling the inspector at `127.0.0.1:4040`. Lets you receive Request Network webhooks on your laptop. **When to run.** Local Request Network webhook development. **Example.** ```bash ./scripts/start-ngrok.sh 5001 # tunnel to backend ./scripts/start-ngrok.sh # tunnel to default 8083 REGION=eu ./scripts/start-ngrok.sh ``` Logs go to `~/.ngrok-.log` and the pid to `~/.ngrok-.pid`. Requires `brew install ngrok` and `ngrok config add-authtoken `. --- ### `fix-dispute-sellers.js` **Purpose.** One-off Node script that walks the `disputes` collection and back-fills missing `sellerId` fields by joining through `purchaseRequests` + `sellerOffers`. Born from a real-world data-quality bug. **When to run.** Only if disputes appear in admin UI without a seller. Otherwise: never. **Example.** ```bash MONGODB_URI=mongodb://localhost:27017/marketplace node ./scripts/fix-dispute-sellers.js ``` > [!warning] Mutates dispute documents. Take a backup first ([[Backup & Recovery]]). --- ## Backend — `backend/src/scripts/` (TypeScript + helpers) These are runnable with `ts-node`. The `npm run seed:*` entries wrap the most common ones. ### Seed scripts | Script | npm wrapper | Purpose | |--------|-------------|---------| | `seedUsers.ts` | `npm run seed:users` | Create the four canonical test users (admin, buyer, seller, seller2). Idempotent: skips users that already exist. | | `seedAddresses.ts` | `npm run seed:addresses` | Wipe and re-create sample addresses for the test users (max 3 per user, primary flag set). **Requires users to exist.** | | `seedUsersAndAddresses.ts` | `npm run seed:all` | Combined: drops and recreates users + addresses in the right order. The canonical "fresh database" command. | | `seedCategories.ts` | `npm run seed:categories` | Insert the marketplace category tree. Idempotent. | | `seeds/seedRequestTemplates.ts` | manual | Seed example request templates buyers can use as starting points. | | `seeds/seedBlogPosts.ts` | manual | Seed sample blog content. | | `seeds/seedLevels.ts` | manual | Insert level config for the points/reputation system. | | `seeds/migrateUserPoints.ts` | manual | One-shot migration of legacy point balances. | **Example.** ```bash npm run seed:all npm run seed:categories ts-node src/seeds/seedRequestTemplates.ts ``` > [!warning] `seed:addresses` and `seed:all` drop existing data. Don't run against production unless that is what you want. ### Other TS helpers | Script | Purpose | |--------|---------| | `clearCategories.ts` | Wipe the `categories` collection (paired with `seedCategories.ts`). | | `clearChats.ts` | Wipe the `chats` collection. Useful in QA. | | `createSupportUser.ts` | Create the marketplace support user (used in chat). | | `createTestMessage.ts` | Insert a single test chat message between buyer and seller. | | `createTestRequest.ts` | Create a sample purchase request from the seeded buyer. | | `updateCategories.ts` | Apply schema updates to existing categories without re-seeding. | | `updateRequestStatus.ts` | Force-set the `status` field of a purchase request — useful when QA-ing a flow. | | `makeUserAdmin.ts` | Promote a user to admin. Pass email as an arg. | | `createDemoShops.ts` | Generate demo seller shops for screenshots / staging. | **Example.** ```bash ts-node src/scripts/makeUserAdmin.ts user@example.com ts-node src/scripts/createTestRequest.ts ts-node src/scripts/updateRequestStatus.ts completed ``` ### Bash helpers under `src/scripts/` These call the API with `curl` to drive larger demo-data flows: - `createDemoTemplates.sh`, `createDemoWithPicsum.sh`, `createFullDemo.sh`, `createProductionTemplates.sh` — populate templates with placeholder data - `deleteSellerTemplates.sh` — wipe templates owned by a given seller - `updateShopImages.sh` — bulk-update shop images Each script takes a base URL + admin token. Inspect them before running. --- ## Backend — root-level helpers ### `manual-test.ts` **Purpose.** Historical sanity check for the old SHKeeper service. **When to run.** Legacy-record troubleshooting only; new payment work should use the Request Network tests. **Example.** ```bash ts-node manual-test.ts ``` ### `manual-payout-test.ts` **Purpose.** POST `/api/payments/payout` to the local backend with hard-coded payout data, then poll status after 5 s. **When to run.** End-to-end payout flow check against a running local server. **Example.** ```bash # Backend must be running first: npm run dev & ts-node manual-payout-test.ts ``` > [!warning] Will create a real payout record in the DB. Treat this as a legacy/manual helper; routine releases should go through ledger-gated release/refund orchestration. ### `fix-transaction-hashes.js` **Purpose.** Historical one-off backfill — walks completed legacy Payments missing `transactionHash`, queries SHKeeper for the original invoice, extracts the confirmed transaction hash, and updates the payment document. **When to run.** Only for old SHKeeper records. New Request Network payments should be reconciled through Request Network webhook/reconciliation tooling. **Example.** ```bash MONGODB_URI=mongodb://localhost:27017/marketplace \ SHKEEPER_BASE_URL=https://shkeeper.example.com \ SHKEEPER_API_KEY=... \ node fix-transaction-hashes.js ``` > [!warning] Hits the live legacy SHKeeper API and writes to MongoDB. Take a backup ([[Backup & Recovery]]). ### `check-templates.js`, `get-admin-token.js` Diagnostic helpers. `check-templates.js` lists templates in the DB; `get-admin-token.js` logs in as the seeded admin and prints the JWT. --- ## Frontend — `frontend/scripts/` ### Deployment | Script | Purpose | When | |--------|---------|------| | `deploy.sh` | Build production image, tag with package version + `latest`, push to Gitea registry. Triggered by Gitea Actions (`deploy.yml`) on push to `main`. | Production release. | | `deployDev.sh` | Same as `deploy.sh` but pushes only the `dev` tag. Triggered by `devDeploy.yml` on push to `development`. | Dev release. | ### Versioning | Script | Purpose | |--------|---------| | `auto-version.sh` | Mirror of backend `auto-version.sh` for the frontend. | | `ai-enhanced.sh` | Mirror of backend AI version detector. Reads `ai-rules.conf`. | | `ai-version-detect.sh` | Legacy / simpler version detector kept for fallback. | | `setup-versioning.sh` | One-shot setup: installs a `post-commit` git hook that prints the recommended version bump. | | `post-commit-hook.sh` | The hook installed by `setup-versioning.sh`. | ### Debugging & maintenance | Script | Purpose | |--------|---------| | `debug-env.sh` | Print every `NEXT_PUBLIC_*` env var currently exported. | | `debug-ui-api.sh` | Curl the backend health, auth, and a handful of marketplace endpoints; reports each. | | `cleanup-docker-networks.sh` | Prune dangling Docker networks left behind by failed compose runs. | | `show-credentials.sh` | Print the seeded test credentials (admin/buyer/seller). | | `find-console-logs.sh` | List every `console.log/info/warn/error` left in `src/`. | | `clean-console-logs.sh` | Auto-remove or comment out console logs. | | `migrate-all-console-logs.sh` | Convert `console.*` calls to `logger.*`. Read `migrate-to-logger.md` before running. | ### Testing helpers | Script | Purpose | |--------|---------| | `quick-test-suite.sh` | Run a curated subset of Jest + Playwright tests for a fast PR check. | | `integration-test.sh` | Heavier scripted integration run against a live backend. | | `test-marketplace-workflow.js` | Node script that drives a buyer → seller → checkout → payout flow via the API. | | `test-offer-rejection.js` | Reproduce the offer-rejection bug pattern; useful for regression checks. | **Examples.** ```bash yarn ./scripts/debug-env.sh ./scripts/debug-ui-api.sh http://localhost:5001 ./scripts/quick-test-suite.sh node ./scripts/test-marketplace-workflow.js ``` --- ## Frontend — root-level helpers ### `cleanup-localstorage.js` **Purpose.** Browser console snippet — paste into DevTools to clear stale `manual-payment-*`, `buyer-step-*`, `LAST_PAYMENT_*`, `LAST_TEMPLATE_*`, and `LAST_SOCKET_*` keys from `localStorage`. **When to run.** When QA reports state-related glitches that disappear in incognito. **Example.** Paste the entire file body into the browser console and press Enter. --- ## Summary cheat-sheet ```bash # === Backend === npm run dev # local node, no docker npm run docker:dev # full stack in docker npm run docker:dev:down # tear it down npm run docker:dev:logs # follow logs npm run seed:all # reset users + addresses (DESTRUCTIVE) npm run seed:categories # idempotent npm run test # jest npm run test:coverage # + coverage ./scripts/reset-server.sh # nuke and rebuild dev compose npm run release:patch # bump + commit + tag + push npm run smart-release # AI-decided bump + push ./scripts/build-and-push.sh # manual docker push (dev tag) # === Frontend === yarn dev # next dev on 8083 yarn build && yarn start # production-mode locally yarn test # jest yarn test:e2e # playwright ./scripts/deploy.sh # manual prod deploy push ./scripts/debug-ui-api.sh # curl smoke tests ```