diff --git a/.rooignore b/.rooignore deleted file mode 100644 index 1bff8ddf8..000000000 --- a/.rooignore +++ /dev/null @@ -1,2 +0,0 @@ -html-dumps -apps/companion/debug-screenshots \ No newline at end of file diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 000000000..5755751a8 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,20 @@ +# Roadmap + +## IRacing Selectors Update (2025-11-27) + +**Summary:** Fixed 15 selectors against [`html-dumps-optimized/iracing-hosted-sessions/`](html-dumps-optimized/iracing-hosted-sessions/) dumps per [`IRacingSelectors-update-plan.md`](packages/infrastructure/adapters/automation/IRacingSelectors-update-plan.md). + +**Key changes:** +- Critical (adminList → step-specific tables; sliders → label-proximity) +- Recommended (chakra- prefixes, label~inputs) +- BLOCKED_SELECTORS unchanged/safe. + +**Verification:** +- 4 unit tests green in [`IRacingSelectors.test.ts`](packages/infrastructure/adapters/automation/IRacingSelectors.test.ts) +- Debug verified 70+ matches across 18 dumps. + +**Artifacts:** +- [`IRacingSelectors-update-plan.md`](packages/infrastructure/adapters/automation/IRacingSelectors-update-plan.md) +- updated comments in [`IRacingSelectors.ts`](packages/infrastructure/adapters/automation/IRacingSelectors.ts) "VERIFIED against html-dumps-optimized 2025-11-27" + +**Next:** E2E automation integration. \ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-09-21-564Z.html b/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-09-21-564Z.html deleted file mode 100644 index e85fbd94a..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-09-21-564Z.html +++ /dev/null @@ -1,384 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 2

Event StartEst time leftNameTrackCarsSessionsSetup
09:46
1:36:54

Man Up

Paul R Bryan
Lincoln Speedway

DSC360

P
5/200

-

11:03
1:14:22

joel t

Joel Antees
Mount Panorama Circuit
11 Cars
PQR
14/3026

-

23:12
1:03:45

grip it rip it series practice

Mickey Cardoza
New Hampshire Motor Speedway
Road Course with North Oval
9 Cars
P
0/600

-

10:00
0:50:59

AES practice

Jared Eastman
Circuit des 24 Heures du Mans
24 Heures du Mans
7 Cars
P
0/600

-

09:55
0:46:52

slowcap

Nick Arnold
Circuit des 24 Heures du Mans
24 Heures du Mans

BMWGT4

P
0/50

-

10:50
0:41:00

MSUK Futures FP1

Hosted Williamsf1
Brands Hatch Circuit
Grand Prix

MGT3E

P
7/610
10:40
0:31:38

GT Endurance Series by Simucube

Brendan Ortner
Watkins Glen International
Boot
11 Cars
P
3/600

-

10:40
0:31:11

BMD Practice

Desslin Van Gurp
Watkins Glen International
Boot
2 Cars
P
2/600

-

10:36
0:27:47

Watkins Glen Training by corr4do

Corri Corrado
Watkins Glen International
Boot
11 Cars
P
16/600

-

09:34
0:25:45

TRITON Racing Academy

Dawid Nowakowski
Misano World Circuit Marco Simoncelli
Grand Prix

SFL324

P
2/600

-

Rows per page

1-10

of 19

of 2

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot -
-
-
- - ❌ Failed at step 14 -
-
-
-
-
-
- 🌅 Configuring time of day... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-37-42-797Z.html b/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-37-42-797Z.html deleted file mode 100644 index bf042c850..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-37-42-797Z.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 3

Event StartEst time leftNameTrackCarsSessionsSetup
11:23
1:45:42

GT Sprint Twitch saroza_88

Sergejs Zagorskis
Watkins Glen International
Boot
11 Cars
P
5/500

-

09:46
1:08:33

Man Up

Paul R Bryan
Lincoln Speedway

DSC360

P
3/200

-

11:27
0:50:06

Hack City

Romeo Nasr
Mount Panorama Circuit

GR86

P
3/620

-

11:25
0:48:34

harris

Darsyn Harris
Long Beach Street Circuit

KIAOPT

P
5/620

-

11:24
0:47:08

V8 Praci

Darrel O'Sullivan
Autodromo Nazionale Monza
Grand Prix
3 Cars
P
2/40

-

11:03
0:46:01

joel t

Joel Antees
Mount Panorama Circuit
11 Cars
PQR
29/3026

-

11:15
0:38:02

Lemans Practice

Angus Cozzie
Circuit des 24 Heures du Mans
24 Heures du Mans

LJSP

P
3/620

-

11:14
0:37:29

Falken practice

Ryszard Marszewski
Circuit des 24 Heures du Mans
24 Heures du Mans
7 Cars
P
4/620

-

23:12
0:35:24

grip it rip it series practice

Mickey Cardoza
New Hampshire Motor Speedway
Road Course with North Oval
9 Cars
P
0/600

-

10:00
0:22:38

AES practice

Jared Eastman
Circuit des 24 Heures du Mans
24 Heures du Mans
7 Cars
P
0/600

-

Rows per page

1-10

of 21

of 3

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot - -
-
-
- - ❌ Failed at step 14 -
-
-
-
-
-
- 🌅 Configuring time of day... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-55-45-012Z.html b/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-55-45-012Z.html deleted file mode 100644 index 5679098b4..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-55-45-012Z.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 3

Event StartEst time leftNameTrackCarsSessionsSetup
11:47
1:52:28

Supercars Series - Australian Server Only

Tao Soerono
WeatherTech Raceway at Laguna Seca
Full Course
2 Cars
P
2/320

-

11:42
1:47:11

Jung IMSA Prac

Mikel Nitsche
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
6/500

-

11:23
1:27:40

GT Sprint Twitch saroza_88

Sergejs Zagorskis
Watkins Glen International
Boot
11 Cars
P
11/500

-

09:46
0:50:31

Man Up

Paul R Bryan
Lincoln Speedway

DSC360

P
1/200

-

11:44
0:48:34

imsa

Paris L Boukouvalas
Nürburgring Grand-Prix-Strecke
BES/WEC
11 Cars
P
1/620

-

11:42
0:46:59

gt3

Rachael Mortimer
Mount Panorama Circuit
11 Cars
P
2/620

-

11:43
0:33:07

STONECOLC RACING MONZA SFL PRAC and mini race

Luke Keamy
Autodromo Nazionale Monza
Grand Prix

SFL324

PQR
2/620
11:27
0:32:04

Hack City

Romeo Nasr
Mount Panorama Circuit

GR86

P
3/620

-

11:25
0:30:32

harris

Darsyn Harris
Long Beach Street Circuit

KIAOPT

P
6/620

-

11:24
0:29:06

V8 Praci

Darrel O'Sullivan
Autodromo Nazionale Monza
Grand Prix
3 Cars
P
2/40

-

Rows per page

1-10

of 22

of 3

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot - -
-
-
- - ❌ Failed at step 14 -
-
-
-
-
-
- 🌅 Configuring time of day... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-58-37-442Z.html b/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-58-37-442Z.html deleted file mode 100644 index fd1d9acdf..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T10-58-37-442Z.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 3

Event StartEst time leftNameTrackCarsSessionsSetup
11:55
1:56:38

MSUK Futures FP2

Hosted Williamsf1
Brands Hatch Circuit
Grand Prix

MGT3E

P
0/610

-

11:47
1:49:35

Supercars Series - Australian Server Only

Tao Soerono
WeatherTech Raceway at Laguna Seca
Full Course
2 Cars
P
4/320

-

11:42
1:44:18

Jung IMSA Prac

Mikel Nitsche
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
6/500

-

11:23
1:24:47

GT Sprint Twitch saroza_88

Sergejs Zagorskis
Watkins Glen International
Boot
11 Cars
P
10/500

-

09:46
0:47:38

Man Up

Paul R Bryan
Lincoln Speedway

DSC360

P
1/200

-

11:44
0:45:41

imsa

Paris L Boukouvalas
Nürburgring Grand-Prix-Strecke
BES/WEC
11 Cars
P
1/620

-

11:42
0:44:06

gt3

Rachael Mortimer
Mount Panorama Circuit
11 Cars
P
3/620

-

11:43
0:30:14

STONECOLC RACING MONZA SFL PRAC and mini race

Luke Keamy
Autodromo Nazionale Monza
Grand Prix

SFL324

PQR
2/620
11:27
0:29:11

Hack City

Romeo Nasr
Mount Panorama Circuit

GR86

P
4/620

-

11:25
0:27:39

harris

Darsyn Harris
Long Beach Street Circuit

KIAOPT

P
6/620

-

Rows per page

1-10

of 21

of 3

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot - -
-
-
- - ❌ Failed at step 14 -
-
-
-
-
-
- 🌅 Configuring time of day... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T11-09-11-136Z.html b/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T11-09-11-136Z.html deleted file mode 100644 index b0e748ed0..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T11-09-11-136Z.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 3

Event StartEst time leftNameTrackCarsSessionsSetup
11:55
1:46:04

MSUK Futures FP2

Hosted Williamsf1
Brands Hatch Circuit
Grand Prix

MGT3E

P
4/610

-

11:47
1:39:01

Supercars Series - Australian Server Only

Tao Soerono
WeatherTech Raceway at Laguna Seca
Full Course
2 Cars
P
7/320

-

11:42
1:33:44

Jung IMSA Prac

Mikel Nitsche
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
11/500

-

11:23
1:14:13

GT Sprint Twitch saroza_88

Sergejs Zagorskis
Watkins Glen International
Boot
11 Cars
P
15/500

-

11:59
0:50:08

VRS 1:1 Coaching

Jamie Fluke
Nürburgring Grand-Prix-Strecke
BES/WEC

AMGT3

P
2/620

-

09:46
0:37:04

Man Up

Paul R Bryan
Lincoln Speedway

DSC360

P
1/200

-

11:44
0:35:07

imsa

Paris L Boukouvalas
Nürburgring Grand-Prix-Strecke
BES/WEC
11 Cars
P
1/620

-

11:42
0:33:32

gt3

Rachael Mortimer
Mount Panorama Circuit
11 Cars
P
3/620

-

11:58
0:20:01

dig

Cody Metcalfe
Huset's Speedway

DSC410

PQR
3/600

-

11:43
0:19:40

STONECOLC RACING MONZA SFL PRAC and mini race

Luke Keamy
Autodromo Nazionale Monza
Grand Prix

SFL324

PQR
3/620

Rows per page

1-10

of 21

of 3

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot - -
-
-
- - ❌ Failed at step 14 -
-
-
-
-
-
- 🌅 Configuring time of day... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T12-17-24-507Z.html b/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T12-17-24-507Z.html deleted file mode 100644 index a4062af33..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-14-2025-11-24T12-17-24-507Z.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 2

Event StartEst time leftNameTrackCarsSessionsSetup
13:06
1:49:25

DGR GT Endurance Series by Simucube practice

Daigoro Sato
Watkins Glen International
Boot
11 Cars
P
32/6030

-

13:02
1:46:01

jesse

Tero Vettenranta
Daytona International Speedway
Road Course
16 Cars
P
1/620

-

12:33
1:16:47

SimSpeds

Declan O'Brien2
Okayama International Circuit
Full Course
16 Cars
P
4/620

-

12:29
1:12:13

IMSA Sportscar Endurance Challenge

Anton Schenk2
Circuit des 24 Heures du Mans
24 Heures du Mans
7 Cars
P
4/400

-

13:10
0:53:22

ChaseSaxillllllllllld

Chris R Mitchell
Charlotte Motor Speedway
Roval 2025

GR86

P
2/600

-

11:55
0:37:51

MSUK Futures FP2

Hosted Williamsf1
Brands Hatch Circuit
Grand Prix

MGT3E

P
9/610

-

11:47
0:30:48

Supercars Series - Australian Server Only

Tao Soerono
WeatherTech Raceway at Laguna Seca
Full Course
2 Cars
P
6/320

-

11:42
0:25:31

Jung IMSA Prac

Mikel Nitsche
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
18/500

-

12:33
0:16:26

#1 Bernardo Faria Coaching

Bernardo Faria
Sebring International Raceway
International

P992

P
2/620

-

12:28
0:11:28

kerbs

Ken Munro
Circuit de Spa-Francorchamps
Endurance
16 Cars
P
7/602

-

Rows per page

1-10

of 15

of 2

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot - -
-
-
- - ❌ Failed at step 14 -
-
-
-
-
-
- 🌅 Configuring time of day... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-15-2025-11-24T12-21-44-342Z.html b/apps/companion/debug-screenshots/debug-error-step-15-2025-11-24T12-21-44-342Z.html deleted file mode 100644 index 155d04df2..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-15-2025-11-24T12-21-44-342Z.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 2

Event StartEst time leftNameTrackCarsSessionsSetup
13:06
1:45:05

DGR GT Endurance Series by Simucube practice

Daigoro Sato
Watkins Glen International
Boot
11 Cars
P
33/6030

-

13:02
1:41:41

jesse

Tero Vettenranta
Daytona International Speedway
Road Course
16 Cars
P
0/620

-

12:33
1:12:27

SimSpeds

Declan O'Brien2
Okayama International Circuit
Full Course
16 Cars
P
4/620

-

12:29
1:07:53

IMSA Sportscar Endurance Challenge

Anton Schenk2
Circuit des 24 Heures du Mans
24 Heures du Mans
7 Cars
P
4/400

-

13:10
0:49:02

ChaseSaxillllllllllld

Chris R Mitchell
Charlotte Motor Speedway
Roval 2025

GR86

P
2/600

-

11:55
0:33:31

MSUK Futures FP2

Hosted Williamsf1
Brands Hatch Circuit
Grand Prix

MGT3E

P
9/610

-

11:47
0:26:28

Supercars Series - Australian Server Only

Tao Soerono
WeatherTech Raceway at Laguna Seca
Full Course
2 Cars
P
6/320

-

11:42
0:21:11

Jung IMSA Prac

Mikel Nitsche
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
18/500

-

12:33
0:12:06

#1 Bernardo Faria Coaching

Bernardo Faria
Sebring International Raceway
International

P992

P
2/620

-

12:28
0:07:08

kerbs

Ken Munro
Circuit de Spa-Francorchamps
Endurance
16 Cars
P
7/602

-

Rows per page

1-10

of 15

of 2

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot - -
-
-
- - ❌ Failed at step 15 -
-
-
-
-
-
- 🌤️ Setting weather conditions... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-16-2025-11-24T12-27-29-633Z.html b/apps/companion/debug-screenshots/debug-error-step-16-2025-11-24T12-27-29-633Z.html deleted file mode 100644 index a5dc07e2d..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-16-2025-11-24T12-27-29-633Z.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 2

Event StartEst time leftNameTrackCarsSessionsSetup
13:06
1:39:20

DGR GT Endurance Series by Simucube practice

Daigoro Sato
Watkins Glen International
Boot
11 Cars
P
34/6030

-

13:02
1:35:56

jesse

Tero Vettenranta
Daytona International Speedway
Road Course
16 Cars
P
0/620

-

12:33
1:06:42

SimSpeds

Declan O'Brien2
Okayama International Circuit
Full Course
16 Cars
P
4/620

-

12:29
1:02:08

IMSA Sportscar Endurance Challenge

Anton Schenk2
Circuit des 24 Heures du Mans
24 Heures du Mans
7 Cars
P
5/400

-

13:22
0:55:21

GT Sprint Series by Simucube | Race Forge eSports

David Grannes
Watkins Glen International
Boot
11 Cars
P
0/600

-

13:10
0:43:17

ChaseSaxillllllllllld

Chris R Mitchell
Charlotte Motor Speedway
Roval 2025

GR86

P
2/600

-

11:55
0:27:46

MSUK Futures FP2

Hosted Williamsf1
Brands Hatch Circuit
Grand Prix

MGT3E

P
9/610

-

11:47
0:20:43

Supercars Series - Australian Server Only

Tao Soerono
WeatherTech Raceway at Laguna Seca
Full Course
2 Cars
P
6/320

-

11:42
0:15:26

Jung IMSA Prac

Mikel Nitsche
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
17/500

-

12:33
0:06:21

#1 Bernardo Faria Coaching

Bernardo Faria
Sebring International Raceway
International

P992

P
2/620

-

Rows per page

1-10

of 15

of 2

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot - -
-
-
- - ❌ Failed at step 16 -
-
-
-
-
-
- 🏁 Finalizing race options... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-17-2025-11-24T12-31-05-706Z.html b/apps/companion/debug-screenshots/debug-error-step-17-2025-11-24T12-31-05-706Z.html deleted file mode 100644 index 39489587f..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-17-2025-11-24T12-31-05-706Z.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 2

Event StartEst time leftNameTrackCarsSessionsSetup
13:06
1:35:44

DGR GT Endurance Series by Simucube practice

Daigoro Sato
Watkins Glen International
Boot
11 Cars
P
34/6030

-

13:02
1:32:20

jesse

Tero Vettenranta
Daytona International Speedway
Road Course
16 Cars
P
0/620

-

12:33
1:03:06

SimSpeds

Declan O'Brien2
Okayama International Circuit
Full Course
16 Cars
P
4/620

-

12:29
0:58:32

IMSA Sportscar Endurance Challenge

Anton Schenk2
Circuit des 24 Heures du Mans
24 Heures du Mans
7 Cars
P
6/400

-

13:22
0:51:45

GT Sprint Series by Simucube | Race Forge eSports

David Grannes
Watkins Glen International
Boot
11 Cars
P
2/600

-

13:10
0:39:41

ChaseSaxillllllllllld

Chris R Mitchell
Charlotte Motor Speedway
Roval 2025

GR86

P
2/600

-

11:55
0:24:10

MSUK Futures FP2

Hosted Williamsf1
Brands Hatch Circuit
Grand Prix

MGT3E

P
9/610

-

11:47
0:17:07

Supercars Series - Australian Server Only

Tao Soerono
WeatherTech Raceway at Laguna Seca
Full Course
2 Cars
P
6/320

-

11:42
0:11:50

Jung IMSA Prac

Mikel Nitsche
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
15/500

-

12:33
0:02:45

#1 Bernardo Faria Coaching

Bernardo Faria
Sebring International Raceway
International

P992

P
2/620

-

Rows per page

1-10

of 15

of 2

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot - -
-
-
- - ❌ Failed at step 17 -
-
-
-
-
-
- 👥 Setting up team driving... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-17-2025-11-24T12-53-45-994Z.html b/apps/companion/debug-screenshots/debug-error-step-17-2025-11-24T12-53-45-994Z.html deleted file mode 100644 index 92b28212f..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-17-2025-11-24T12-53-45-994Z.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 2

Event StartEst time leftNameTrackCarsSessionsSetup
13:41
1:48:49

Goodfellas Zolder

Henrie Koolen
Circuit Zolder
Grand Prix

P217

P
2/620

-

13:06
1:13:04

DGR GT Endurance Series by Simucube practice

Daigoro Sato
Watkins Glen International
Boot
11 Cars
P
34/6030

-

13:02
1:09:40

jesse

Tero Vettenranta
Daytona International Speedway
Road Course
16 Cars
P
0/620

-

12:33
0:40:26

SimSpeds

Declan O'Brien2
Okayama International Circuit
Full Course
16 Cars
P
5/620

-

13:30
0:36:34

BMD Practice

Desslin Van Gurp
Watkins Glen International
Boot
2 Cars
P
2/600

-

12:29
0:35:52

IMSA Sportscar Endurance Challenge

Anton Schenk2
Circuit des 24 Heures du Mans
24 Heures du Mans
7 Cars
P
7/400

-

13:22
0:29:05

GT Sprint Series by Simucube | Race Forge eSports

David Grannes
Watkins Glen International
Boot
11 Cars
P
4/600

-

13:10
0:17:01

ChaseSaxillllllllllld

Chris R Mitchell
Charlotte Motor Speedway
Roval 2025

GR86

P
2/600

-

11:55
0:01:30

MSUK Futures FP2

Hosted Williamsf1
Brands Hatch Circuit
Grand Prix

MGT3E

P
9/610

-

12:28
Closed

kerbs

Ken Munro
Circuit de Spa-Francorchamps
Endurance
16 Cars
P
5/602

-

Rows per page

1-10

of 11

of 2

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot - -
-
-
- - ❌ Failed at step 17 -
-
-
-
-
-
- 👥 Setting up team driving... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-17-2025-11-24T13-27-29-861Z.html b/apps/companion/debug-screenshots/debug-error-step-17-2025-11-24T13-27-29-861Z.html deleted file mode 100644 index 224742ce2..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-17-2025-11-24T13-27-29-861Z.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 2

Event StartEst time leftNameTrackCarsSessionsSetup
14:15
1:48:21

INDYCAR Oval - Fixed Test

David Strid
Kansas Speedway
Oval

IR18

P
1/260

-

13:41
1:15:04

Goodfellas Zolder

Henrie Koolen
Circuit Zolder
Grand Prix

P217

P
2/620

-

14:20
0:53:54

BCC Practice

Rayden Cao
Watkins Glen International
Boot
11 Cars
P
1/200
14:16
0:49:17

GT Sprint Series by Simucube | Race Forge eSports

David Grannes
Watkins Glen International
Boot
11 Cars
P
8/600

-

13:06
0:39:19

DGR GT Endurance Series by Simucube practice

Daigoro Sato
Watkins Glen International
Boot
11 Cars
P
33/6030

-

13:02
0:35:55

jesse

Tero Vettenranta
Daytona International Speedway
Road Course
16 Cars
P
0/620

-

12:33
0:06:41

SimSpeds

Declan O'Brien2
Okayama International Circuit
Full Course
16 Cars
P
4/620

-

13:30
0:02:49

BMD Practice

Desslin Van Gurp
Watkins Glen International
Boot
2 Cars
P
2/600

-

12:29
0:02:07

IMSA Sportscar Endurance Challenge

Anton Schenk2
Circuit des 24 Heures du Mans
24 Heures du Mans
7 Cars
P
6/400

-

14:05
Closed

Carolina Cobbs

Kirt Burrell
The Dirt Track at Charlotte

SSD

PQR
0/430

Rows per page

1-10

of 12

of 2

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot - -
-
-
- - ❌ Failed at step 17 -
-
-
-
-
-
- ✅ Done! Review your settings and click 'Host Race' to create your session! - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-07-26-093Z.png b/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-07-26-093Z.png deleted file mode 100644 index 8d6ced6ba..000000000 Binary files a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-07-26-093Z.png and /dev/null differ diff --git a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-20-51-107Z.png b/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-20-51-107Z.png deleted file mode 100644 index b61408acf..000000000 Binary files a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-20-51-107Z.png and /dev/null differ diff --git a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-41-23-758Z.html b/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-41-23-758Z.html deleted file mode 100644 index a1c970549..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-41-23-758Z.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - - - - - - -

You are not logged in.

- - - - - - - - - - - - - - - - - - - - - - - -
- - - \ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-41-23-758Z.png b/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-41-23-758Z.png deleted file mode 100644 index 79f1e2655..000000000 Binary files a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-41-23-758Z.png and /dev/null differ diff --git a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-46-24-597Z.html b/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-46-24-597Z.html deleted file mode 100644 index 4969b53d3..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-46-24-597Z.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - - - - - - -

You are not logged in.

- - - - - - - - - - - - - - - - - - - - - - - -
- - - \ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-46-24-597Z.png b/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-46-24-597Z.png deleted file mode 100644 index 887a710b8..000000000 Binary files a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-46-24-597Z.png and /dev/null differ diff --git a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-53-25-021Z.html b/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-53-25-021Z.html deleted file mode 100644 index e68a5f70e..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-53-25-021Z.html +++ /dev/null @@ -1,467 +0,0 @@ - - - - - - - - - - - - - - - - - -

You are not logged in.

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot -
- -
-
-
-
- - ❌ Failed at step 2 -
-
-
-
-
-
- 🏁 Creating your race session... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-53-25-021Z.png b/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-53-25-021Z.png deleted file mode 100644 index 16bd1f88c..000000000 Binary files a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-53-25-021Z.png and /dev/null differ diff --git a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-55-39-783Z.html b/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-55-39-783Z.html deleted file mode 100644 index 5931cb7a5..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-55-39-783Z.html +++ /dev/null @@ -1,467 +0,0 @@ - - - - - - - - - - - - - - - - - -

You are not logged in.

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
- - GridPilot -
- -
-
-
-
- - ❌ Failed at step 2 -
-
-
-
-
-
- 🏁 Creating your race session... - Stopped -
-
-
🔧 Check the error and try again.
-
- -
-
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-55-39-783Z.png b/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-55-39-783Z.png deleted file mode 100644 index 279f8c585..000000000 Binary files a/apps/companion/debug-screenshots/debug-error-step-2-2025-11-24T16-55-39-783Z.png and /dev/null differ diff --git a/apps/companion/debug-screenshots/debug-error-step-8-2025-11-23T23-58-05-501Z.html b/apps/companion/debug-screenshots/debug-error-step-8-2025-11-23T23-58-05-501Z.html deleted file mode 100644 index f5039b8a1..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-8-2025-11-23T23-58-05-501Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 12

Event StartEst time leftNameTrackCarsSessionsSetup
23:12
11:15:02

grip it rip it series practice

Mickey Cardoza
New Hampshire Motor Speedway
Road Course with North Oval
9 Cars
P
0/600

-

22:15
9:17:40

grip it aND RIP IT SERIES

Parker Malone
New Hampshire Motor Speedway
Road Course
14 Cars
P
0/600

-

00:14
7:17:10

nn bn nbbhvhhghvtn

Timothy S Smith
Huset's Speedway

DSC410

P
0/600

-

00:14
7:16:41

nn bn nbbhvhhghvtn

Timothy S Smith
Huset's Speedway

DSC410

P
3/600

-

15:21
5:23:18

IMSA iRacing Series - Fixed

Vincent Hamel2
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
3/500

-

23:55
4:57:28

Formula C - Super Formula Lights by Ready Set Sim

Robert Ridgway
Long Beach Street Circuit

SFL324

P
0/620

-

21:44
4:47:13

DIRL Practice Session

Chris Goldsmith
Road Atlanta
Full Course

FMGT4

P
1/620
22:29
3:31:39

Sonoma Practice

Jack Dixon2
Sonoma Raceway
Cup Short
3 Cars
P
5/600
00:10
2:42:24

dan N Z

Zach Mitchell3
Nürburgring Nordschleife
Industriefahrten

919

PQR
2/600

-

23:30
2:32:42

SEMASPA

Sean Nelson4
Circuit de Spa-Francorchamps
Endurance
16 Cars
P
4/600

-

Rows per page

1-10

of 115

of 12

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-error-step-9-2025-11-23T23-44-18-383Z.html b/apps/companion/debug-screenshots/debug-error-step-9-2025-11-23T23-44-18-383Z.html deleted file mode 100644 index 9e0c1da98..000000000 --- a/apps/companion/debug-screenshots/debug-error-step-9-2025-11-23T23-44-18-383Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 12

Event StartEst time leftNameTrackCarsSessionsSetup
23:12
11:28:49

grip it rip it series practice

Mickey Cardoza
New Hampshire Motor Speedway
Road Course with North Oval
9 Cars
P
1/600

-

22:15
9:31:27

grip it aND RIP IT SERIES

Parker Malone
New Hampshire Motor Speedway
Road Course
14 Cars
P
0/600

-

00:14
7:30:57

nn bn nbbhvhhghvtn

Timothy S Smith
Huset's Speedway

DSC410

P
0/600

-

00:14
7:30:28

nn bn nbbhvhhghvtn

Timothy S Smith
Huset's Speedway

DSC410

P
2/600

-

15:21
5:37:05

IMSA iRacing Series - Fixed

Vincent Hamel2
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
3/500

-

23:55
5:11:15

Formula C - Super Formula Lights by Ready Set Sim

Robert Ridgway
Long Beach Street Circuit

SFL324

P
1/620

-

21:44
5:01:00

DIRL Practice Session

Chris Goldsmith
Road Atlanta
Full Course

FMGT4

P
1/620
22:29
3:45:26

Sonoma Practice

Jack Dixon2
Sonoma Raceway
Cup Short
3 Cars
P
6/600
00:10
2:56:11

dan N Z

Zach Mitchell3
Nürburgring Nordschleife
Industriefahrten

919

PQR
2/600

-

23:30
2:46:29

SEMASPA

Sean Nelson4
Circuit de Spa-Francorchamps
Endurance
16 Cars
P
4/600

-

Rows per page

1-10

of 111

of 12

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-step-2-2025-11-23T21-12-30-744Z.html b/apps/companion/debug-screenshots/debug-step-2-2025-11-23T21-12-30-744Z.html deleted file mode 100644 index dc7127bcc..000000000 --- a/apps/companion/debug-screenshots/debug-step-2-2025-11-23T21-12-30-744Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-step-2-2025-11-23T21-34-09-513Z.html b/apps/companion/debug-screenshots/debug-step-2-2025-11-23T21-34-09-513Z.html deleted file mode 100644 index 30017634d..000000000 --- a/apps/companion/debug-screenshots/debug-step-2-2025-11-23T21-34-09-513Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-step-2-2025-11-23T21-45-42-561Z.html b/apps/companion/debug-screenshots/debug-step-2-2025-11-23T21-45-42-561Z.html deleted file mode 100644 index cda07cfd7..000000000 --- a/apps/companion/debug-screenshots/debug-step-2-2025-11-23T21-45-42-561Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-step-2-2025-11-23T22-32-59-961Z.html b/apps/companion/debug-screenshots/debug-step-2-2025-11-23T22-32-59-961Z.html deleted file mode 100644 index 176aa73e6..000000000 --- a/apps/companion/debug-screenshots/debug-step-2-2025-11-23T22-32-59-961Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 11

Event StartEst time leftNameTrackCarsSessionsSetup
23:12
12:40:07

grip it rip it series practice

Mickey Cardoza
New Hampshire Motor Speedway
Road Course with North Oval
9 Cars
P
2/600

-

22:15
10:42:45

grip it aND RIP IT SERIES

Parker Malone
New Hampshire Motor Speedway
Road Course
14 Cars
P
0/600

-

15:21
6:48:23

IMSA iRacing Series - Fixed

Vincent Hamel2
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
3/500

-

21:44
6:12:18

DIRL Practice Session

Chris Goldsmith
Road Atlanta
Full Course

FMGT4

P
1/620
22:29
4:56:44

Sonoma Practice

Jack Dixon2
Sonoma Raceway
Cup Short
3 Cars
P
4/600
23:30
3:57:47

SEMASPA

Sean Nelson4
Circuit de Spa-Francorchamps
Endurance
16 Cars
P
0/600

-

16:57
3:24:31

LionGP eSports - Practice

Yusuf Eroglu2
Watkins Glen International
Boot
11 Cars
P
0/600

-

23:28
2:56:21

nathan ERC

Nathan Scott Murru
Oulton Park Circuit
International

F4

P
0/400

-

23:00
2:27:17

Daytona 24hr Practice

Jordan Missig
Daytona International Speedway
Road Course
16 Cars
P
11/620

-

21:59
2:26:24

jvb motorsport

Jack Van Bennekom
Circuit de Spa-Francorchamps
Grand Prix Pits
16 Cars
P
4/600

-

Rows per page

1-10

of 107

of 11

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-step-3-2025-11-23T21-54-21-844Z.html b/apps/companion/debug-screenshots/debug-step-3-2025-11-23T21-54-21-844Z.html deleted file mode 100644 index 6ee66e5ff..000000000 --- a/apps/companion/debug-screenshots/debug-step-3-2025-11-23T21-54-21-844Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 13

Event StartEst time leftNameTrackCarsSessionsSetup
22:15
11:21:23

grip it aND RIP IT SERIES

Parker Malone
New Hampshire Motor Speedway
Road Course
14 Cars
P
2/600

-

15:21
7:27:01

IMSA iRacing Series - Fixed

Vincent Hamel2
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
3/500

-

21:44
6:50:56

DIRL Practice Session

Chris Goldsmith
Road Atlanta
Full Course

FMGT4

P
0/620
22:29
5:35:22

Sonoma Practice

Jack Dixon2
Sonoma Raceway
Cup Short
3 Cars
P
1/600
16:57
4:03:09

LionGP eSports - Practice

Yusuf Eroglu2
Watkins Glen International
Boot
11 Cars
P
0/600

-

21:59
3:05:02

jvb motorsport

Jack Van Bennekom
Circuit de Spa-Francorchamps
Grand Prix Pits
16 Cars
P
4/600

-

15:22
2:28:30

ORBSR Test

Red Bull Sim Racing
Brands Hatch Circuit
Grand Prix

GR22

P
31/6128
21:22
2:28:21

Vesta GT4

Pierre Ferrari
Circuit de Spa-Francorchamps
Grand Prix Pits
8 Cars
P
4/600

-

21:05
2:11:21

SpeedRanch

Tanner Tomasi
The Dirt Track at Charlotte

DLM438

P
5/620

-

10:00
2:06:06

Lotus 49 Grand Prix Legends

Gary Ho
Circuit des 24 Heures du Mans
24 Heures du Mans

L49

P
6/500

-

Rows per page

1-10

of 121

of 13

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-step-3-2025-11-23T21-58-34-119Z.html b/apps/companion/debug-screenshots/debug-step-3-2025-11-23T21-58-34-119Z.html deleted file mode 100644 index 937b4142d..000000000 --- a/apps/companion/debug-screenshots/debug-step-3-2025-11-23T21-58-34-119Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 13

Event StartEst time leftNameTrackCarsSessionsSetup
22:15
11:17:11

grip it aND RIP IT SERIES

Parker Malone
New Hampshire Motor Speedway
Road Course
14 Cars
P
2/600

-

15:21
7:22:49

IMSA iRacing Series - Fixed

Vincent Hamel2
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
3/500

-

21:44
6:46:44

DIRL Practice Session

Chris Goldsmith
Road Atlanta
Full Course

FMGT4

P
0/620
22:29
5:31:10

Sonoma Practice

Jack Dixon2
Sonoma Raceway
Cup Short
3 Cars
P
1/600
16:57
3:58:57

LionGP eSports - Practice

Yusuf Eroglu2
Watkins Glen International
Boot
11 Cars
P
0/600

-

21:59
3:00:50

jvb motorsport

Jack Van Bennekom
Circuit de Spa-Francorchamps
Grand Prix Pits
16 Cars
P
4/600

-

15:22
2:24:18

ORBSR Test

Red Bull Sim Racing
Brands Hatch Circuit
Grand Prix

GR22

P
31/6128
21:22
2:24:09

Vesta GT4

Pierre Ferrari
Circuit de Spa-Francorchamps
Grand Prix Pits
8 Cars
P
4/600

-

21:05
2:07:09

SpeedRanch

Tanner Tomasi
The Dirt Track at Charlotte

DLM438

P
5/620

-

10:00
2:01:54

Lotus 49 Grand Prix Legends

Gary Ho
Circuit des 24 Heures du Mans
24 Heures du Mans

L49

P
6/500

-

Rows per page

1-10

of 122

of 13

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-step-3-2025-11-23T22-13-10-615Z.html b/apps/companion/debug-screenshots/debug-step-3-2025-11-23T22-13-10-615Z.html deleted file mode 100644 index d1e0e0437..000000000 --- a/apps/companion/debug-screenshots/debug-step-3-2025-11-23T22-13-10-615Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 12

Event StartEst time leftNameTrackCarsSessionsSetup
22:15
11:02:34

grip it aND RIP IT SERIES

Parker Malone
New Hampshire Motor Speedway
Road Course
14 Cars
P
0/600

-

15:21
7:08:12

IMSA iRacing Series - Fixed

Vincent Hamel2
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
3/500

-

21:44
6:32:07

DIRL Practice Session

Chris Goldsmith
Road Atlanta
Full Course

FMGT4

P
0/620
22:29
5:16:33

Sonoma Practice

Jack Dixon2
Sonoma Raceway
Cup Short
3 Cars
P
2/600
16:57
3:44:20

LionGP eSports - Practice

Yusuf Eroglu2
Watkins Glen International
Boot
11 Cars
P
0/600

-

23:00
2:47:06

Daytona 24hr Practice

Jordan Missig
Daytona International Speedway
Road Course
16 Cars
P
3/620

-

21:59
2:46:13

jvb motorsport

Jack Van Bennekom
Circuit de Spa-Francorchamps
Grand Prix Pits
16 Cars
P
4/600

-

15:22
2:09:41

ORBSR Test

Red Bull Sim Racing
Brands Hatch Circuit
Grand Prix

GR22

P
31/6128
21:22
2:09:32

Vesta GT4

Pierre Ferrari
Circuit de Spa-Francorchamps
Grand Prix Pits
8 Cars
P
4/600

-

23:07
1:54:33

nfg1

Thomas Davis10
Knoxville Raceway

BBM

P
2/600

-

Rows per page

1-10

of 113

of 12

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-step-6-2025-11-23T22-44-03-014Z.html b/apps/companion/debug-screenshots/debug-step-6-2025-11-23T22-44-03-014Z.html deleted file mode 100644 index ffd170881..000000000 --- a/apps/companion/debug-screenshots/debug-step-6-2025-11-23T22-44-03-014Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 11

Event StartEst time leftNameTrackCarsSessionsSetup
23:12
12:29:04

grip it rip it series practice

Mickey Cardoza
New Hampshire Motor Speedway
Road Course with North Oval
9 Cars
P
3/600

-

22:15
10:31:42

grip it aND RIP IT SERIES

Parker Malone
New Hampshire Motor Speedway
Road Course
14 Cars
P
0/600

-

15:21
6:37:20

IMSA iRacing Series - Fixed

Vincent Hamel2
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
3/500

-

21:44
6:01:15

DIRL Practice Session

Chris Goldsmith
Road Atlanta
Full Course

FMGT4

P
2/620
22:29
4:45:41

Sonoma Practice

Jack Dixon2
Sonoma Raceway
Cup Short
3 Cars
P
3/600
23:30
3:46:44

SEMASPA

Sean Nelson4
Circuit de Spa-Francorchamps
Endurance
16 Cars
P
5/600

-

16:57
3:13:28

LionGP eSports - Practice

Yusuf Eroglu2
Watkins Glen International
Boot
11 Cars
P
0/600

-

23:28
2:45:18

nathan ERC

Nathan Scott Murru
Oulton Park Circuit
International

F4

P
1/400

-

23:00
2:16:14

Daytona 24hr Practice

Jordan Missig
Daytona International Speedway
Road Course
16 Cars
P
12/620

-

21:59
2:15:21

jvb motorsport

Jack Van Bennekom
Circuit de Spa-Francorchamps
Grand Prix Pits
16 Cars
P
5/600

-

Rows per page

1-10

of 102

of 11

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-step-6-2025-11-23T22-49-07-674Z.html b/apps/companion/debug-screenshots/debug-step-6-2025-11-23T22-49-07-674Z.html deleted file mode 100644 index ecb864edc..000000000 --- a/apps/companion/debug-screenshots/debug-step-6-2025-11-23T22-49-07-674Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 10

Event StartEst time leftNameTrackCarsSessionsSetup
23:12
12:23:59

grip it rip it series practice

Mickey Cardoza
New Hampshire Motor Speedway
Road Course with North Oval
9 Cars
P
1/600

-

22:15
10:26:37

grip it aND RIP IT SERIES

Parker Malone
New Hampshire Motor Speedway
Road Course
14 Cars
P
0/600

-

15:21
6:32:15

IMSA iRacing Series - Fixed

Vincent Hamel2
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
3/500

-

21:44
5:56:10

DIRL Practice Session

Chris Goldsmith
Road Atlanta
Full Course

FMGT4

P
2/620
22:29
4:40:36

Sonoma Practice

Jack Dixon2
Sonoma Raceway
Cup Short
3 Cars
P
3/600
23:30
3:41:39

SEMASPA

Sean Nelson4
Circuit de Spa-Francorchamps
Endurance
16 Cars
P
5/600

-

16:57
3:08:23

LionGP eSports - Practice

Yusuf Eroglu2
Watkins Glen International
Boot
11 Cars
P
0/600

-

23:28
2:40:13

nathan ERC

Nathan Scott Murru
Oulton Park Circuit
International

F4

P
1/400

-

23:00
2:11:09

Daytona 24hr Practice

Jordan Missig
Daytona International Speedway
Road Course
16 Cars
P
12/620

-

21:59
2:10:16

jvb motorsport

Jack Van Bennekom
Circuit de Spa-Francorchamps
Grand Prix Pits
16 Cars
P
5/600

-

Rows per page

1-10

of 99

of 10

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/apps/companion/debug-screenshots/debug-step-9-2025-11-23T22-55-02-160Z.html b/apps/companion/debug-screenshots/debug-step-9-2025-11-23T22-55-02-160Z.html deleted file mode 100644 index 1ee64a2c5..000000000 --- a/apps/companion/debug-screenshots/debug-step-9-2025-11-23T22-55-02-160Z.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - iRacing - - - - - -

Automatische Verlängerung beenden

Forum

Help

Settings

Quick Actions

Single Player

Time Attack
AI Single Player

More

Results & Stats
,,Replays

Hosted Racing

Community-led events hosted on official servers.

of 10

Event StartEst time leftNameTrackCarsSessionsSetup
23:12
12:18:04

grip it rip it series practice

Mickey Cardoza
New Hampshire Motor Speedway
Road Course with North Oval
9 Cars
P
1/600

-

22:15
10:20:42

grip it aND RIP IT SERIES

Parker Malone
New Hampshire Motor Speedway
Road Course
14 Cars
P
0/600

-

15:21
6:26:20

IMSA iRacing Series - Fixed

Vincent Hamel2
Nürburgring Grand-Prix-Strecke
BES/WEC
16 Cars
P
3/500

-

21:44
5:50:15

DIRL Practice Session

Chris Goldsmith
Road Atlanta
Full Course

FMGT4

P
2/620
22:29
4:34:41

Sonoma Practice

Jack Dixon2
Sonoma Raceway
Cup Short
3 Cars
P
5/600
23:30
3:35:44

SEMASPA

Sean Nelson4
Circuit de Spa-Francorchamps
Endurance
16 Cars
P
5/600

-

16:57
3:02:28

LionGP eSports - Practice

Yusuf Eroglu2
Watkins Glen International
Boot
11 Cars
P
0/600

-

23:28
2:34:18

nathan ERC

Nathan Scott Murru
Oulton Park Circuit
International

F4

P
1/400

-

23:00
2:05:14

Daytona 24hr Practice

Jordan Missig
Daytona International Speedway
Road Course
16 Cars
P
12/620

-

21:59
2:04:21

jvb motorsport

Jack Van Bennekom
Circuit de Spa-Francorchamps
Grand Prix Pits
16 Cars
P
5/600

-

Rows per page

1-10

of 95

of 10

- - - - - - - - - - - - - - - - - - - - - - - -
- - -
\ No newline at end of file diff --git a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-35-571Z.html b/debug-screenshots/debug-error-step-1-2025-11-24T19-35-35-571Z.html deleted file mode 100644 index 170718246..000000000 --- a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-35-571Z.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-35-571Z.png b/debug-screenshots/debug-error-step-1-2025-11-24T19-35-35-571Z.png deleted file mode 100644 index 6d360f6bb..000000000 Binary files a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-35-571Z.png and /dev/null differ diff --git a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-45-765Z.html b/debug-screenshots/debug-error-step-1-2025-11-24T19-35-45-765Z.html deleted file mode 100644 index 170718246..000000000 --- a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-45-765Z.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-45-765Z.png b/debug-screenshots/debug-error-step-1-2025-11-24T19-35-45-765Z.png deleted file mode 100644 index 6d360f6bb..000000000 Binary files a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-45-765Z.png and /dev/null differ diff --git a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-56-012Z.html b/debug-screenshots/debug-error-step-1-2025-11-24T19-35-56-012Z.html deleted file mode 100644 index 170718246..000000000 --- a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-56-012Z.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-56-012Z.png b/debug-screenshots/debug-error-step-1-2025-11-24T19-35-56-012Z.png deleted file mode 100644 index 6d360f6bb..000000000 Binary files a/debug-screenshots/debug-error-step-1-2025-11-24T19-35-56-012Z.png and /dev/null differ diff --git a/package-lock.json b/package-lock.json index 6dd249bad..e274b4e03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,12 +20,13 @@ "@playwright/test": "^1.40.0", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.0", + "@types/jsdom": "^27.0.0", "@types/node": "^24.10.1", "@vitest/ui": "^2.1.8", "cheerio": "^1.0.0", "commander": "^11.0.0", "husky": "^9.1.7", - "jsdom": "^27.2.0", + "jsdom": "^22.1.0", "playwright": "^1.57.0", "prettier": "^3.0.0", "puppeteer": "^24.31.0", @@ -97,13 +98,6 @@ } } }, - "node_modules/@acemir/cssom": { - "version": "0.9.24", - "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.24.tgz", - "integrity": "sha512-5YjgMmAiT2rjJZU7XK1SNI7iqTy92DpaYVgG6x63FxkJ11UpYfLndHJATtinWJClAXiOlW9XWaUyAQf8pMrQPg==", - "dev": true, - "license": "MIT" - }, "node_modules/@adobe/css-tools": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", @@ -111,61 +105,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@asamuzakjp/css-color": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.0.tgz", - "integrity": "sha512-9xiBAtLn4aNsa4mDnpovJvBn72tNEIACyvlqaNJ+ADemR+yeMJWnBudOi2qGDviJa7SwcDOU/TRh5dnET7qk0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "lru-cache": "^11.2.2" - } - }, - "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@asamuzakjp/dom-selector": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.4.tgz", - "integrity": "sha512-buQDjkm+wDPXd6c13534URWZqbz0RP5PAhXZ+LIoa5LgwInT9HVJvGIJivg75vi8I13CxDGdTnz+aY5YUJlIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@asamuzakjp/nwsapi": "^2.3.9", - "bidi-js": "^1.0.3", - "css-tree": "^3.1.0", - "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.2.2" - } - }, - "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@asamuzakjp/nwsapi": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", - "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -529,141 +468,6 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@csstools/color-helpers": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", - "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", - "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.1.0", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.17.tgz", - "integrity": "sha512-LCC++2h8pLUSPY+EsZmrrJ1EOUu+5iClpEiDhhdw3zRJpPbABML/N5lmRuBHjxtKm9VnRcsUzioyD0sekFMF0A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/@cucumber/ci-environment": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/@cucumber/ci-environment/-/ci-environment-10.0.1.tgz", @@ -2047,6 +1851,16 @@ } } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", @@ -2170,6 +1984,18 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/jsdom": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-27.0.0.tgz", + "integrity": "sha512-NZyFl/PViwKzdEkQg96gtnB8wm+1ljhdDay9ahn4hgb+SfVtPCbm3TlmDUFXTA+MGN3CijicnMhG18SI5H3rFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -2248,6 +2074,13 @@ "@types/node": "*" } }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", @@ -2394,6 +2227,14 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -2528,6 +2369,13 @@ "node": ">=4" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2644,16 +2492,6 @@ "node": ">=10.0.0" } }, - "node_modules/bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "require-from-string": "^2.0.2" - } - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -2785,6 +2623,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2929,19 +2781,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cheerio/node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/chromium-bidi": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-11.0.0.tgz", @@ -3077,6 +2916,19 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", @@ -3170,20 +3022,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, "node_modules/css-what": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", @@ -3205,18 +3043,16 @@ "license": "MIT" }, "node_modules/cssstyle": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.3.tgz", - "integrity": "sha512-OytmFH+13/QXONJcC75QNdMtKpceNk3u8ThBjyyYjkEcy/ekBwR1mMAuNvi3gdBPW3N5TlCzQ0WZw8H0lN/bDw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^4.0.3", - "@csstools/css-syntax-patches-for-csstree": "^1.0.14", - "css-tree": "^3.1.0" + "rrweb-cssom": "^0.6.0" }, "engines": { - "node": ">=20" + "node": ">=14" } }, "node_modules/csstype": { @@ -3236,17 +3072,28 @@ } }, "node_modules/data-urls": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz", - "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", "dev": true, "license": "MIT", "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^15.0.0" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" }, "engines": { - "node": ">=20" + "node": ">=14" + } + }, + "node_modules/data-urls/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" } }, "node_modules/debug": { @@ -3383,6 +3230,16 @@ "node": ">= 14" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -3466,6 +3323,20 @@ ], "license": "BSD-2-Clause" }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", @@ -3497,6 +3368,21 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3625,7 +3511,6 @@ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" } @@ -3636,7 +3521,6 @@ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" } @@ -3648,6 +3532,35 @@ "dev": true, "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -4021,6 +3934,23 @@ "node": ">= 8" } }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -4057,6 +3987,16 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4076,6 +4016,45 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-tsconfig": { "version": "4.13.0", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", @@ -4183,7 +4162,6 @@ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" }, @@ -4260,6 +4238,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hosted-git-info": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", @@ -4281,16 +4301,29 @@ "license": "ISC" }, "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, "license": "MIT", "dependencies": { - "whatwg-encoding": "^3.1.1" + "whatwg-encoding": "^2.0.0" }, "engines": { - "node": ">=18" + "node": ">=12" + } + }, + "node_modules/html-encoding-sniffer/node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" } }, "node_modules/htmlparser2": { @@ -4620,38 +4653,41 @@ } }, "node_modules/jsdom": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.2.0.tgz", - "integrity": "sha512-454TI39PeRDW1LgpyLPyURtB4Zx1tklSr6+OFOipsxGUH1WMTvk6C65JQdrj455+DP2uJ1+veBEHTGFKWVLFoA==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", "dev": true, "license": "MIT", "dependencies": { - "@acemir/cssom": "^0.9.23", - "@asamuzakjp/dom-selector": "^6.7.4", - "cssstyle": "^5.3.3", - "data-urls": "^6.0.0", - "decimal.js": "^10.6.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.6", + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "parse5": "^8.0.0", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^6.0.0", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^8.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^15.1.0", - "ws": "^8.18.3", - "xml-name-validator": "^5.0.0" + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": ">=16" }, "peerDependencies": { - "canvas": "^3.0.0" + "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { @@ -4659,6 +4695,71 @@ } } }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -4901,12 +5002,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, - "license": "CC0-1.0" + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, "node_modules/merge-deep": { "version": "3.0.3", @@ -4935,6 +5039,29 @@ "node": ">=10.0.0" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -5140,6 +5267,13 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nwsapi": { + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", + "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", + "dev": true, + "license": "MIT" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5264,9 +5398,9 @@ } }, "node_modules/parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", - "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, "license": "MIT", "dependencies": { @@ -5290,19 +5424,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/parse5-parser-stream": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", @@ -5316,19 +5437,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parse5-parser-stream/node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -5625,6 +5733,19 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", @@ -5826,6 +5947,13 @@ } } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -5980,15 +6108,12 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, "node_modules/resolve-alpn": { "version": "1.2.1", @@ -6150,6 +6275,13 @@ "fsevents": "~2.3.2" } }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true, + "license": "MIT" + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -6780,26 +6912,6 @@ "node": ">=14.0.0" } }, - "node_modules/tldts": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.19.tgz", - "integrity": "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tldts-core": "^7.0.19" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", - "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", - "dev": true, - "license": "MIT" - }, "node_modules/toposort": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", @@ -6818,29 +6930,42 @@ } }, "node_modules/tough-cookie": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", - "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "tldts": "^7.0.5" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { - "node": ">=16" + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" } }, "node_modules/tr46": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", - "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", "dev": true, "license": "MIT", "dependencies": { - "punycode": "^2.3.1" + "punycode": "^2.3.0" }, "engines": { - "node": ">=20" + "node": ">=14" } }, "node_modules/ts-node": { @@ -7460,6 +7585,17 @@ "tslib": "^2.0.3" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util-arity": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", @@ -7676,16 +7812,16 @@ } }, "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "license": "MIT", "dependencies": { - "xml-name-validator": "^5.0.0" + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=14" } }, "node_modules/webdriver-bidi-protocol": { @@ -7695,13 +7831,13 @@ "license": "Apache-2.0" }, "node_modules/webidl-conversions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz", - "integrity": "sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, "license": "BSD-2-Clause", "engines": { - "node": ">=20" + "node": ">=12" } }, "node_modules/whatwg-encoding": { @@ -7728,17 +7864,17 @@ } }, "node_modules/whatwg-url": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.1.0.tgz", - "integrity": "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", "dev": true, "license": "MIT", "dependencies": { - "tr46": "^6.0.0", - "webidl-conversions": "^8.0.0" + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=20" + "node": ">=14" } }, "node_modules/why-is-node-running": { @@ -7884,13 +8020,13 @@ } }, "node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=12" } }, "node_modules/xmlbuilder": { diff --git a/package.json b/package.json index a75915cc2..aaf879321 100644 --- a/package.json +++ b/package.json @@ -41,12 +41,13 @@ "@playwright/test": "^1.40.0", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.0", + "@types/jsdom": "^27.0.0", "@types/node": "^24.10.1", "@vitest/ui": "^2.1.8", "cheerio": "^1.0.0", "commander": "^11.0.0", "husky": "^9.1.7", - "jsdom": "^27.2.0", + "jsdom": "^22.1.0", "playwright": "^1.57.0", "prettier": "^3.0.0", "puppeteer": "^24.31.0", diff --git a/packages/domain/services/PageStateValidator.ts b/packages/domain/services/PageStateValidator.ts index b668c1e8b..b4ec503be 100644 --- a/packages/domain/services/PageStateValidator.ts +++ b/packages/domain/services/PageStateValidator.ts @@ -35,7 +35,7 @@ export interface PageStateValidationResult { export class PageStateValidator { /** * Validate that the page state matches expected conditions. - * + * * @param actualState Function that checks if selectors exist on the page * @param validation Expected page state configuration * @returns Result with validation outcome @@ -82,8 +82,135 @@ export class PageStateValidator { return Result.ok(result); } catch (error) { return Result.err( - error instanceof Error - ? error + error instanceof Error + ? error + : new Error(`Page state validation failed: ${String(error)}`) + ); + } + } + + /** + * Enhanced validation that tries multiple selector strategies for real iRacing HTML. + * This handles the mismatch between test expectations (data-indicator attributes) + * and real HTML structure (Chakra UI components). + * + * @param actualState Function that checks if selectors exist on the page + * @param validation Expected page state configuration + * @param realMode Whether we're in real mode (using real HTML dumps) or mock mode + * @returns Result with validation outcome + */ + validateStateEnhanced( + actualState: (selector: string) => boolean, + validation: PageStateValidation, + realMode: boolean = false + ): Result { + try { + const { expectedStep, requiredSelectors, forbiddenSelectors = [] } = validation; + + // In real mode, try to match the actual HTML structure with fallbacks + let selectorsToCheck = [...requiredSelectors]; + + if (realMode) { + // Add fallback selectors for real iRacing HTML (Chakra UI structure) + const fallbackMap: Record = { + cars: [ + '#set-cars', + '[id*="cars"]', + '.wizard-step[id*="cars"]', + '.cars-panel', + // Real iRacing fallbacks - use step container IDs + '[data-testid*="set-cars"]', + '.chakra-stack:has([data-testid*="cars"])', + ], + track: [ + '#set-track', + '[id*="track"]', + '.wizard-step[id*="track"]', + '.track-panel', + // Real iRacing fallbacks + '[data-testid*="set-track"]', + '.chakra-stack:has([data-testid*="track"])', + ], + 'add-car': [ + 'a.btn:has-text("Add a Car")', + '.btn:has-text("Add a Car")', + '[data-testid*="add-car"]', + // Real iRacing button selectors + 'a.btn.btn-primary.btn-block.btn-sm:has-text("Add a Car")', + ], + }; + + // For each required selector, add fallbacks + const enhancedSelectors: string[] = []; + for (const selector of requiredSelectors) { + enhancedSelectors.push(selector); + + // Add step-specific fallbacks + const lowerStep = expectedStep.toLowerCase(); + if (fallbackMap[lowerStep]) { + enhancedSelectors.push(...fallbackMap[lowerStep]); + } + + // Generic Chakra UI fallbacks for wizard steps + if (selector.includes('data-indicator')) { + enhancedSelectors.push( + `[id*="${expectedStep}"]`, + `[data-testid*="${expectedStep}"]`, + `.wizard-step:has([data-testid*="${expectedStep}"])`, + ); + } + } + + selectorsToCheck = enhancedSelectors; + } + + // Check required selectors are present (with fallbacks for real mode) + const missingSelectors = requiredSelectors.filter(selector => { + if (realMode) { + // In real mode, check if ANY of the enhanced selectors match + const relatedSelectors = selectorsToCheck.filter(s => + s.includes(expectedStep) || + s.includes(selector.replace(/[\[\]"']/g, '').replace('data-indicator=', '')) + ); + return !relatedSelectors.some(s => actualState(s)); + } + return !actualState(selector); + }); + + if (missingSelectors.length > 0) { + const result: PageStateValidationResult = { + isValid: false, + message: `Page state mismatch: Expected to be on "${expectedStep}" page but missing required elements`, + expectedStep, + missingSelectors + }; + return Result.ok(result); + } + + // Check forbidden selectors are absent + const unexpectedSelectors = forbiddenSelectors.filter(selector => actualState(selector)); + + if (unexpectedSelectors.length > 0) { + const result: PageStateValidationResult = { + isValid: false, + message: `Page state mismatch: Found unexpected elements on "${expectedStep}" page`, + expectedStep, + unexpectedSelectors + }; + return Result.ok(result); + } + + // All checks passed + const result: PageStateValidationResult = { + isValid: true, + message: `Page state valid for "${expectedStep}"`, + expectedStep + }; + return Result.ok(result); + } catch (error) { + return Result.err( + error instanceof Error + ? error : new Error(`Page state validation failed: ${String(error)}`) ); } diff --git a/packages/infrastructure/adapters/automation/FixtureServer.ts b/packages/infrastructure/adapters/automation/FixtureServer.ts index 79c9427b1..f279d71c5 100644 --- a/packages/infrastructure/adapters/automation/FixtureServer.ts +++ b/packages/infrastructure/adapters/automation/FixtureServer.ts @@ -14,22 +14,24 @@ export interface IFixtureServer { * Steps 2-17 map to the corresponding HTML fixture files. */ const STEP_TO_FIXTURE: Record = { - 2: 'step-02-hosted-racing.html', - 3: 'step-03-create-race.html', - 4: 'step-04-race-information.html', - 5: 'step-05-server-details.html', - 6: 'step-06-set-admins.html', - 7: 'step-07-time-limits.html', // Time Limits wizard step - 8: 'step-08-set-cars.html', // Set Cars wizard step - 9: 'step-09-add-car-modal.html', // Add Car modal - 10: 'step-10-set-car-classes.html', // Set Car Classes - 11: 'step-11-set-track.html', // Set Track wizard step (CORRECTED) - 12: 'step-12-add-track-modal.html', // Add Track modal - 13: 'step-13-track-options.html', - 14: 'step-14-time-of-day.html', - 15: 'step-15-weather.html', - 16: 'step-16-race-options.html', - 17: 'step-17-track-conditions.html', + 1: '01-hosted-racing.html', + 2: '02-create-a-race.html', + 3: '03-race-information.html', + 4: '04-server-details.html', + 5: '05-set-admins.html', + 6: '06-add-an-admin.html', + 7: '07-time-limits.html', + 8: '08-set-cars.html', + 9: '09-add-a-car.html', + 10: '10-set-car-classes.html', + 11: '11-set-track.html', + 12: '12-add-a-track.html', + 13: '13-track-options.html', + 14: '14-time-of-day.html', + 15: '15-weather.html', + 16: '16-race-options.html', + 17: '17-team-driving.html', + 18: '18-track-conditions.html', }; export class FixtureServer implements IFixtureServer { @@ -38,7 +40,7 @@ export class FixtureServer implements IFixtureServer { private fixturesPath: string; constructor(fixturesPath?: string) { - this.fixturesPath = fixturesPath ?? path.resolve(process.cwd(), 'html-dumps'); + this.fixturesPath = fixturesPath ?? path.resolve(process.cwd(), 'html-dumps/iracing-hosted-sessions'); } async start(port: number = 3456): Promise<{ url: string; port: number }> { @@ -122,8 +124,8 @@ export class FixtureServer implements IFixtureServer { return; } - const stepMatch = fileName.match(/step-(\d+)-/); - const stepNum = stepMatch ? Number(stepMatch[1]) : 2; + const stepMatch = fileName.match(/(\d+)-/); + const stepNum = stepMatch ? Number(stepMatch[1]) : 1; const fallbackHtml = ` @@ -144,30 +146,60 @@ export class FixtureServer implements IFixtureServer { try { const step = Number(${stepNum}); let id = null; - if (step === 2) { + let indicator = null; + if (step === 1) { id = null; // hosted sessions - not part of modal + } else if (step === 2) { + id = 'set-session-information'; + indicator = 'race-information'; } else if (step === 3) { id = 'set-session-information'; + indicator = 'race-information'; } else if (step === 4) { id = 'set-server-details'; - } else if (step === 5 || step === 6) { + indicator = 'server-details'; + } else if (step === 5) { id = 'set-admins'; + indicator = 'set-admins'; + } else if (step === 6) { + id = 'set-admins'; + indicator = 'add-admin'; } else if (step === 7) { id = 'set-time-limit'; - } else if (step === 8 || step === 9) { + indicator = 'time-limits'; + } else if (step === 8) { id = 'set-cars'; - } else if (step === 11 || step === 12) { + indicator = 'set-cars'; + } else if (step === 9) { + id = 'set-cars'; + indicator = 'add-car'; + } else if (step === 10) { + id = 'set-car-classes'; + indicator = 'set-car-classes'; + } else if (step === 11) { id = 'set-track'; + indicator = 'set-track'; + } else if (step === 12) { + id = 'set-track'; + indicator = 'add-track'; } else if (step === 13) { id = 'set-track-options'; + indicator = 'track-options'; } else if (step === 14) { id = 'set-time-of-day'; + indicator = 'time-of-day'; } else if (step === 15) { id = 'set-weather'; + indicator = 'weather'; } else if (step === 16) { id = 'set-race-options'; + indicator = 'race-options'; } else if (step === 17) { + id = 'team-driving'; + indicator = 'team-driving'; + } else if (step === 18) { id = 'set-track-conditions'; + indicator = 'track-conditions'; } if (id) { @@ -182,13 +214,18 @@ export class FixtureServer implements IFixtureServer { var modal = document.getElementById('create-race-modal'); if (modal) modal.classList.add('hidden'); } + + // Set data-indicator for step identification + if (indicator) { + document.body.setAttribute('data-indicator', indicator); + } } catch (e) { // noop } }); - + @@ -198,11 +235,21 @@ export class FixtureServer implements IFixtureServer {
@@ -235,17 +282,46 @@ export class FixtureServer implements IFixtureServer {
+ + + + + + + + + + + + + +