[WebServer]
[WebServer] > my-v0-project@0.1.0 build:e2e /mnt/rpi/repos/ballbox
[WebServer] > pnpm build
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 build /mnt/rpi/repos/ballbox
[WebServer] > node scripts/next-build-safe.mjs
[WebServer]
[WebServer] [build] linux/arm64 detected: using webpack + SWC wasm fallback to avoid native next-swc crash
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Skipping creating a lockfile at /mnt/rpi/repos/ballbox/.next/lock because we're using WASM bindings
[WebServer] ▲ Next.js 16.2.1 (webpack)
[WebServer] - Environments: .env.local, .env.production
[WebServer]
[WebServer]   Creating an optimized production build ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ✓ Compiled successfully in 10.0s
[WebServer]   Skipping validation of types
[WebServer]   Finished TypeScript config validation in 11ms ...
[WebServer]   Collecting page data using 3 workers ...
[WebServer]   Generating static pages using 3 workers (0/52) ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Generating static pages using 3 workers (13/52)
[WebServer]   Generating static pages using 3 workers (26/52)
[WebServer]   Generating static pages using 3 workers (39/52)
[WebServer] ✓ Generating static pages using 3 workers (52/52) in 1606ms
[WebServer]   Finalizing page optimization ...
[WebServer]   Collecting build traces ...
[WebServer]
[WebServer] Route (app)
[WebServer] ┌ ○ /
[WebServer] ├ ○ /_not-found
[WebServer] ├ ƒ /admin
[WebServer] ├ ƒ /admin/login
[WebServer] ├ ƒ /admin/network
[WebServer] ├ ƒ /admin/payments
[WebServer] ├ ƒ /admin/players
[WebServer] ├ ƒ /admin/screens
[WebServer] ├ ƒ /admin/sports
[WebServer] ├ ƒ /admin/tvs
[WebServer] ├ ƒ /api/account/session
[WebServer] ├ ƒ /api/admin/logout
[WebServer] ├ ƒ /api/admin/payments/operations
[WebServer] ├ ƒ /api/admin/payments/sessions
[WebServer] ├ ƒ /api/admin/payments/sessions/[sessionId]
[WebServer] ├ ƒ /api/admin/players
[WebServer] ├ ƒ /api/admin/players/[playerId]
[WebServer] ├ ƒ /api/admin/players/[playerId]/memberships
[WebServer] ├ ƒ /api/admin/players/memberships/[membershipId]
[WebServer] ├ ƒ /api/admin/session
[WebServer] ├ ƒ /api/admin/sports/classes
[WebServer] ├ ƒ /api/admin/sports/classes/[classId]
[WebServer] ├ ƒ /api/admin/sports/coaches
[WebServer] ├ ƒ /api/admin/sports/coaches/[coachId]
[WebServer] ├ ƒ /api/admin/sports/open-matches
[WebServer] ├ ƒ /api/admin/sports/open-matches/[matchId]
[WebServer] ├ ƒ /api/admin/sports/operations
[WebServer] ├ ƒ /api/admin/summary
[WebServer] ├ ƒ /api/admin/tvs/assignments/[assignmentId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/assignments
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/creatives
[WebServer] ├ ƒ /api/admin/tvs/creatives/[creativeId]
[WebServer] ├ ƒ /api/admin/tvs/operations
[WebServer] ├ ƒ /api/admin/tvs/screens
[WebServer] ├ ƒ /api/admin/tvs/screens/[screenId]
[WebServer] ├ ƒ /api/admin/tvs/tv-devices
[WebServer] ├ ƒ /api/admin/tvs/tv-devices/[tvDeviceId]
[WebServer] ├ ƒ /api/atc-public/availability/sportclubs/[sportclubId]
[WebServer] ├ ƒ /api/classes/logout
[WebServer] ├ ƒ /api/classes/offers
[WebServer] ├ ƒ /api/classes/offers/[offerId]
[WebServer] ├ ƒ /api/classes/requests
[WebServer] ├ ƒ /api/classes/session
[WebServer] ├ ƒ /api/clubs/accounts
[WebServer] ├ ƒ /api/clubs/coaches
[WebServer] ├ ƒ /api/clubs/coaches/[coachId]
[WebServer] ├ ƒ /api/clubs/invites
[WebServer] ├ ƒ /api/clubs/logout
[WebServer] ├ ƒ /api/clubs/manual-classes
[WebServer] ├ ƒ /api/clubs/me
[WebServer] ├ ƒ /api/clubs/session
[WebServer] ├ ƒ /api/clubs/venues
[WebServer] ├ ƒ /api/clubs/venues/[venueId]
[WebServer] ├ ƒ /api/coaches/accounts
[WebServer] ├ ƒ /api/coaches/availability
[WebServer] ├ ƒ /api/coaches/clubs
[WebServer] ├ ƒ /api/coaches/invites/[token]
[WebServer] ├ ƒ /api/coaches/logout
[WebServer] ├ ƒ /api/coaches/me
[WebServer] ├ ƒ /api/coaches/session
[WebServer] ├ ƒ /api/coaches/students
[WebServer] ├ ƒ /api/coaches/students/[bookingId]
[WebServer] ├ ƒ /api/coaches/students/players/[playerId]
[WebServer] ├ ƒ /api/integrations/payments/approved
[WebServer] ├ ƒ /api/integrations/payments/health
[WebServer] ├ ƒ /api/integrations/payments/orders
[WebServer] ├ ƒ /api/integrations/payments/sessions
[WebServer] ├ ƒ /api/network
[WebServer] ├ ƒ /api/network/[clubId]
[WebServer] ├ ƒ /api/network/[clubId]/venues
[WebServer] ├ ƒ /api/network/[clubId]/venues/[venueId]
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines/[vendingMachineId]
[WebServer] ├ ƒ /api/players
[WebServer] ├ ƒ /api/sports
[WebServer] ├ ƒ /api/tvs/health
[WebServer] ├ ƒ /api/tvs/heartbeat
[WebServer] ├ ƒ /api/tvs/impression
[WebServer] ├ ƒ /api/tvs/manifest/[screenId]
[WebServer] ├ ƒ /api/tvs/screens
[WebServer] ├ ƒ /classes
[WebServer] ├ ƒ /classes-by-date
[WebServer] ├ ƒ /classes/[offerId]
[WebServer] ├ ƒ /classes/login
[WebServer] ├ ƒ /classes/me
[WebServer] ├ ƒ /clubs
[WebServer] ├ ƒ /clubs/coaches
[WebServer] ├ ƒ /clubs/venues/[venueId]
[WebServer] ├ ○ /coaches
[WebServer] ├ ƒ /coaches/settings
[WebServer] ├ ƒ /notification/mercadopago
[WebServer] └ ƒ /player/[screenId]
[WebServer]
[WebServer]
[WebServer] ƒ Proxy (Middleware)
[WebServer]
[WebServer] ○  (Static)   prerendered as static content
[WebServer] ƒ  (Dynamic)  server-rendered on demand
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 start:e2e /mnt/rpi/repos/ballbox
[WebServer] > next start --port 3020
[WebServer]
[WebServer] ▲ Next.js 16.2.1
[WebServer] - Local:         http://localhost:3020
[WebServer] - Network:       http://192.168.1.33:3020
[WebServer] ✓ Ready in 193ms

Running 1 test using 1 worker

--- NAV TRACKS ---
--- NAV PAYMENT ---
--- NAV INSTITUTION ---
  ✓  1 [chromium] › tests/e2e/inspect-ourvend-direct.spec.ts:3:5 › inspect ourvend panel direct navigation (41.7s)

  1 passed (1.5m)


bash

ls -lh /mnt/rpi/repos/ballbox/tracks_direct.png /mnt/rpi/repos/ballbox/payment_direct.png /mnt/rpi/repos/ballbox/institution_direct.png


-rw-r--r-- 1 sebas sebas 88K Apr 20 20:07 /mnt/rpi/repos/ballbox/institution_direct.png
-rw-r--r-- 1 sebas sebas 88K Apr 20 20:07 /mnt/rpi/repos/ballbox/payment_direct.png
-rw-r--r-- 1 sebas sebas 88K Apr 20 20:07 /mnt/rpi/repos/ballbox/tracks_direct.png


Read image file [image/png]


write

import { test, expect } from '@playwright/test';

test('inspect ourvend panel observe navigations', async ({ page }) => {
  test.setTimeout(120000);

  // 1. Login
  await page.goto('https://dnymer.ourvend.com/');
  await page.waitForSelector('input[placeholder="Username/email"]', { timeout: 10000 });
  await page.fill('input[placeholder="Username/email"]', 'cc');
  await page.fill('input[placeholder*="Password"]', 'ys123456');
  await page.click('button:has-text("Login")');

  await page.waitForSelector('text=cc一级机构', { timeout: 15000 });
  await page.click('text=cc一级机构');
  await page.waitForURL(/.*home.*/, { timeout: 15000 });

  // Expanding the menu items and observing URLs
  console.log('--- PRODUCTS NAV ---');
  await page.click('text=Products');
  await page.waitForTimeout(2000);
  await page.click('text=Track Management');
  await page.waitForTimeout(5000);
  console.log('URL after Track Management:', page.url());
  await page.screenshot({ path: 'tracks_real_nav.png' });

  console.log('--- PAYMENT NAV ---');
  await page.click('text=Payment');
  await page.waitForTimeout(2000);
  await page.click('text=Payment settings');
  await page.waitForTimeout(5000);
  console.log('URL after Payment settings:', page.url());
  await page.screenshot({ path: 'payment_real_nav.png' });
});


Successfully wrote 1308 bytes to /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-nav.spec.ts


bash

cd /mnt/rpi/repos/ballbox && npx playwright test tests/e2e/inspect-ourvend-nav.spec.ts --project=chromium


[WebServer]
[WebServer] > my-v0-project@0.1.0 build:e2e /mnt/rpi/repos/ballbox
[WebServer] > pnpm build
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 build /mnt/rpi/repos/ballbox
[WebServer] > node scripts/next-build-safe.mjs
[WebServer]
[WebServer] [build] linux/arm64 detected: using webpack + SWC wasm fallback to avoid native next-swc crash
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Skipping creating a lockfile at /mnt/rpi/repos/ballbox/.next/lock because we're using WASM bindings
[WebServer] ▲ Next.js 16.2.1 (webpack)
[WebServer] - Environments: .env.local, .env.production
[WebServer]
[WebServer]   Creating an optimized production build ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ✓ Compiled successfully in 9.1s
[WebServer]   Skipping validation of types
[WebServer]   Finished TypeScript config validation in 8ms ...
[WebServer]   Collecting page data using 3 workers ...
[WebServer]   Generating static pages using 3 workers (0/52) ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Generating static pages using 3 workers (13/52)
[WebServer]   Generating static pages using 3 workers (26/52)
[WebServer]   Generating static pages using 3 workers (39/52)
[WebServer] ✓ Generating static pages using 3 workers (52/52) in 1279ms
[WebServer]   Finalizing page optimization ...
[WebServer]   Collecting build traces ...
[WebServer]
[WebServer] Route (app)
[WebServer] ┌ ○ /
[WebServer] ├ ○ /_not-found
[WebServer] ├ ƒ /admin
[WebServer] ├ ƒ /admin/login
[WebServer] ├ ƒ /admin/network
[WebServer] ├ ƒ /admin/payments
[WebServer] ├ ƒ /admin/players
[WebServer] ├ ƒ /admin/screens
[WebServer] ├ ƒ /admin/sports
[WebServer] ├ ƒ /admin/tvs
[WebServer] ├ ƒ /api/account/session
[WebServer] ├ ƒ /api/admin/logout
[WebServer] ├ ƒ /api/admin/payments/operations
[WebServer] ├ ƒ /api/admin/payments/sessions
[WebServer] ├ ƒ /api/admin/payments/sessions/[sessionId]
[WebServer] ├ ƒ /api/admin/players
[WebServer] ├ ƒ /api/admin/players/[playerId]
[WebServer] ├ ƒ /api/admin/players/[playerId]/memberships
[WebServer] ├ ƒ /api/admin/players/memberships/[membershipId]
[WebServer] ├ ƒ /api/admin/session
[WebServer] ├ ƒ /api/admin/sports/classes
[WebServer] ├ ƒ /api/admin/sports/classes/[classId]
[WebServer] ├ ƒ /api/admin/sports/coaches
[WebServer] ├ ƒ /api/admin/sports/coaches/[coachId]
[WebServer] ├ ƒ /api/admin/sports/open-matches
[WebServer] ├ ƒ /api/admin/sports/open-matches/[matchId]
[WebServer] ├ ƒ /api/admin/sports/operations
[WebServer] ├ ƒ /api/admin/summary
[WebServer] ├ ƒ /api/admin/tvs/assignments/[assignmentId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/assignments
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/creatives
[WebServer] ├ ƒ /api/admin/tvs/creatives/[creativeId]
[WebServer] ├ ƒ /api/admin/tvs/operations
[WebServer] ├ ƒ /api/admin/tvs/screens
[WebServer] ├ ƒ /api/admin/tvs/screens/[screenId]
[WebServer] ├ ƒ /api/admin/tvs/tv-devices
[WebServer] ├ ƒ /api/admin/tvs/tv-devices/[tvDeviceId]
[WebServer] ├ ƒ /api/atc-public/availability/sportclubs/[sportclubId]
[WebServer] ├ ƒ /api/classes/logout
[WebServer] ├ ƒ /api/classes/offers
[WebServer] ├ ƒ /api/classes/offers/[offerId]
[WebServer] ├ ƒ /api/classes/requests
[WebServer] ├ ƒ /api/classes/session
[WebServer] ├ ƒ /api/clubs/accounts
[WebServer] ├ ƒ /api/clubs/coaches
[WebServer] ├ ƒ /api/clubs/coaches/[coachId]
[WebServer] ├ ƒ /api/clubs/invites
[WebServer] ├ ƒ /api/clubs/logout
[WebServer] ├ ƒ /api/clubs/manual-classes
[WebServer] ├ ƒ /api/clubs/me
[WebServer] ├ ƒ /api/clubs/session
[WebServer] ├ ƒ /api/clubs/venues
[WebServer] ├ ƒ /api/clubs/venues/[venueId]
[WebServer] ├ ƒ /api/coaches/accounts
[WebServer] ├ ƒ /api/coaches/availability
[WebServer] ├ ƒ /api/coaches/clubs
[WebServer] ├ ƒ /api/coaches/invites/[token]
[WebServer] ├ ƒ /api/coaches/logout
[WebServer] ├ ƒ /api/coaches/me
[WebServer] ├ ƒ /api/coaches/session
[WebServer] ├ ƒ /api/coaches/students
[WebServer] ├ ƒ /api/coaches/students/[bookingId]
[WebServer] ├ ƒ /api/coaches/students/players/[playerId]
[WebServer] ├ ƒ /api/integrations/payments/approved
[WebServer] ├ ƒ /api/integrations/payments/health
[WebServer] ├ ƒ /api/integrations/payments/orders
[WebServer] ├ ƒ /api/integrations/payments/sessions
[WebServer] ├ ƒ /api/network
[WebServer] ├ ƒ /api/network/[clubId]
[WebServer] ├ ƒ /api/network/[clubId]/venues
[WebServer] ├ ƒ /api/network/[clubId]/venues/[venueId]
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines/[vendingMachineId]
[WebServer] ├ ƒ /api/players
[WebServer] ├ ƒ /api/sports
[WebServer] ├ ƒ /api/tvs/health
[WebServer] ├ ƒ /api/tvs/heartbeat
[WebServer] ├ ƒ /api/tvs/impression
[WebServer] ├ ƒ /api/tvs/manifest/[screenId]
[WebServer] ├ ƒ /api/tvs/screens
[WebServer] ├ ƒ /classes
[WebServer] ├ ƒ /classes-by-date
[WebServer] ├ ƒ /classes/[offerId]
[WebServer] ├ ƒ /classes/login
[WebServer] ├ ƒ /classes/me
[WebServer] ├ ƒ /clubs
[WebServer] ├ ƒ /clubs/coaches
[WebServer] ├ ƒ /clubs/venues/[venueId]
[WebServer] ├ ○ /coaches
[WebServer] ├ ƒ /coaches/settings
[WebServer] ├ ƒ /notification/mercadopago
[WebServer] └ ƒ /player/[screenId]
[WebServer]
[WebServer]
[WebServer] ƒ Proxy (Middleware)
[WebServer]
[WebServer] ○  (Static)   prerendered as static content
[WebServer] ƒ  (Dynamic)  server-rendered on demand
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 start:e2e /mnt/rpi/repos/ballbox
[WebServer] > next start --port 3020
[WebServer]
[WebServer] ▲ Next.js 16.2.1
[WebServer] - Local:         http://localhost:3020
[WebServer] - Network:       http://192.168.1.33:3020
[WebServer] ✓ Ready in 181ms

Running 1 test using 1 worker

--- PRODUCTS NAV ---
  ✘  1 [chromium] › tests/e2e/inspect-ourvend-nav.spec.ts:3:5 › inspect ourvend panel observe navigations (2.2m)

  1) [chromium] › tests/e2e/inspect-ourvend-nav.spec.ts:3:5 › inspect ourvend panel observe navigations

    Test timeout of 120000ms exceeded.

    Error: page.click: Test timeout of 120000ms exceeded.
    Call log:
      - waiting for locator('text=Track Management')

      19 |   await page.click('text=Products');
      20 |   await page.waitForTimeout(2000);
    > 21 |   await page.click('text=Track Management');
         |              ^
      22 |   await page.waitForTimeout(5000);
      23 |   console.log('URL after Track Management:', page.url());
      24 |   await page.screenshot({ path: 'tracks_real_nav.png' });
        at /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-nav.spec.ts:21:14

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results/inspect-ourvend-nav-inspec-cbe2d-d-panel-observe-navigations-chromium/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results/inspect-ourvend-nav-inspec-cbe2d-d-panel-observe-navigations-chromium/video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results/inspect-ourvend-nav-inspec-cbe2d-d-panel-observe-navigations-chromium/error-context.md

    attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
    test-results/inspect-ourvend-nav-inspec-cbe2d-d-panel-observe-navigations-chromium/trace.zip
    Usage:

        npx playwright show-trace test-results/inspect-ourvend-nav-inspec-cbe2d-d-panel-observe-navigations-chromium/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────

  1 failed
    [chromium] › tests/e2e/inspect-ourvend-nav.spec.ts:3:5 › inspect ourvend panel observe navigations

Command exited with code 1


write

import { test, expect } from '@playwright/test';

test('inspect ourvend panel hover and click', async ({ page }) => {
  test.setTimeout(120000);

  // 1. Login
  await page.goto('https://dnymer.ourvend.com/');
  await page.waitForSelector('input[placeholder="Username/email"]', { timeout: 10000 });
  await page.fill('input[placeholder="Username/email"]', 'cc');
  await page.fill('input[placeholder*="Password"]', 'ys123456');
  await page.click('button:has-text("Login")');

  await page.waitForSelector('text=cc一级机构', { timeout: 15000 });
  await page.click('text=cc一级机构');
  await page.waitForURL(/.*home.*/, { timeout: 15000 });

  // Hover and Click strategy
  console.log('--- NAV TRACKS ---');
  await page.locator('.ant-menu-submenu-title').filter({ hasText: 'Products' }).hover();
  await page.waitForTimeout(1000);
  await page.locator('.ant-menu-item').filter({ hasText: 'Track Management' }).click();
  await page.waitForTimeout(5000);
  await page.screenshot({ path: 'tracks_hover_click.png' });

  console.log('--- NAV PAYMENT ---');
  await page.locator('.ant-menu-submenu-title').filter({ hasText: 'Payment' }).hover();
  await page.waitForTimeout(1000);
  await page.locator('.ant-menu-item').filter({ hasText: 'Payment settings' }).click();
  await page.waitForTimeout(5000);
  await page.screenshot({ path: 'payment_hover_click.png' });
});


Successfully wrote 1363 bytes to /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-hover.spec.ts


bash

cd /mnt/rpi/repos/ballbox && npx playwright test tests/e2e/inspect-ourvend-hover.spec.ts --project=chromium


[WebServer]
[WebServer] > my-v0-project@0.1.0 build:e2e /mnt/rpi/repos/ballbox
[WebServer] > pnpm build
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 build /mnt/rpi/repos/ballbox
[WebServer] > node scripts/next-build-safe.mjs
[WebServer]
[WebServer] [build] linux/arm64 detected: using webpack + SWC wasm fallback to avoid native next-swc crash
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Skipping creating a lockfile at /mnt/rpi/repos/ballbox/.next/lock because we're using WASM bindings
[WebServer] ▲ Next.js 16.2.1 (webpack)
[WebServer] - Environments: .env.local, .env.production
[WebServer]
[WebServer]   Creating an optimized production build ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ✓ Compiled successfully in 9.5s
[WebServer]   Skipping validation of types
[WebServer]   Finished TypeScript config validation in 11ms ...
[WebServer]   Collecting page data using 3 workers ...
[WebServer]   Generating static pages using 3 workers (0/52) ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Generating static pages using 3 workers (13/52)
[WebServer]   Generating static pages using 3 workers (26/52)
[WebServer]   Generating static pages using 3 workers (39/52)
[WebServer] ✓ Generating static pages using 3 workers (52/52) in 1381ms
[WebServer]   Finalizing page optimization ...
[WebServer]   Collecting build traces ...
[WebServer]
[WebServer] Route (app)
[WebServer] ┌ ○ /
[WebServer] ├ ○ /_not-found
[WebServer] ├ ƒ /admin
[WebServer] ├ ƒ /admin/login
[WebServer] ├ ƒ /admin/network
[WebServer] ├ ƒ /admin/payments
[WebServer] ├ ƒ /admin/players
[WebServer] ├ ƒ /admin/screens
[WebServer] ├ ƒ /admin/sports
[WebServer] ├ ƒ /admin/tvs
[WebServer] ├ ƒ /api/account/session
[WebServer] ├ ƒ /api/admin/logout
[WebServer] ├ ƒ /api/admin/payments/operations
[WebServer] ├ ƒ /api/admin/payments/sessions
[WebServer] ├ ƒ /api/admin/payments/sessions/[sessionId]
[WebServer] ├ ƒ /api/admin/players
[WebServer] ├ ƒ /api/admin/players/[playerId]
[WebServer] ├ ƒ /api/admin/players/[playerId]/memberships
[WebServer] ├ ƒ /api/admin/players/memberships/[membershipId]
[WebServer] ├ ƒ /api/admin/session
[WebServer] ├ ƒ /api/admin/sports/classes
[WebServer] ├ ƒ /api/admin/sports/classes/[classId]
[WebServer] ├ ƒ /api/admin/sports/coaches
[WebServer] ├ ƒ /api/admin/sports/coaches/[coachId]
[WebServer] ├ ƒ /api/admin/sports/open-matches
[WebServer] ├ ƒ /api/admin/sports/open-matches/[matchId]
[WebServer] ├ ƒ /api/admin/sports/operations
[WebServer] ├ ƒ /api/admin/summary
[WebServer] ├ ƒ /api/admin/tvs/assignments/[assignmentId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/assignments
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/creatives
[WebServer] ├ ƒ /api/admin/tvs/creatives/[creativeId]
[WebServer] ├ ƒ /api/admin/tvs/operations
[WebServer] ├ ƒ /api/admin/tvs/screens
[WebServer] ├ ƒ /api/admin/tvs/screens/[screenId]
[WebServer] ├ ƒ /api/admin/tvs/tv-devices
[WebServer] ├ ƒ /api/admin/tvs/tv-devices/[tvDeviceId]
[WebServer] ├ ƒ /api/atc-public/availability/sportclubs/[sportclubId]
[WebServer] ├ ƒ /api/classes/logout
[WebServer] ├ ƒ /api/classes/offers
[WebServer] ├ ƒ /api/classes/offers/[offerId]
[WebServer] ├ ƒ /api/classes/requests
[WebServer] ├ ƒ /api/classes/session
[WebServer] ├ ƒ /api/clubs/accounts
[WebServer] ├ ƒ /api/clubs/coaches
[WebServer] ├ ƒ /api/clubs/coaches/[coachId]
[WebServer] ├ ƒ /api/clubs/invites
[WebServer] ├ ƒ /api/clubs/logout
[WebServer] ├ ƒ /api/clubs/manual-classes
[WebServer] ├ ƒ /api/clubs/me
[WebServer] ├ ƒ /api/clubs/session
[WebServer] ├ ƒ /api/clubs/venues
[WebServer] ├ ƒ /api/clubs/venues/[venueId]
[WebServer] ├ ƒ /api/coaches/accounts
[WebServer] ├ ƒ /api/coaches/availability
[WebServer] ├ ƒ /api/coaches/clubs
[WebServer] ├ ƒ /api/coaches/invites/[token]
[WebServer] ├ ƒ /api/coaches/logout
[WebServer] ├ ƒ /api/coaches/me
[WebServer] ├ ƒ /api/coaches/session
[WebServer] ├ ƒ /api/coaches/students
[WebServer] ├ ƒ /api/coaches/students/[bookingId]
[WebServer] ├ ƒ /api/coaches/students/players/[playerId]
[WebServer] ├ ƒ /api/integrations/payments/approved
[WebServer] ├ ƒ /api/integrations/payments/health
[WebServer] ├ ƒ /api/integrations/payments/orders
[WebServer] ├ ƒ /api/integrations/payments/sessions
[WebServer] ├ ƒ /api/network
[WebServer] ├ ƒ /api/network/[clubId]
[WebServer] ├ ƒ /api/network/[clubId]/venues
[WebServer] ├ ƒ /api/network/[clubId]/venues/[venueId]
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines/[vendingMachineId]
[WebServer] ├ ƒ /api/players
[WebServer] ├ ƒ /api/sports
[WebServer] ├ ƒ /api/tvs/health
[WebServer] ├ ƒ /api/tvs/heartbeat
[WebServer] ├ ƒ /api/tvs/impression
[WebServer] ├ ƒ /api/tvs/manifest/[screenId]
[WebServer] ├ ƒ /api/tvs/screens
[WebServer] ├ ƒ /classes
[WebServer] ├ ƒ /classes-by-date
[WebServer] ├ ƒ /classes/[offerId]
[WebServer] ├ ƒ /classes/login
[WebServer] ├ ƒ /classes/me
[WebServer] ├ ƒ /clubs
[WebServer] ├ ƒ /clubs/coaches
[WebServer] ├ ƒ /clubs/venues/[venueId]
[WebServer] ├ ○ /coaches
[WebServer] ├ ƒ /coaches/settings
[WebServer] ├ ƒ /notification/mercadopago
[WebServer] └ ƒ /player/[screenId]
[WebServer]
[WebServer]
[WebServer] ƒ Proxy (Middleware)
[WebServer]
[WebServer] ○  (Static)   prerendered as static content
[WebServer] ƒ  (Dynamic)  server-rendered on demand
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 start:e2e /mnt/rpi/repos/ballbox
[WebServer] > next start --port 3020
[WebServer]
[WebServer] ▲ Next.js 16.2.1
[WebServer] - Local:         http://localhost:3020
[WebServer] - Network:       http://192.168.1.33:3020
[WebServer] ✓ Ready in 180ms

Running 1 test using 1 worker

--- NAV TRACKS ---
  ✘  1 [chromium] › tests/e2e/inspect-ourvend-hover.spec.ts:3:5 › inspect ourvend panel hover and click (2.2m)

  1) [chromium] › tests/e2e/inspect-ourvend-hover.spec.ts:3:5 › inspect ourvend panel hover and click

    Test timeout of 120000ms exceeded.

    Error: locator.click: Test timeout of 120000ms exceeded.
    Call log:
      - waiting for locator('.ant-menu-item').filter({ hasText: 'Track Management' })

      19 |   await page.locator('.ant-menu-submenu-title').filter({ hasText: 'Products' }).hover();
      20 |   await page.waitForTimeout(1000);
    > 21 |   await page.locator('.ant-menu-item').filter({ hasText: 'Track Management' }).click();
         |                                                                                ^
      22 |   await page.waitForTimeout(5000);
      23 |   await page.screenshot({ path: 'tracks_hover_click.png' });
      24 |
        at /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-hover.spec.ts:21:80

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results/inspect-ourvend-hover-inspect-ourvend-panel-hover-and-click-chromium/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results/inspect-ourvend-hover-inspect-ourvend-panel-hover-and-click-chromium/video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results/inspect-ourvend-hover-inspect-ourvend-panel-hover-and-click-chromium/error-context.md

    attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
    test-results/inspect-ourvend-hover-inspect-ourvend-panel-hover-and-click-chromium/trace.zip
    Usage:

        npx playwright show-trace test-results/inspect-ourvend-hover-inspect-ourvend-panel-hover-and-click-chromium/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────

  1 failed
    [chromium] › tests/e2e/inspect-ourvend-hover.spec.ts:3:5 › inspect ourvend panel hover and click

Command exited with code 1


write

import { test, expect } from '@playwright/test';

test('inspect ourvend panel recursive list', async ({ page }) => {
  test.setTimeout(120000);

  // 1. Login
  await page.goto('https://dnymer.ourvend.com/');
  await page.waitForSelector('input[placeholder="Username/email"]', { timeout: 10000 });
  await page.fill('input[placeholder="Username/email"]', 'cc');
  await page.fill('input[placeholder*="Password"]', 'ys123456');
  await page.click('button:has-text("Login")');

  await page.waitForSelector('text=cc一级机构', { timeout: 15000 });
  await page.click('text=cc一级机构');
  await page.waitForURL(/.*home.*/, { timeout: 15000 });

  // List all text content of sidebar
  const menuText = await page.locator('.ant-layout-sider').innerText();
  console.log('MENU TEXT:', menuText);

  // List all links or clickables in sidebar
  const clickables = await page.locator('.ant-layout-sider [role="menuitem"], .ant-layout-sider .ant-menu-submenu-title').allInnerTexts();
  console.log('CLICKABLES:', clickables);

  // Try to click Products by index or exact matches found
  await page.locator('.ant-menu-submenu-title').filter({ hasText: 'Products' }).first().click();
  await page.waitForTimeout(2000);

  // Now list items again to see if sub-menu appeared
  const afterClick = await page.locator('.ant-layout-sider').innerText();
  console.log('MENU TEXT AFTER CLICK:', afterClick);

  await page.screenshot({ path: 'sidebar_debug.png' });
});


Successfully wrote 1449 bytes to /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-debug.spec.ts


bash

cd /mnt/rpi/repos/ballbox && npx playwright test tests/e2e/inspect-ourvend-debug.spec.ts --project=chromium


[WebServer]
[WebServer] > my-v0-project@0.1.0 build:e2e /mnt/rpi/repos/ballbox
[WebServer] > pnpm build
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 build /mnt/rpi/repos/ballbox
[WebServer] > node scripts/next-build-safe.mjs
[WebServer]
[WebServer] [build] linux/arm64 detected: using webpack + SWC wasm fallback to avoid native next-swc crash
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Skipping creating a lockfile at /mnt/rpi/repos/ballbox/.next/lock because we're using WASM bindings
[WebServer] ▲ Next.js 16.2.1 (webpack)
[WebServer] - Environments: .env.local, .env.production
[WebServer]
[WebServer]   Creating an optimized production build ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ✓ Compiled successfully in 9.2s
[WebServer]   Skipping validation of types
[WebServer]   Finished TypeScript config validation in 15ms ...
[WebServer]   Collecting page data using 3 workers ...
[WebServer]   Generating static pages using 3 workers (0/52) ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Generating static pages using 3 workers (13/52)
[WebServer]   Generating static pages using 3 workers (26/52)
[WebServer]   Generating static pages using 3 workers (39/52)
[WebServer] ✓ Generating static pages using 3 workers (52/52) in 1166ms
[WebServer]   Finalizing page optimization ...
[WebServer]   Collecting build traces ...
[WebServer]
[WebServer] Route (app)
[WebServer] ┌ ○ /
[WebServer] ├ ○ /_not-found
[WebServer] ├ ƒ /admin
[WebServer] ├ ƒ /admin/login
[WebServer] ├ ƒ /admin/network
[WebServer] ├ ƒ /admin/payments
[WebServer] ├ ƒ /admin/players
[WebServer] ├ ƒ /admin/screens
[WebServer] ├ ƒ /admin/sports
[WebServer] ├ ƒ /admin/tvs
[WebServer] ├ ƒ /api/account/session
[WebServer] ├ ƒ /api/admin/logout
[WebServer] ├ ƒ /api/admin/payments/operations
[WebServer] ├ ƒ /api/admin/payments/sessions
[WebServer] ├ ƒ /api/admin/payments/sessions/[sessionId]
[WebServer] ├ ƒ /api/admin/players
[WebServer] ├ ƒ /api/admin/players/[playerId]
[WebServer] ├ ƒ /api/admin/players/[playerId]/memberships
[WebServer] ├ ƒ /api/admin/players/memberships/[membershipId]
[WebServer] ├ ƒ /api/admin/session
[WebServer] ├ ƒ /api/admin/sports/classes
[WebServer] ├ ƒ /api/admin/sports/classes/[classId]
[WebServer] ├ ƒ /api/admin/sports/coaches
[WebServer] ├ ƒ /api/admin/sports/coaches/[coachId]
[WebServer] ├ ƒ /api/admin/sports/open-matches
[WebServer] ├ ƒ /api/admin/sports/open-matches/[matchId]
[WebServer] ├ ƒ /api/admin/sports/operations
[WebServer] ├ ƒ /api/admin/summary
[WebServer] ├ ƒ /api/admin/tvs/assignments/[assignmentId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/assignments
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/creatives
[WebServer] ├ ƒ /api/admin/tvs/creatives/[creativeId]
[WebServer] ├ ƒ /api/admin/tvs/operations
[WebServer] ├ ƒ /api/admin/tvs/screens
[WebServer] ├ ƒ /api/admin/tvs/screens/[screenId]
[WebServer] ├ ƒ /api/admin/tvs/tv-devices
[WebServer] ├ ƒ /api/admin/tvs/tv-devices/[tvDeviceId]
[WebServer] ├ ƒ /api/atc-public/availability/sportclubs/[sportclubId]
[WebServer] ├ ƒ /api/classes/logout
[WebServer] ├ ƒ /api/classes/offers
[WebServer] ├ ƒ /api/classes/offers/[offerId]
[WebServer] ├ ƒ /api/classes/requests
[WebServer] ├ ƒ /api/classes/session
[WebServer] ├ ƒ /api/clubs/accounts
[WebServer] ├ ƒ /api/clubs/coaches
[WebServer] ├ ƒ /api/clubs/coaches/[coachId]
[WebServer] ├ ƒ /api/clubs/invites
[WebServer] ├ ƒ /api/clubs/logout
[WebServer] ├ ƒ /api/clubs/manual-classes
[WebServer] ├ ƒ /api/clubs/me
[WebServer] ├ ƒ /api/clubs/session
[WebServer] ├ ƒ /api/clubs/venues
[WebServer] ├ ƒ /api/clubs/venues/[venueId]
[WebServer] ├ ƒ /api/coaches/accounts
[WebServer] ├ ƒ /api/coaches/availability
[WebServer] ├ ƒ /api/coaches/clubs
[WebServer] ├ ƒ /api/coaches/invites/[token]
[WebServer] ├ ƒ /api/coaches/logout
[WebServer] ├ ƒ /api/coaches/me
[WebServer] ├ ƒ /api/coaches/session
[WebServer] ├ ƒ /api/coaches/students
[WebServer] ├ ƒ /api/coaches/students/[bookingId]
[WebServer] ├ ƒ /api/coaches/students/players/[playerId]
[WebServer] ├ ƒ /api/integrations/payments/approved
[WebServer] ├ ƒ /api/integrations/payments/health
[WebServer] ├ ƒ /api/integrations/payments/orders
[WebServer] ├ ƒ /api/integrations/payments/sessions
[WebServer] ├ ƒ /api/network
[WebServer] ├ ƒ /api/network/[clubId]
[WebServer] ├ ƒ /api/network/[clubId]/venues
[WebServer] ├ ƒ /api/network/[clubId]/venues/[venueId]
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines/[vendingMachineId]
[WebServer] ├ ƒ /api/players
[WebServer] ├ ƒ /api/sports
[WebServer] ├ ƒ /api/tvs/health
[WebServer] ├ ƒ /api/tvs/heartbeat
[WebServer] ├ ƒ /api/tvs/impression
[WebServer] ├ ƒ /api/tvs/manifest/[screenId]
[WebServer] ├ ƒ /api/tvs/screens
[WebServer] ├ ƒ /classes
[WebServer] ├ ƒ /classes-by-date
[WebServer] ├ ƒ /classes/[offerId]
[WebServer] ├ ƒ /classes/login
[WebServer] ├ ƒ /classes/me
[WebServer] ├ ƒ /clubs
[WebServer] ├ ƒ /clubs/coaches
[WebServer] ├ ƒ /clubs/venues/[venueId]
[WebServer] ├ ○ /coaches
[WebServer] ├ ƒ /coaches/settings
[WebServer] ├ ƒ /notification/mercadopago
[WebServer] └ ƒ /player/[screenId]
[WebServer]
[WebServer]
[WebServer] ƒ Proxy (Middleware)
[WebServer]
[WebServer] ○  (Static)   prerendered as static content
[WebServer] ƒ  (Dynamic)  server-rendered on demand
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 start:e2e /mnt/rpi/repos/ballbox
[WebServer] > next start --port 3020
[WebServer]
[WebServer] ▲ Next.js 16.2.1
[WebServer] - Local:         http://localhost:3020
[WebServer] - Network:       http://192.168.1.33:3020
[WebServer] ✓ Ready in 169ms

Running 1 test using 1 worker

MENU TEXT: cc一级机构680649029169221HomeWorkspaceMachineOrderProductsStrategyInstitutiondataSystemPaymentLogsFeedback
CLICKABLES: [
  'Home',        'Workspace',
  'Machine',     'Order',
  'Products',    'Strategy',
  'Institution', 'data',
  'System',      'Payment',
  'Logs',        'Feedback'
]
MENU TEXT AFTER CLICK: cc一级机构
680649029169221
Home
Workspace
Machine
Order
Products
Product Catalog
Public Audit
Public Audit
Strategy
Institution
data
System
Payment
Logs
Feedback
  ✓  1 [chromium] › tests/e2e/inspect-ourvend-debug.spec.ts:3:5 › inspect ourvend panel recursive list (14.0s)

  1 passed (59.0s)


write

import { test, expect } from '@playwright/test';

test('inspect ourvend submenus', async ({ page }) => {
  test.setTimeout(120000);

  // 1. Login
  await page.goto('https://dnymer.ourvend.com/');
  await page.waitForSelector('input[placeholder="Username/email"]', { timeout: 10000 });
  await page.fill('input[placeholder="Username/email"]', 'cc');
  await page.fill('input[placeholder*="Password"]', 'ys123456');
  await page.click('button:has-text("Login")');

  await page.waitForSelector('text=cc一级机构', { timeout: 15000 });
  await page.click('text=cc一级机构');
  await page.waitForURL(/.*home.*/, { timeout: 15000 });

  console.log('--- PRODUCTS SUBMENU ---');
  await page.click('text=Products');
  await page.waitForTimeout(2000);
  const productsSub = await page.locator('.ant-layout-sider').innerText();
  console.log('PRODUCTS MENU:', productsSub);

  console.log('--- MACHINE SUBMENU ---');
  await page.click('text=Machine');
  await page.waitForTimeout(2000);
  const machineSub = await page.locator('.ant-layout-sider').innerText();
  console.log('MACHINE MENU:', machineSub);

  console.log('--- PAYMENT SUBMENU ---');
  await page.click('text=Payment');
  await page.waitForTimeout(2000);
  const paymentSub = await page.locator('.ant-layout-sider').innerText();
  console.log('PAYMENT MENU:', paymentSub);

  console.log('--- SYSTEM SUBMENU ---');
  await page.click('text=System');
  await page.waitForTimeout(2000);
  const systemSub = await page.locator('.ant-layout-sider').innerText();
  console.log('SYSTEM MENU:', systemSub);

  await page.screenshot({ path: 'sidebar_all_expanded.png' });
});


Successfully wrote 1619 bytes to /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-submenus.spec.ts


bash

cd /mnt/rpi/repos/ballbox && npx playwright test tests/e2e/inspect-ourvend-submenus.spec.ts --project=chromium


[WebServer]
[WebServer] > my-v0-project@0.1.0 build:e2e /mnt/rpi/repos/ballbox
[WebServer] > pnpm build
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 build /mnt/rpi/repos/ballbox
[WebServer] > node scripts/next-build-safe.mjs
[WebServer]
[WebServer] [build] linux/arm64 detected: using webpack + SWC wasm fallback to avoid native next-swc crash
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Skipping creating a lockfile at /mnt/rpi/repos/ballbox/.next/lock because we're using WASM bindings
[WebServer] ▲ Next.js 16.2.1 (webpack)
[WebServer] - Environments: .env.local, .env.production
[WebServer]
[WebServer]   Creating an optimized production build ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ✓ Compiled successfully in 9.8s
[WebServer]   Skipping validation of types
[WebServer]   Finished TypeScript config validation in 13ms ...
[WebServer]   Collecting page data using 3 workers ...
[WebServer]   Generating static pages using 3 workers (0/52) ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Generating static pages using 3 workers (13/52)
[WebServer]   Generating static pages using 3 workers (26/52)
[WebServer]   Generating static pages using 3 workers (39/52)
[WebServer] ✓ Generating static pages using 3 workers (52/52) in 1167ms
[WebServer]   Finalizing page optimization ...
[WebServer]   Collecting build traces ...
[WebServer]
[WebServer] Route (app)
[WebServer] ┌ ○ /
[WebServer] ├ ○ /_not-found
[WebServer] ├ ƒ /admin
[WebServer] ├ ƒ /admin/login
[WebServer] ├ ƒ /admin/network
[WebServer] ├ ƒ /admin/payments
[WebServer] ├ ƒ /admin/players
[WebServer] ├ ƒ /admin/screens
[WebServer] ├ ƒ /admin/sports
[WebServer] ├ ƒ /admin/tvs
[WebServer] ├ ƒ /api/account/session
[WebServer] ├ ƒ /api/admin/logout
[WebServer] ├ ƒ /api/admin/payments/operations
[WebServer] ├ ƒ /api/admin/payments/sessions
[WebServer] ├ ƒ /api/admin/payments/sessions/[sessionId]
[WebServer] ├ ƒ /api/admin/players
[WebServer] ├ ƒ /api/admin/players/[playerId]
[WebServer] ├ ƒ /api/admin/players/[playerId]/memberships
[WebServer] ├ ƒ /api/admin/players/memberships/[membershipId]
[WebServer] ├ ƒ /api/admin/session
[WebServer] ├ ƒ /api/admin/sports/classes
[WebServer] ├ ƒ /api/admin/sports/classes/[classId]
[WebServer] ├ ƒ /api/admin/sports/coaches
[WebServer] ├ ƒ /api/admin/sports/coaches/[coachId]
[WebServer] ├ ƒ /api/admin/sports/open-matches
[WebServer] ├ ƒ /api/admin/sports/open-matches/[matchId]
[WebServer] ├ ƒ /api/admin/sports/operations
[WebServer] ├ ƒ /api/admin/summary
[WebServer] ├ ƒ /api/admin/tvs/assignments/[assignmentId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/assignments
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/creatives
[WebServer] ├ ƒ /api/admin/tvs/creatives/[creativeId]
[WebServer] ├ ƒ /api/admin/tvs/operations
[WebServer] ├ ƒ /api/admin/tvs/screens
[WebServer] ├ ƒ /api/admin/tvs/screens/[screenId]
[WebServer] ├ ƒ /api/admin/tvs/tv-devices
[WebServer] ├ ƒ /api/admin/tvs/tv-devices/[tvDeviceId]
[WebServer] ├ ƒ /api/atc-public/availability/sportclubs/[sportclubId]
[WebServer] ├ ƒ /api/classes/logout
[WebServer] ├ ƒ /api/classes/offers
[WebServer] ├ ƒ /api/classes/offers/[offerId]
[WebServer] ├ ƒ /api/classes/requests
[WebServer] ├ ƒ /api/classes/session
[WebServer] ├ ƒ /api/clubs/accounts
[WebServer] ├ ƒ /api/clubs/coaches
[WebServer] ├ ƒ /api/clubs/coaches/[coachId]
[WebServer] ├ ƒ /api/clubs/invites
[WebServer] ├ ƒ /api/clubs/logout
[WebServer] ├ ƒ /api/clubs/manual-classes
[WebServer] ├ ƒ /api/clubs/me
[WebServer] ├ ƒ /api/clubs/session
[WebServer] ├ ƒ /api/clubs/venues
[WebServer] ├ ƒ /api/clubs/venues/[venueId]
[WebServer] ├ ƒ /api/coaches/accounts
[WebServer] ├ ƒ /api/coaches/availability
[WebServer] ├ ƒ /api/coaches/clubs
[WebServer] ├ ƒ /api/coaches/invites/[token]
[WebServer] ├ ƒ /api/coaches/logout
[WebServer] ├ ƒ /api/coaches/me
[WebServer] ├ ƒ /api/coaches/session
[WebServer] ├ ƒ /api/coaches/students
[WebServer] ├ ƒ /api/coaches/students/[bookingId]
[WebServer] ├ ƒ /api/coaches/students/players/[playerId]
[WebServer] ├ ƒ /api/integrations/payments/approved
[WebServer] ├ ƒ /api/integrations/payments/health
[WebServer] ├ ƒ /api/integrations/payments/orders
[WebServer] ├ ƒ /api/integrations/payments/sessions
[WebServer] ├ ƒ /api/network
[WebServer] ├ ƒ /api/network/[clubId]
[WebServer] ├ ƒ /api/network/[clubId]/venues
[WebServer] ├ ƒ /api/network/[clubId]/venues/[venueId]
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines/[vendingMachineId]
[WebServer] ├ ƒ /api/players
[WebServer] ├ ƒ /api/sports
[WebServer] ├ ƒ /api/tvs/health
[WebServer] ├ ƒ /api/tvs/heartbeat
[WebServer] ├ ƒ /api/tvs/impression
[WebServer] ├ ƒ /api/tvs/manifest/[screenId]
[WebServer] ├ ƒ /api/tvs/screens
[WebServer] ├ ƒ /classes
[WebServer] ├ ƒ /classes-by-date
[WebServer] ├ ƒ /classes/[offerId]
[WebServer] ├ ƒ /classes/login
[WebServer] ├ ƒ /classes/me
[WebServer] ├ ƒ /clubs
[WebServer] ├ ƒ /clubs/coaches
[WebServer] ├ ƒ /clubs/venues/[venueId]
[WebServer] ├ ○ /coaches
[WebServer] ├ ƒ /coaches/settings
[WebServer] ├ ƒ /notification/mercadopago
[WebServer] └ ƒ /player/[screenId]
[WebServer]
[WebServer]
[WebServer] ƒ Proxy (Middleware)
[WebServer]
[WebServer] ○  (Static)   prerendered as static content
[WebServer] ƒ  (Dynamic)  server-rendered on demand
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 start:e2e /mnt/rpi/repos/ballbox
[WebServer] > next start --port 3020
[WebServer]
[WebServer] ▲ Next.js 16.2.1
[WebServer] - Local:         http://localhost:3020
[WebServer] - Network:       http://192.168.1.33:3020
[WebServer] ✓ Ready in 178ms

Running 1 test using 1 worker

--- PRODUCTS SUBMENU ---
PRODUCTS MENU: cc一级机构
680649029169221
Home
Workspace
Machine
Order
Products
Product Catalog
Public Audit
Public Audit
Strategy
Institution
data
System
Payment
Logs
Feedback
--- MACHINE SUBMENU ---
MACHINE MENU: cc一级机构
680649029169221
Home
Workspace
Machine
Machine
Stockout List
Machine Status
Machine Malfunction
Machine Grouping
Slot Flow
Restock Record
Order
Products
Product Catalog
Public Audit
Public Audit
Strategy
Institution
data
System
Payment
Logs
Feedback
--- PAYMENT SUBMENU ---
PAYMENT MENU: cc一级机构
680649029169221
Home
Workspace
Machine
Machine
Stockout List
Machine Status
Machine Malfunction
Machine Grouping
Slot Flow
Restock Record
Order
Products
Product Catalog
Public Audit
Public Audit
Strategy
Institution
data
System
Payment
Payment
Withdrawal Record
Logs
Feedback
--- SYSTEM SUBMENU ---
SYSTEM MENU: cc一级机构
680649029169221
Home
Workspace
Machine
Machine
Stockout List
Machine Status
Machine Malfunction
Machine Grouping
Slot Flow
Restock Record
Order
Products
Product Catalog
Public Audit
Public Audit
Strategy
Institution
data
System
Role
User
Payment
Payment
Withdrawal Record
Logs
Feedback
  ✓  1 [chromium] › tests/e2e/inspect-ourvend-submenus.spec.ts:3:5 › inspect ourvend submenus (19.8s)

  1 passed (1.1m)


write

import { test, expect } from '@playwright/test';

test('inspect ourvend deep', async ({ page }) => {
  test.setTimeout(180000);

  // 1. Login
  await page.goto('https://dnymer.ourvend.com/');
  await page.waitForSelector('input[placeholder="Username/email"]', { timeout: 10000 });
  await page.fill('input[placeholder="Username/email"]', 'cc');
  await page.fill('input[placeholder*="Password"]', 'ys123456');
  await page.click('button:has-text("Login")');

  await page.waitForSelector('text=cc一级机构', { timeout: 15000 });
  await page.click('text=cc一级机构');
  await page.waitForURL(/.*home.*/, { timeout: 15000 });

  // 2. Machine -> Machine Status (Might have detail/track info)
  console.log('--- MACHINE STATUS ---');
  await page.click('text=Machine');
  await page.waitForTimeout(1000);
  await page.click('text=Machine Status');
  await page.waitForTimeout(5000);
  await page.screenshot({ path: 'machine_status.png' });

  // 3. Products -> Product Catalog (Verify global library)
  console.log('--- PRODUCT CATALOG ---');
  await page.click('text=Products');
  await page.waitForTimeout(1000);
  await page.click('text=Product Catalog');
  await page.waitForTimeout(5000);
  await page.screenshot({ path: 'product_catalog.png' });

  // 4. Order (Check if any third-party filter exists)
  console.log('--- ORDERS ---');
  await page.click('text=Order');
  await page.waitForTimeout(2000);
  await page.screenshot({ path: 'order_menu.png' });

  // 5. Payment -> Payment (Check for settings/parameters inside)
  console.log('--- PAYMENT DEEP ---');
  await page.click('text=Payment');
  await page.waitForTimeout(1000);
  // Based on submenus log, it has another "Payment" sub-item
  await page.locator('.ant-menu-item').filter({ hasText: /^Payment$/ }).click();
  await page.waitForTimeout(5000);
  await page.screenshot({ path: 'payment_list.png' });

  // Try to find any "Setting" or "Param"
  const bodyText = await page.innerText('body');
  console.log('PAYMENT PAGE TEXT:', bodyText.substring(0, 500));

  // 6. Go back to Machine List and click the first machine row to see if it's clickable
  await page.click('text=Machine');
  await page.waitForTimeout(1000);
  await page.locator('.ant-menu-item').filter({ hasText: /^Machine$/ }).click();
  await page.waitForTimeout(5000);
  // Click on the first machine number (P0000...)
  await page.click('text=P02562604020001'); // The V49 machine
  await page.waitForTimeout(5000);
  await page.screenshot({ path: 'machine_detail.png' });
});


Successfully wrote 2510 bytes to /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-deep.spec.ts


bash

cd /mnt/rpi/repos/ballbox && npx playwright test tests/e2e/inspect-ourvend-deep.spec.ts --project=chromium


[WebServer]
[WebServer] > my-v0-project@0.1.0 build:e2e /mnt/rpi/repos/ballbox
[WebServer] > pnpm build
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 build /mnt/rpi/repos/ballbox
[WebServer] > node scripts/next-build-safe.mjs
[WebServer]
[WebServer] [build] linux/arm64 detected: using webpack + SWC wasm fallback to avoid native next-swc crash
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Skipping creating a lockfile at /mnt/rpi/repos/ballbox/.next/lock because we're using WASM bindings
[WebServer] ▲ Next.js 16.2.1 (webpack)
[WebServer] - Environments: .env.local, .env.production
[WebServer]
[WebServer]   Creating an optimized production build ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ✓ Compiled successfully in 9.1s
[WebServer]   Skipping validation of types
[WebServer]   Finished TypeScript config validation in 10ms ...
[WebServer]   Collecting page data using 3 workers ...
[WebServer]   Generating static pages using 3 workers (0/52) ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Generating static pages using 3 workers (13/52)
[WebServer]   Generating static pages using 3 workers (26/52)
[WebServer]   Generating static pages using 3 workers (39/52)
[WebServer] ✓ Generating static pages using 3 workers (52/52) in 1196ms
[WebServer]   Finalizing page optimization ...
[WebServer]   Collecting build traces ...
[WebServer]
[WebServer] Route (app)
[WebServer] ┌ ○ /
[WebServer] ├ ○ /_not-found
[WebServer] ├ ƒ /admin
[WebServer] ├ ƒ /admin/login
[WebServer] ├ ƒ /admin/network
[WebServer] ├ ƒ /admin/payments
[WebServer] ├ ƒ /admin/players
[WebServer] ├ ƒ /admin/screens
[WebServer] ├ ƒ /admin/sports
[WebServer] ├ ƒ /admin/tvs
[WebServer] ├ ƒ /api/account/session
[WebServer] ├ ƒ /api/admin/logout
[WebServer] ├ ƒ /api/admin/payments/operations
[WebServer] ├ ƒ /api/admin/payments/sessions
[WebServer] ├ ƒ /api/admin/payments/sessions/[sessionId]
[WebServer] ├ ƒ /api/admin/players
[WebServer] ├ ƒ /api/admin/players/[playerId]
[WebServer] ├ ƒ /api/admin/players/[playerId]/memberships
[WebServer] ├ ƒ /api/admin/players/memberships/[membershipId]
[WebServer] ├ ƒ /api/admin/session
[WebServer] ├ ƒ /api/admin/sports/classes
[WebServer] ├ ƒ /api/admin/sports/classes/[classId]
[WebServer] ├ ƒ /api/admin/sports/coaches
[WebServer] ├ ƒ /api/admin/sports/coaches/[coachId]
[WebServer] ├ ƒ /api/admin/sports/open-matches
[WebServer] ├ ƒ /api/admin/sports/open-matches/[matchId]
[WebServer] ├ ƒ /api/admin/sports/operations
[WebServer] ├ ƒ /api/admin/summary
[WebServer] ├ ƒ /api/admin/tvs/assignments/[assignmentId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/assignments
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/creatives
[WebServer] ├ ƒ /api/admin/tvs/creatives/[creativeId]
[WebServer] ├ ƒ /api/admin/tvs/operations
[WebServer] ├ ƒ /api/admin/tvs/screens
[WebServer] ├ ƒ /api/admin/tvs/screens/[screenId]
[WebServer] ├ ƒ /api/admin/tvs/tv-devices
[WebServer] ├ ƒ /api/admin/tvs/tv-devices/[tvDeviceId]
[WebServer] ├ ƒ /api/atc-public/availability/sportclubs/[sportclubId]
[WebServer] ├ ƒ /api/classes/logout
[WebServer] ├ ƒ /api/classes/offers
[WebServer] ├ ƒ /api/classes/offers/[offerId]
[WebServer] ├ ƒ /api/classes/requests
[WebServer] ├ ƒ /api/classes/session
[WebServer] ├ ƒ /api/clubs/accounts
[WebServer] ├ ƒ /api/clubs/coaches
[WebServer] ├ ƒ /api/clubs/coaches/[coachId]
[WebServer] ├ ƒ /api/clubs/invites
[WebServer] ├ ƒ /api/clubs/logout
[WebServer] ├ ƒ /api/clubs/manual-classes
[WebServer] ├ ƒ /api/clubs/me
[WebServer] ├ ƒ /api/clubs/session
[WebServer] ├ ƒ /api/clubs/venues
[WebServer] ├ ƒ /api/clubs/venues/[venueId]
[WebServer] ├ ƒ /api/coaches/accounts
[WebServer] ├ ƒ /api/coaches/availability
[WebServer] ├ ƒ /api/coaches/clubs
[WebServer] ├ ƒ /api/coaches/invites/[token]
[WebServer] ├ ƒ /api/coaches/logout
[WebServer] ├ ƒ /api/coaches/me
[WebServer] ├ ƒ /api/coaches/session
[WebServer] ├ ƒ /api/coaches/students
[WebServer] ├ ƒ /api/coaches/students/[bookingId]
[WebServer] ├ ƒ /api/coaches/students/players/[playerId]
[WebServer] ├ ƒ /api/integrations/payments/approved
[WebServer] ├ ƒ /api/integrations/payments/health
[WebServer] ├ ƒ /api/integrations/payments/orders
[WebServer] ├ ƒ /api/integrations/payments/sessions
[WebServer] ├ ƒ /api/network
[WebServer] ├ ƒ /api/network/[clubId]
[WebServer] ├ ƒ /api/network/[clubId]/venues
[WebServer] ├ ƒ /api/network/[clubId]/venues/[venueId]
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines/[vendingMachineId]
[WebServer] ├ ƒ /api/players
[WebServer] ├ ƒ /api/sports
[WebServer] ├ ƒ /api/tvs/health
[WebServer] ├ ƒ /api/tvs/heartbeat
[WebServer] ├ ƒ /api/tvs/impression
[WebServer] ├ ƒ /api/tvs/manifest/[screenId]
[WebServer] ├ ƒ /api/tvs/screens
[WebServer] ├ ƒ /classes
[WebServer] ├ ƒ /classes-by-date
[WebServer] ├ ƒ /classes/[offerId]
[WebServer] ├ ƒ /classes/login
[WebServer] ├ ƒ /classes/me
[WebServer] ├ ƒ /clubs
[WebServer] ├ ƒ /clubs/coaches
[WebServer] ├ ƒ /clubs/venues/[venueId]
[WebServer] ├ ○ /coaches
[WebServer] ├ ƒ /coaches/settings
[WebServer] ├ ƒ /notification/mercadopago
[WebServer] └ ƒ /player/[screenId]
[WebServer]
[WebServer]
[WebServer] ƒ Proxy (Middleware)
[WebServer]
[WebServer] ○  (Static)   prerendered as static content
[WebServer] ƒ  (Dynamic)  server-rendered on demand
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 start:e2e /mnt/rpi/repos/ballbox
[WebServer] > next start --port 3020
[WebServer]
[WebServer] ▲ Next.js 16.2.1
[WebServer] - Local:         http://localhost:3020
[WebServer] - Network:       http://192.168.1.33:3020
[WebServer] ✓ Ready in 172ms

Running 1 test using 1 worker

--- MACHINE STATUS ---
--- PRODUCT CATALOG ---
--- ORDERS ---
--- PAYMENT DEEP ---
PAYMENT PAGE TEXT: cc一级机构
680649029169221
Home
Workspace
Machine
Order
Products
Strategy
Institution
data
System
Payment
Payment
Withdrawal Record
Logs
Feedback
Operation CenterData CenterApp Market
Switch institution
cc一级机构
English
U

cc

Home
Machine Status
Product Catalog
Payment
Payment
Online Payment
PayPal
Enable
Successful Entry
Email: yongtang258@gmail.com
Remark:
Bind Machine
Disable
Total 1 Strip
1
  ✓  1 [chromium] › tests/e2e/inspect-ourvend-deep.spec.ts:3:5 › inspect ourvend deep (49.7s)

  1 passed (1.6m)


ls -lh /mnt/rpi/repos/ballbox/machine_status.png /mnt/rpi/repos/ballbox/product_catalog.png /mnt/rpi/repos/ballbox/order_menu.png /mnt/rpi/repos/ballbox/payment_list.png /mnt/rpi/repos/ballbox/machine_detail.png


-rw-r--r-- 1 sebas sebas  95K Apr 20 20:24 /mnt/rpi/repos/ballbox/machine_detail.png
-rw-r--r-- 1 sebas sebas 107K Apr 20 20:24 /mnt/rpi/repos/ballbox/machine_status.png
-rw-r--r-- 1 sebas sebas  91K Apr 20 20:24 /mnt/rpi/repos/ballbox/order_menu.png
-rw-r--r-- 1 sebas sebas  69K Apr 20 20:24 /mnt/rpi/repos/ballbox/payment_list.png
-rw-r--r-- 1 sebas sebas  93K Apr 20 20:24 /mnt/rpi/repos/ballbox/product_catalog.png


Read image file [image/png]


write

import { test, expect } from '@playwright/test';

test('inspect ourvend v49 tracks', async ({ page }) => {
  test.setTimeout(120000);

  // 1. Login
  await page.goto('https://dnymer.ourvend.com/');
  await page.waitForSelector('input[placeholder="Username/email"]', { timeout: 10000 });
  await page.fill('input[placeholder="Username/email"]', 'cc');
  await page.fill('input[placeholder*="Password"]', 'ys123456');
  await page.click('button:has-text("Login")');

  await page.waitForSelector('text=cc一级机构', { timeout: 15000 });
  await page.click('text=cc一级机构');
  await page.waitForURL(/.*home.*/, { timeout: 15000 });

  // 2. Go to Machine list
  await page.click('text=Machine');
  await page.locator('.ant-menu-item').filter({ hasText: /^Machine$/ }).click();
  await page.waitForTimeout(5000);

  // 3. Click the track icon (it looks like a grid/matrix icon)
  // Based on machine_detail.png, it's the 3rd icon in the "Operation" column.
  const v49Row = page.locator('tr').filter({ hasText: 'TCN-CSC-8C' });
  // The track icon is .anticon-border-outer or similar. In machine_detail.png,
  // it is the one after the gear. Gear is 2nd, Tracks is 3rd.
  await v49Row.locator('i.anticon').nth(2).click();
  await page.waitForTimeout(8000);
  await page.screenshot({ path: 'v49_tracks_view.png' });

  // Try to see if clicking a track opens an edit popup
  await page.locator('td').first().click().catch(() => {});
  await page.waitForTimeout(3000);
  await page.screenshot({ path: 'track_edit_popup.png' });
});


Successfully wrote 1525 bytes to /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-tracks.spec.ts


bash

cd /mnt/rpi/repos/ballbox && npx playwright test tests/e2e/inspect-ourvend-tracks.spec.ts --project=chromium


[WebServer]
[WebServer] > my-v0-project@0.1.0 build:e2e /mnt/rpi/repos/ballbox
[WebServer] > pnpm build
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 build /mnt/rpi/repos/ballbox
[WebServer] > node scripts/next-build-safe.mjs
[WebServer]
[WebServer] [build] linux/arm64 detected: using webpack + SWC wasm fallback to avoid native next-swc crash
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Skipping creating a lockfile at /mnt/rpi/repos/ballbox/.next/lock because we're using WASM bindings
[WebServer] ▲ Next.js 16.2.1 (webpack)
[WebServer] - Environments: .env.local, .env.production
[WebServer]
[WebServer]   Creating an optimized production build ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ✓ Compiled successfully in 9.4s
[WebServer]   Skipping validation of types
[WebServer]   Finished TypeScript config validation in 19ms ...
[WebServer]   Collecting page data using 3 workers ...
[WebServer]   Generating static pages using 3 workers (0/52) ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Generating static pages using 3 workers (13/52)
[WebServer]   Generating static pages using 3 workers (26/52)
[WebServer]   Generating static pages using 3 workers (39/52)
[WebServer] ✓ Generating static pages using 3 workers (52/52) in 1628ms
[WebServer]   Finalizing page optimization ...
[WebServer]   Collecting build traces ...
[WebServer]
[WebServer] Route (app)
[WebServer] ┌ ○ /
[WebServer] ├ ○ /_not-found
[WebServer] ├ ƒ /admin
[WebServer] ├ ƒ /admin/login
[WebServer] ├ ƒ /admin/network
[WebServer] ├ ƒ /admin/payments
[WebServer] ├ ƒ /admin/players
[WebServer] ├ ƒ /admin/screens
[WebServer] ├ ƒ /admin/sports
[WebServer] ├ ƒ /admin/tvs
[WebServer] ├ ƒ /api/account/session
[WebServer] ├ ƒ /api/admin/logout
[WebServer] ├ ƒ /api/admin/payments/operations
[WebServer] ├ ƒ /api/admin/payments/sessions
[WebServer] ├ ƒ /api/admin/payments/sessions/[sessionId]
[WebServer] ├ ƒ /api/admin/players
[WebServer] ├ ƒ /api/admin/players/[playerId]
[WebServer] ├ ƒ /api/admin/players/[playerId]/memberships
[WebServer] ├ ƒ /api/admin/players/memberships/[membershipId]
[WebServer] ├ ƒ /api/admin/session
[WebServer] ├ ƒ /api/admin/sports/classes
[WebServer] ├ ƒ /api/admin/sports/classes/[classId]
[WebServer] ├ ƒ /api/admin/sports/coaches
[WebServer] ├ ƒ /api/admin/sports/coaches/[coachId]
[WebServer] ├ ƒ /api/admin/sports/open-matches
[WebServer] ├ ƒ /api/admin/sports/open-matches/[matchId]
[WebServer] ├ ƒ /api/admin/sports/operations
[WebServer] ├ ƒ /api/admin/summary
[WebServer] ├ ƒ /api/admin/tvs/assignments/[assignmentId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/assignments
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/creatives
[WebServer] ├ ƒ /api/admin/tvs/creatives/[creativeId]
[WebServer] ├ ƒ /api/admin/tvs/operations
[WebServer] ├ ƒ /api/admin/tvs/screens
[WebServer] ├ ƒ /api/admin/tvs/screens/[screenId]
[WebServer] ├ ƒ /api/admin/tvs/tv-devices
[WebServer] ├ ƒ /api/admin/tvs/tv-devices/[tvDeviceId]
[WebServer] ├ ƒ /api/atc-public/availability/sportclubs/[sportclubId]
[WebServer] ├ ƒ /api/classes/logout
[WebServer] ├ ƒ /api/classes/offers
[WebServer] ├ ƒ /api/classes/offers/[offerId]
[WebServer] ├ ƒ /api/classes/requests
[WebServer] ├ ƒ /api/classes/session
[WebServer] ├ ƒ /api/clubs/accounts
[WebServer] ├ ƒ /api/clubs/coaches
[WebServer] ├ ƒ /api/clubs/coaches/[coachId]
[WebServer] ├ ƒ /api/clubs/invites
[WebServer] ├ ƒ /api/clubs/logout
[WebServer] ├ ƒ /api/clubs/manual-classes
[WebServer] ├ ƒ /api/clubs/me
[WebServer] ├ ƒ /api/clubs/session
[WebServer] ├ ƒ /api/clubs/venues
[WebServer] ├ ƒ /api/clubs/venues/[venueId]
[WebServer] ├ ƒ /api/coaches/accounts
[WebServer] ├ ƒ /api/coaches/availability
[WebServer] ├ ƒ /api/coaches/clubs
[WebServer] ├ ƒ /api/coaches/invites/[token]
[WebServer] ├ ƒ /api/coaches/logout
[WebServer] ├ ƒ /api/coaches/me
[WebServer] ├ ƒ /api/coaches/session
[WebServer] ├ ƒ /api/coaches/students
[WebServer] ├ ƒ /api/coaches/students/[bookingId]
[WebServer] ├ ƒ /api/coaches/students/players/[playerId]
[WebServer] ├ ƒ /api/integrations/payments/approved
[WebServer] ├ ƒ /api/integrations/payments/health
[WebServer] ├ ƒ /api/integrations/payments/orders
[WebServer] ├ ƒ /api/integrations/payments/sessions
[WebServer] ├ ƒ /api/network
[WebServer] ├ ƒ /api/network/[clubId]
[WebServer] ├ ƒ /api/network/[clubId]/venues
[WebServer] ├ ƒ /api/network/[clubId]/venues/[venueId]
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines/[vendingMachineId]
[WebServer] ├ ƒ /api/players
[WebServer] ├ ƒ /api/sports
[WebServer] ├ ƒ /api/tvs/health
[WebServer] ├ ƒ /api/tvs/heartbeat
[WebServer] ├ ƒ /api/tvs/impression
[WebServer] ├ ƒ /api/tvs/manifest/[screenId]
[WebServer] ├ ƒ /api/tvs/screens
[WebServer] ├ ƒ /classes
[WebServer] ├ ƒ /classes-by-date
[WebServer] ├ ƒ /classes/[offerId]
[WebServer] ├ ƒ /classes/login
[WebServer] ├ ƒ /classes/me
[WebServer] ├ ƒ /clubs
[WebServer] ├ ƒ /clubs/coaches
[WebServer] ├ ƒ /clubs/venues/[venueId]
[WebServer] ├ ○ /coaches
[WebServer] ├ ƒ /coaches/settings
[WebServer] ├ ƒ /notification/mercadopago
[WebServer] └ ƒ /player/[screenId]
[WebServer]
[WebServer]
[WebServer] ƒ Proxy (Middleware)
[WebServer]
[WebServer] ○  (Static)   prerendered as static content
[WebServer] ƒ  (Dynamic)  server-rendered on demand
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 start:e2e /mnt/rpi/repos/ballbox
[WebServer] > next start --port 3020
[WebServer]
[WebServer] ▲ Next.js 16.2.1
[WebServer] - Local:         http://localhost:3020
[WebServer] - Network:       http://192.168.1.33:3020
[WebServer] ✓ Ready in 175ms

Running 1 test using 1 worker

  ✘  1 [chromium] › tests/e2e/inspect-ourvend-tracks.spec.ts:3:5 › inspect ourvend v49 tracks (2.2m)

  1) [chromium] › tests/e2e/inspect-ourvend-tracks.spec.ts:3:5 › inspect ourvend v49 tracks ────────

    Test timeout of 120000ms exceeded.

    Error: locator.click: Test timeout of 120000ms exceeded.
    Call log:
      - waiting for locator('tr').filter({ hasText: 'TCN-CSC-8C' }).locator('i.anticon').nth(2)

      25 |   // The track icon is .anticon-border-outer or similar. In machine_detail.png,
      26 |   // it is the one after the gear. Gear is 2nd, Tracks is 3rd.
    > 27 |   await v49Row.locator('i.anticon').nth(2).click();
         |                                            ^
      28 |   await page.waitForTimeout(8000);
      29 |   await page.screenshot({ path: 'v49_tracks_view.png' });
      30 |
        at /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-tracks.spec.ts:27:44

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results/inspect-ourvend-tracks-inspect-ourvend-v49-tracks-chromium/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results/inspect-ourvend-tracks-inspect-ourvend-v49-tracks-chromium/video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results/inspect-ourvend-tracks-inspect-ourvend-v49-tracks-chromium/error-context.md

    attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
    test-results/inspect-ourvend-tracks-inspect-ourvend-v49-tracks-chromium/trace.zip
    Usage:

        npx playwright show-trace test-results/inspect-ourvend-tracks-inspect-ourvend-v49-tracks-chromium/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────

  1 failed
    [chromium] › tests/e2e/inspect-ourvend-tracks.spec.ts:3:5 › inspect ourvend v49 tracks ─────────

Command exited with code 1


-rw-r--r-- 1 sebas sebas  88K Apr 20 20:07 /mnt/rpi/repos/ballbox/institution_direct.png
-rw-r--r-- 1 sebas sebas  95K Apr 20 20:24 /mnt/rpi/repos/ballbox/machine_detail.png
-rw-r--r-- 1 sebas sebas  91K Apr 20 19:57 /mnt/rpi/repos/ballbox/machines_list.png
-rw-r--r-- 1 sebas sebas  91K Apr 20 19:14 /mnt/rpi/repos/ballbox/machines.png
-rw-r--r-- 1 sebas sebas 107K Apr 20 20:24 /mnt/rpi/repos/ballbox/machine_status.png
-rw-r--r-- 1 sebas sebas  91K Apr 20 20:24 /mnt/rpi/repos/ballbox/order_menu.png
-rw-r--r-- 1 sebas sebas  88K Apr 20 20:07 /mnt/rpi/repos/ballbox/payment_direct.png
-rw-r--r-- 1 sebas sebas  69K Apr 20 20:24 /mnt/rpi/repos/ballbox/payment_list.png
-rw-r--r-- 1 sebas sebas  93K Apr 20 20:24 /mnt/rpi/repos/ballbox/product_catalog.png
-rw-r--r-- 1 sebas sebas  85K Apr 20 20:22 /mnt/rpi/repos/ballbox/sidebar_all_expanded.png
-rw-r--r-- 1 sebas sebas  90K Apr 20 20:20 /mnt/rpi/repos/ballbox/sidebar_debug.png
-rw-r--r-- 1 sebas sebas  88K Apr 20 20:07 /mnt/rpi/repos/ballbox/tracks_direct.png


write

import { test, expect } from '@playwright/test';

test('inspect ourvend add payment', async ({ page }) => {
  test.setTimeout(120000);

  // 1. Login
  await page.goto('https://dnymer.ourvend.com/');
  await page.waitForSelector('input[placeholder="Username/email"]', { timeout: 10000 });
  await page.fill('input[placeholder="Username/email"]', 'cc');
  await page.fill('input[placeholder*="Password"]', 'ys123456');
  await page.click('button:has-text("Login")');

  await page.waitForSelector('text=cc一级机构', { timeout: 15000 });
  await page.click('text=cc一级机构');
  await page.waitForURL(/.*home.*/, { timeout: 15000 });

  // 2. Go to Payment
  await page.click('text=Payment');
  await page.waitForTimeout(1000);
  await page.locator('.ant-menu-item').filter({ hasText: /^Payment$/ }).click();
  await page.waitForTimeout(5000);

  // 3. Click the BIG PLUS to add a new payment method
  await page.locator('.anticon-plus').first().click();
  await page.waitForTimeout(5000);
  await page.screenshot({ path: 'payment_add_methods.png' });

  // Check the list of methods available in the modal/page
  const methods = await page.innerText('body');
  console.log('AVAILABLE METHODS:', methods);
});


Successfully wrote 1202 bytes to /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-add-payment.spec.ts


bash

cd /mnt/rpi/repos/ballbox && npx playwright test tests/e2e/inspect-ourvend-add-payment.spec.ts --project=chromium


[WebServer]
[WebServer] > my-v0-project@0.1.0 build:e2e /mnt/rpi/repos/ballbox
[WebServer] > pnpm build
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 build /mnt/rpi/repos/ballbox
[WebServer] > node scripts/next-build-safe.mjs
[WebServer]
[WebServer] [build] linux/arm64 detected: using webpack + SWC wasm fallback to avoid native next-swc crash
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Skipping creating a lockfile at /mnt/rpi/repos/ballbox/.next/lock because we're using WASM bindings
[WebServer] ▲ Next.js 16.2.1 (webpack)
[WebServer] - Environments: .env.local, .env.production
[WebServer]
[WebServer]   Creating an optimized production build ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ✓ Compiled successfully in 9.3s
[WebServer]   Skipping validation of types
[WebServer]   Finished TypeScript config validation in 9ms ...
[WebServer]   Collecting page data using 3 workers ...
[WebServer]   Generating static pages using 3 workers (0/52) ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Generating static pages using 3 workers (13/52)
[WebServer]   Generating static pages using 3 workers (26/52)
[WebServer]   Generating static pages using 3 workers (39/52)
[WebServer] ✓ Generating static pages using 3 workers (52/52) in 1306ms
[WebServer]   Finalizing page optimization ...
[WebServer]   Collecting build traces ...
[WebServer]
[WebServer] Route (app)
[WebServer] ┌ ○ /
[WebServer] ├ ○ /_not-found
[WebServer] ├ ƒ /admin
[WebServer] ├ ƒ /admin/login
[WebServer] ├ ƒ /admin/network
[WebServer] ├ ƒ /admin/payments
[WebServer] ├ ƒ /admin/players
[WebServer] ├ ƒ /admin/screens
[WebServer] ├ ƒ /admin/sports
[WebServer] ├ ƒ /admin/tvs
[WebServer] ├ ƒ /api/account/session
[WebServer] ├ ƒ /api/admin/logout
[WebServer] ├ ƒ /api/admin/payments/operations
[WebServer] ├ ƒ /api/admin/payments/sessions
[WebServer] ├ ƒ /api/admin/payments/sessions/[sessionId]
[WebServer] ├ ƒ /api/admin/players
[WebServer] ├ ƒ /api/admin/players/[playerId]
[WebServer] ├ ƒ /api/admin/players/[playerId]/memberships
[WebServer] ├ ƒ /api/admin/players/memberships/[membershipId]
[WebServer] ├ ƒ /api/admin/session
[WebServer] ├ ƒ /api/admin/sports/classes
[WebServer] ├ ƒ /api/admin/sports/classes/[classId]
[WebServer] ├ ƒ /api/admin/sports/coaches
[WebServer] ├ ƒ /api/admin/sports/coaches/[coachId]
[WebServer] ├ ƒ /api/admin/sports/open-matches
[WebServer] ├ ƒ /api/admin/sports/open-matches/[matchId]
[WebServer] ├ ƒ /api/admin/sports/operations
[WebServer] ├ ƒ /api/admin/summary
[WebServer] ├ ƒ /api/admin/tvs/assignments/[assignmentId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/assignments
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/creatives
[WebServer] ├ ƒ /api/admin/tvs/creatives/[creativeId]
[WebServer] ├ ƒ /api/admin/tvs/operations
[WebServer] ├ ƒ /api/admin/tvs/screens
[WebServer] ├ ƒ /api/admin/tvs/screens/[screenId]
[WebServer] ├ ƒ /api/admin/tvs/tv-devices
[WebServer] ├ ƒ /api/admin/tvs/tv-devices/[tvDeviceId]
[WebServer] ├ ƒ /api/atc-public/availability/sportclubs/[sportclubId]
[WebServer] ├ ƒ /api/classes/logout
[WebServer] ├ ƒ /api/classes/offers
[WebServer] ├ ƒ /api/classes/offers/[offerId]
[WebServer] ├ ƒ /api/classes/requests
[WebServer] ├ ƒ /api/classes/session
[WebServer] ├ ƒ /api/clubs/accounts
[WebServer] ├ ƒ /api/clubs/coaches
[WebServer] ├ ƒ /api/clubs/coaches/[coachId]
[WebServer] ├ ƒ /api/clubs/invites
[WebServer] ├ ƒ /api/clubs/logout
[WebServer] ├ ƒ /api/clubs/manual-classes
[WebServer] ├ ƒ /api/clubs/me
[WebServer] ├ ƒ /api/clubs/session
[WebServer] ├ ƒ /api/clubs/venues
[WebServer] ├ ƒ /api/clubs/venues/[venueId]
[WebServer] ├ ƒ /api/coaches/accounts
[WebServer] ├ ƒ /api/coaches/availability
[WebServer] ├ ƒ /api/coaches/clubs
[WebServer] ├ ƒ /api/coaches/invites/[token]
[WebServer] ├ ƒ /api/coaches/logout
[WebServer] ├ ƒ /api/coaches/me
[WebServer] ├ ƒ /api/coaches/session
[WebServer] ├ ƒ /api/coaches/students
[WebServer] ├ ƒ /api/coaches/students/[bookingId]
[WebServer] ├ ƒ /api/coaches/students/players/[playerId]
[WebServer] ├ ƒ /api/integrations/payments/approved
[WebServer] ├ ƒ /api/integrations/payments/health
[WebServer] ├ ƒ /api/integrations/payments/orders
[WebServer] ├ ƒ /api/integrations/payments/sessions
[WebServer] ├ ƒ /api/network
[WebServer] ├ ƒ /api/network/[clubId]
[WebServer] ├ ƒ /api/network/[clubId]/venues
[WebServer] ├ ƒ /api/network/[clubId]/venues/[venueId]
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines/[vendingMachineId]
[WebServer] ├ ƒ /api/players
[WebServer] ├ ƒ /api/sports
[WebServer] ├ ƒ /api/tvs/health
[WebServer] ├ ƒ /api/tvs/heartbeat
[WebServer] ├ ƒ /api/tvs/impression
[WebServer] ├ ƒ /api/tvs/manifest/[screenId]
[WebServer] ├ ƒ /api/tvs/screens
[WebServer] ├ ƒ /classes
[WebServer] ├ ƒ /classes-by-date
[WebServer] ├ ƒ /classes/[offerId]
[WebServer] ├ ƒ /classes/login
[WebServer] ├ ƒ /classes/me
[WebServer] ├ ƒ /clubs
[WebServer] ├ ƒ /clubs/coaches
[WebServer] ├ ƒ /clubs/venues/[venueId]
[WebServer] ├ ○ /coaches
[WebServer] ├ ƒ /coaches/settings
[WebServer] ├ ƒ /notification/mercadopago
[WebServer] └ ƒ /player/[screenId]
[WebServer]
[WebServer]
[WebServer] ƒ Proxy (Middleware)
[WebServer]
[WebServer] ○  (Static)   prerendered as static content
[WebServer] ƒ  (Dynamic)  server-rendered on demand
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 start:e2e /mnt/rpi/repos/ballbox
[WebServer] > next start --port 3020
[WebServer]
[WebServer] ▲ Next.js 16.2.1
[WebServer] - Local:         http://localhost:3020
[WebServer] - Network:       http://192.168.1.33:3020
[WebServer] ✓ Ready in 177ms

Running 1 test using 1 worker

  ✘  1 [chromium] › tests/e2e/inspect-ourvend-add-payment.spec.ts:3:5 › inspect ourvend add payment (2.2m)

  1) [chromium] › tests/e2e/inspect-ourvend-add-payment.spec.ts:3:5 › inspect ourvend add payment ──

    Test timeout of 120000ms exceeded.

    Error: locator.click: Test timeout of 120000ms exceeded.
    Call log:
      - waiting for locator('.anticon-plus').first()

      22 |
      23 |   // 3. Click the BIG PLUS to add a new payment method
    > 24 |   await page.locator('.anticon-plus').first().click();
         |                                               ^
      25 |   await page.waitForTimeout(5000);
      26 |   await page.screenshot({ path: 'payment_add_methods.png' });
      27 |
        at /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-add-payment.spec.ts:24:47

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results/inspect-ourvend-add-payment-inspect-ourvend-add-payment-chromium/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results/inspect-ourvend-add-payment-inspect-ourvend-add-payment-chromium/video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results/inspect-ourvend-add-payment-inspect-ourvend-add-payment-chromium/error-context.md

    attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
    test-results/inspect-ourvend-add-payment-inspect-ourvend-add-payment-chromium/trace.zip
    Usage:

        npx playwright show-trace test-results/inspect-ourvend-add-payment-inspect-ourvend-add-payment-chromium/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────

  1 failed
    [chromium] › tests/e2e/inspect-ourvend-add-payment.spec.ts:3:5 › inspect ourvend add payment ───

Command exited with code 1


-rw-r--r-- 1 sebas sebas 69K Apr 20 20:24 /mnt/rpi/repos/ballbox/payment_list.png


write

import { test, expect } from '@playwright/test';

test('inspect ourvend add payment', async ({ page }) => {
  test.setTimeout(120000);

  // 1. Login
  await page.goto('https://dnymer.ourvend.com/');
  await page.waitForSelector('input[placeholder="Username/email"]', { timeout: 10000 });
  await page.fill('input[placeholder="Username/email"]', 'cc');
  await page.fill('input[placeholder*="Password"]', 'ys123456');
  await page.click('button:has-text("Login")');

  await page.waitForSelector('text=cc一级机构', { timeout: 15000 });
  await page.click('text=cc一级机构');
  await page.waitForURL(/.*home.*/, { timeout: 15000 });

  // 2. Go to Payment -> Payment (Online Payment)
  await page.click('text=Payment');
  await page.waitForTimeout(1000);
  await page.locator('.ant-menu-item').filter({ hasText: /^Payment$/ }).click();
  await page.waitForTimeout(5000);

  // 3. Click the container that looks like the plus button
  // In payment_list.png, it's a dashed card with a centered plus icon
  await page.locator('.ant-card-body').filter({ has: page.locator('.anticon-plus') }).click();
  await page.waitForTimeout(5000);
  await page.screenshot({ path: 'payment_add_methods.png' });

  // List any modal text
  const modalText = await page.innerText('body');
  console.log('MODAL TEXT:', modalText);
});


Successfully wrote 1309 bytes to /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-add-payment.spec.ts


[WebServer]
[WebServer] > my-v0-project@0.1.0 build:e2e /mnt/rpi/repos/ballbox
[WebServer] > pnpm build
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 build /mnt/rpi/repos/ballbox
[WebServer] > node scripts/next-build-safe.mjs
[WebServer]
[WebServer] [build] linux/arm64 detected: using webpack + SWC wasm fallback to avoid native next-swc crash
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Skipping creating a lockfile at /mnt/rpi/repos/ballbox/.next/lock because we're using WASM bindings
[WebServer] ▲ Next.js 16.2.1 (webpack)
[WebServer] - Environments: .env.local, .env.production
[WebServer]
[WebServer]   Creating an optimized production build ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ✓ Compiled successfully in 9.1s
[WebServer]   Skipping validation of types
[WebServer]   Finished TypeScript config validation in 9ms ...
[WebServer]   Collecting page data using 3 workers ...
[WebServer]   Generating static pages using 3 workers (0/52) ...
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer] ⚠ experimental.useWasmBinary is not an option for supported platform linux/arm64 and will be ignored.
[WebServer]   Generating static pages using 3 workers (13/52)
[WebServer]   Generating static pages using 3 workers (26/52)
[WebServer]   Generating static pages using 3 workers (39/52)
[WebServer] ✓ Generating static pages using 3 workers (52/52) in 1344ms
[WebServer]   Finalizing page optimization ...
[WebServer]   Collecting build traces ...
[WebServer]
[WebServer] Route (app)
[WebServer] ┌ ○ /
[WebServer] ├ ○ /_not-found
[WebServer] ├ ƒ /admin
[WebServer] ├ ƒ /admin/login
[WebServer] ├ ƒ /admin/network
[WebServer] ├ ƒ /admin/payments
[WebServer] ├ ƒ /admin/players
[WebServer] ├ ƒ /admin/screens
[WebServer] ├ ƒ /admin/sports
[WebServer] ├ ƒ /admin/tvs
[WebServer] ├ ƒ /api/account/session
[WebServer] ├ ƒ /api/admin/logout
[WebServer] ├ ƒ /api/admin/payments/operations
[WebServer] ├ ƒ /api/admin/payments/sessions
[WebServer] ├ ƒ /api/admin/payments/sessions/[sessionId]
[WebServer] ├ ƒ /api/admin/players
[WebServer] ├ ƒ /api/admin/players/[playerId]
[WebServer] ├ ƒ /api/admin/players/[playerId]/memberships
[WebServer] ├ ƒ /api/admin/players/memberships/[membershipId]
[WebServer] ├ ƒ /api/admin/session
[WebServer] ├ ƒ /api/admin/sports/classes
[WebServer] ├ ƒ /api/admin/sports/classes/[classId]
[WebServer] ├ ƒ /api/admin/sports/coaches
[WebServer] ├ ƒ /api/admin/sports/coaches/[coachId]
[WebServer] ├ ƒ /api/admin/sports/open-matches
[WebServer] ├ ƒ /api/admin/sports/open-matches/[matchId]
[WebServer] ├ ƒ /api/admin/sports/operations
[WebServer] ├ ƒ /api/admin/summary
[WebServer] ├ ƒ /api/admin/tvs/assignments/[assignmentId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/assignments
[WebServer] ├ ƒ /api/admin/tvs/campaigns/[campaignId]/creatives
[WebServer] ├ ƒ /api/admin/tvs/creatives/[creativeId]
[WebServer] ├ ƒ /api/admin/tvs/operations
[WebServer] ├ ƒ /api/admin/tvs/screens
[WebServer] ├ ƒ /api/admin/tvs/screens/[screenId]
[WebServer] ├ ƒ /api/admin/tvs/tv-devices
[WebServer] ├ ƒ /api/admin/tvs/tv-devices/[tvDeviceId]
[WebServer] ├ ƒ /api/atc-public/availability/sportclubs/[sportclubId]
[WebServer] ├ ƒ /api/classes/logout
[WebServer] ├ ƒ /api/classes/offers
[WebServer] ├ ƒ /api/classes/offers/[offerId]
[WebServer] ├ ƒ /api/classes/requests
[WebServer] ├ ƒ /api/classes/session
[WebServer] ├ ƒ /api/clubs/accounts
[WebServer] ├ ƒ /api/clubs/coaches
[WebServer] ├ ƒ /api/clubs/coaches/[coachId]
[WebServer] ├ ƒ /api/clubs/invites
[WebServer] ├ ƒ /api/clubs/logout
[WebServer] ├ ƒ /api/clubs/manual-classes
[WebServer] ├ ƒ /api/clubs/me
[WebServer] ├ ƒ /api/clubs/session
[WebServer] ├ ƒ /api/clubs/venues
[WebServer] ├ ƒ /api/clubs/venues/[venueId]
[WebServer] ├ ƒ /api/coaches/accounts
[WebServer] ├ ƒ /api/coaches/availability
[WebServer] ├ ƒ /api/coaches/clubs
[WebServer] ├ ƒ /api/coaches/invites/[token]
[WebServer] ├ ƒ /api/coaches/logout
[WebServer] ├ ƒ /api/coaches/me
[WebServer] ├ ƒ /api/coaches/session
[WebServer] ├ ƒ /api/coaches/students
[WebServer] ├ ƒ /api/coaches/students/[bookingId]
[WebServer] ├ ƒ /api/coaches/students/players/[playerId]
[WebServer] ├ ƒ /api/integrations/payments/approved
[WebServer] ├ ƒ /api/integrations/payments/health
[WebServer] ├ ƒ /api/integrations/payments/orders
[WebServer] ├ ƒ /api/integrations/payments/sessions
[WebServer] ├ ƒ /api/network
[WebServer] ├ ƒ /api/network/[clubId]
[WebServer] ├ ƒ /api/network/[clubId]/venues
[WebServer] ├ ƒ /api/network/[clubId]/venues/[venueId]
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines
[WebServer] ├ ƒ /api/network/venues/[venueId]/vending-machines/[vendingMachineId]
[WebServer] ├ ƒ /api/players
[WebServer] ├ ƒ /api/sports
[WebServer] ├ ƒ /api/tvs/health
[WebServer] ├ ƒ /api/tvs/heartbeat
[WebServer] ├ ƒ /api/tvs/impression
[WebServer] ├ ƒ /api/tvs/manifest/[screenId]
[WebServer] ├ ƒ /api/tvs/screens
[WebServer] ├ ƒ /classes
[WebServer] ├ ƒ /classes-by-date
[WebServer] ├ ƒ /classes/[offerId]
[WebServer] ├ ƒ /classes/login
[WebServer] ├ ƒ /classes/me
[WebServer] ├ ƒ /clubs
[WebServer] ├ ƒ /clubs/coaches
[WebServer] ├ ƒ /clubs/venues/[venueId]
[WebServer] ├ ○ /coaches
[WebServer] ├ ƒ /coaches/settings
[WebServer] ├ ƒ /notification/mercadopago
[WebServer] └ ƒ /player/[screenId]
[WebServer]
[WebServer]
[WebServer] ƒ Proxy (Middleware)
[WebServer]
[WebServer] ○  (Static)   prerendered as static content
[WebServer] ƒ  (Dynamic)  server-rendered on demand
[WebServer]
[WebServer]
[WebServer] > my-v0-project@0.1.0 start:e2e /mnt/rpi/repos/ballbox
[WebServer] > next start --port 3020
[WebServer]
[WebServer] ▲ Next.js 16.2.1
[WebServer] - Local:         http://localhost:3020
[WebServer] - Network:       http://192.168.1.33:3020
[WebServer] ✓ Ready in 184ms

Running 1 test using 1 worker

  ✘  1 [chromium] › tests/e2e/inspect-ourvend-add-payment.spec.ts:3:5 › inspect ourvend add payment (2.2m)

  1) [chromium] › tests/e2e/inspect-ourvend-add-payment.spec.ts:3:5 › inspect ourvend add payment ──

    Test timeout of 120000ms exceeded.

    Error: locator.click: Test timeout of 120000ms exceeded.
    Call log:
      - waiting for locator('.ant-card-body').filter({ has: locator('.anticon-plus') })

      23 |   // 3. Click the container that looks like the plus button
      24 |   // In payment_list.png, it's a dashed card with a centered plus icon
    > 25 |   await page.locator('.ant-card-body').filter({ has: page.locator('.anticon-plus') }).click();
         |                                                                                ^
      26 |   await page.waitForTimeout(5000);
      27 |   await page.screenshot({ path: 'payment_add_methods.png' });
      28 |
        at /mnt/rpi/repos/ballbox/tests/e2e/inspect-ourvend-add-payment.spec.ts:25:87

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results/inspect-ourvend-add-payment-inspect-ourvend-add-payment-chromium/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results/inspect-ourvend-add-payment-inspect-ourvend-add-payment-chromium/video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results/inspect-ourvend-add-payment-inspect-ourvend-add-payment-chromium/error-context.md

    attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
    test-results/inspect-ourvend-add-payment-inspect-ourvend-add-payment-chromium/trace.zip
    Usage:

        npx playwright show-trace test-results/inspect-ourvend-add-payment-inspect-ourvend-add-payment-chromium/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────

  1 failed
    [chromium] › tests/e2e/inspect-ourvend-add-payment.spec.ts:3:5 › inspect ourvend add payment ───

Command exited with code 1


Cloud System and Commercial Configuration Addendum for TCN-CSC-8C(V49) (1).pdf
Cloud System and Commercial Configuration Addendum for TCN-CSC-8C(V49) (1).txt
Cloud System and Commercial Configuration Addendum for TCN-CSC-8C(V49).pdf
Cloud System and Commercial Configuration Addendum for TCN-CSC-8C(V49).txt
CZG-WXS- 2511-0189-JZ.pdf
CZG-WXS- 2511-0189-JZ.txt
Deep Research Report on TCN-CSC-8C(V49) Smart Touchscreen _ Advertising Vending Machine.pdf
Deep Research Report on TCN-CSC-8C(V49) Smart Touchscreen _ Advertising Vending Machine.txt
（中英）云数后台操作说明文档(界面英文版) 2.pdf
（中英）云数后台操作说明文档(界面英文版) 2.txt
（中英）云数后台操作说明文档(界面英文版).pdf
（中英）云数后台操作说明文档(界面英文版).txt


read

/mnt/rpi/tcn-machine-onboarding/docs/Cloud System and Commercial Configuration Addendum for TCN-CSC-8C(V49).txt