website refactor

This commit is contained in:
2026-01-16 13:48:18 +01:00
parent 20a42c52fd
commit 7e02fc3ea5
796 changed files with 1946 additions and 2545 deletions

View File

@@ -1,6 +1,6 @@
import { AuthenticationState } from '../../domain/value-objects/AuthenticationState';
import { BrowserAuthenticationState } from '../../domain/value-objects/BrowserAuthenticationState';
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
/**
* Port for authentication services implementing zero-knowledge login.

View File

@@ -1,4 +1,4 @@
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import { CheckoutConfirmation } from '../../domain/value-objects/CheckoutConfirmation';
import type { CheckoutConfirmationRequestDTO } from '../dto/CheckoutConfirmationRequestDTO';

View File

@@ -1,4 +1,4 @@
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import type { CheckoutInfoDTO } from '../dto/CheckoutInfoDTO';
export interface CheckoutServicePort {

View File

@@ -1,4 +1,4 @@
import type { Result } from '@core/shared/application/Result';
import type { Result } from '@core/shared/domain/Result';
export interface SessionValidatorPort {
validateSession(): Promise<Result<boolean>>;

View File

@@ -4,7 +4,7 @@ import { AutomationLifecycleEmitterPort, LifecycleCallback } from '../ports/Auto
import { LoggerPort } from '../ports/LoggerPort';
import type { IAsyncApplicationService } from '@core/shared/application';
import { OverlayAction, OverlaySyncPort } from '../ports/OverlaySyncPort';
import { ActionAck } from '../ports/IOverlaySyncPort';
import { ActionAck } from '../ports/OverlaySyncPort';
type ConstructorArgs = {
lifecycleEmitter: AutomationLifecycleEmitterPort

View File

@@ -1,6 +1,6 @@
import { AuthenticationState } from '../../domain/value-objects/AuthenticationState';
import type { Logger } from '@core/shared/application';
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import type { AuthenticationServicePort } from '../ports/AuthenticationServicePort';
import { SessionLifetime } from '../../domain/value-objects/SessionLifetime';
import type { SessionValidatorPort } from '../ports/SessionValidatorPort';

View File

@@ -1,4 +1,4 @@
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import type { AuthenticationServicePort } from '../ports/AuthenticationServicePort';
import type { Logger } from '@core/shared/application';

View File

@@ -1,4 +1,4 @@
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import { RaceCreationResult } from '../../domain/value-objects/RaceCreationResult';
import type { CheckoutServicePort } from '../ports/CheckoutServicePort';
import type { Logger } from '@core/shared/application';

View File

@@ -1,4 +1,4 @@
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import type { Logger } from '@core/shared/application';
import type { CheckoutServicePort } from '../ports/CheckoutServicePort';
import type { CheckoutConfirmationPort } from '../ports/CheckoutConfirmationPort';

View File

@@ -1,4 +1,4 @@
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import type { AuthenticationServicePort } from '../ports/AuthenticationServicePort';
import type { Logger } from '@core/shared/application/Logger';

View File

@@ -1,5 +1,5 @@
import type { AuthenticationServicePort } from '../ports/AuthenticationServicePort';
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import { BrowserAuthenticationState } from '../../domain/value-objects/BrowserAuthenticationState';
import type { Logger } from '@core/shared/application';

View File

@@ -1,5 +1,5 @@
import type { IDomainValidationService } from '@core/shared/domain';
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
/**
* Configuration for page state validation.

View File

@@ -1,7 +1,7 @@
import { StepId } from '../value-objects/StepId';
import type { IDomainValidationService } from '@core/shared/domain';
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import { SessionState } from '../value-objects/SessionState';
export interface ValidationResult {

View File

@@ -1,8 +1,8 @@
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import { CheckoutPrice } from '../../../domain/value-objects/CheckoutPrice';
import { CheckoutState } from '../../../domain/value-objects/CheckoutState';
import type { CheckoutInfoDTO } from '../../../application/dto/CheckoutInfoDTO';
import { IRACING_SELECTORS } from './dom/IRacingSelectors';
import { IRACING_SELECTORS } from './dom/RacingSelectors';
interface Page {
locator(_selector: string): Locator;

View File

@@ -1,7 +1,7 @@
import type { Page } from 'playwright';
import type { LoggerPort } from 'apps/companion/main/automation/application/ports/LoggerPort';
import type { IPlaywrightAuthFlow } from './PlaywrightAuthFlow';
import { IRACING_URLS, IRACING_SELECTORS, IRACING_TIMEOUTS } from '../dom/IRacingSelectors';
import { IRACING_URLS, IRACING_SELECTORS, IRACING_TIMEOUTS } from '../dom/RacingSelectors';
import { AuthenticationGuard } from './AuthenticationGuard';
export class IRacingPlaywrightAuthFlow implements IPlaywrightAuthFlow {

View File

@@ -5,7 +5,7 @@ import type { AuthenticationServicePort } from '../../../../application/ports/Au
import type { LoggerPort } from '../../../../application/ports/LoggerPort';
import { AuthenticationState } from '../../../../domain/value-objects/AuthenticationState';
import { BrowserAuthenticationState } from '../../../../domain/value-objects/BrowserAuthenticationState';
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import { PlaywrightBrowserSession } from '../core/PlaywrightBrowserSession';
import { SessionCookieStore } from './SessionCookieStore';
import type { IPlaywrightAuthFlow } from './PlaywrightAuthFlow';

View File

@@ -2,7 +2,7 @@ import * as fs from 'fs/promises';
import * as path from 'path';
import { AuthenticationState } from '../../../../domain/value-objects/AuthenticationState';
import { CookieConfiguration } from '../../../../domain/value-objects/CookieConfiguration';
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import type { LoggerPort } from '../../../../application/ports/LoggerPort';
interface Cookie {

View File

@@ -16,17 +16,17 @@ import type { ModalResultDTO } from '../../../../application/dto/ModalResultDTO'
import type { AutomationResultDTO } from '../../../../application/dto/AutomationResultDTO';
import type { AuthenticationServicePort } from '../../../../application/ports/AuthenticationServicePort';
import type { LoggerPort } from '../../../../application/ports/LoggerPort';
import { Result } from '@core/shared/application/Result';
import { IRACING_SELECTORS, IRACING_URLS, IRACING_TIMEOUTS, BLOCKED_KEYWORDS } from '../dom/IRacingSelectors';
import { Result } from '@core/shared/domain/Result';
import { IRACING_SELECTORS, IRACING_URLS, IRACING_TIMEOUTS, BLOCKED_KEYWORDS } from '../dom/RacingSelectors';
import { SessionCookieStore } from '../auth/SessionCookieStore';
import { PlaywrightBrowserSession } from './PlaywrightBrowserSession';
import { PageStateValidator, PageStateValidation, PageStateValidationResult } from 'apps/companion/main/automation/domain/services/PageStateValidator';
import { IRacingDomNavigator } from '../dom/IRacingDomNavigator';
import { IRacingDomNavigator } from '../dom/RacingDomNavigator';
import { SafeClickService } from '../dom/SafeClickService';
import { IRacingDomInteractor } from '../dom/IRacingDomInteractor';
import { IRacingDomInteractor } from '../dom/RacingDomInteractor';
import { PlaywrightAuthSessionService } from '../auth/PlaywrightAuthSessionService';
import { IRacingPlaywrightAuthFlow } from '../auth/IRacingPlaywrightAuthFlow';
import { IRacingPlaywrightAuthFlow } from '../auth/RacingPlaywrightAuthFlow';
import { WizardStepOrchestrator } from './WizardStepOrchestrator';

View File

@@ -10,15 +10,15 @@ import { CheckoutState } from '../../../../domain/value-objects/CheckoutState';
import { CheckoutConfirmation } from '../../../../domain/value-objects/CheckoutConfirmation';
import type { PlaywrightConfig } from './PlaywrightAutomationAdapter';
import { PlaywrightBrowserSession } from './PlaywrightBrowserSession';
import { IRacingDomNavigator } from '../dom/IRacingDomNavigator';
import { IRacingDomInteractor } from '../dom/IRacingDomInteractor';
import { IRACING_SELECTORS } from '../dom/IRacingSelectors';
import { IRacingDomNavigator } from '../dom/RacingDomNavigator';
import { IRacingDomInteractor } from '../dom/RacingDomInteractor';
import { IRACING_SELECTORS } from '../dom/RacingSelectors';
import type {
PageStateValidation,
PageStateValidationResult,
} from '../../../../domain/services/PageStateValidator';
import type { Result } from '@core/shared/application/Result';
import type { Result } from '@core/shared/domain/Result';
interface WizardStepOrchestratorDeps {
config: Required<PlaywrightConfig>;

View File

@@ -6,7 +6,7 @@ import type { ModalResultDTO } from '../../../../application/dto/ModalResultDTO'
import { StepId } from '../../../../domain/value-objects/StepId';
import type { PlaywrightConfig } from '../core/PlaywrightAutomationAdapter';
import { PlaywrightBrowserSession } from '../core/PlaywrightBrowserSession';
import { IRACING_SELECTORS, IRACING_TIMEOUTS } from './IRacingSelectors';
import { IRACING_SELECTORS, IRACING_TIMEOUTS } from './RacingSelectors';
import { SafeClickService } from './SafeClickService';

View File

@@ -4,7 +4,7 @@ import type { NavigationResultDTO } from '../../../../application/dto/Navigation
import type { WaitResultDTO } from '../../../../application/dto/WaitResultDTO';
import type { PlaywrightConfig } from '../core/PlaywrightAutomationAdapter';
import { PlaywrightBrowserSession } from '../core/PlaywrightBrowserSession';
import { IRACING_SELECTORS, IRACING_TIMEOUTS, IRACING_URLS } from './IRacingSelectors';
import { IRACING_SELECTORS, IRACING_TIMEOUTS, IRACING_URLS } from './RacingSelectors';
export class IRacingDomNavigator {
private static readonly STEP_TO_PAGE_MAP: Record<number, string> = {

View File

@@ -1,6 +1,6 @@
import type { Page } from 'playwright';
import type { LoggerPort } from 'apps/companion/main/automation/application/ports/LoggerPort';
import { IRACING_SELECTORS, BLOCKED_KEYWORDS } from './IRacingSelectors';
import { IRACING_SELECTORS, BLOCKED_KEYWORDS } from './RacingSelectors';
import type { PlaywrightConfig } from '../core/PlaywrightAutomationAdapter';
import { PlaywrightBrowserSession } from '../core/PlaywrightBrowserSession';

View File

@@ -6,7 +6,7 @@ import type { ClickResultDTO } from '../../../../application/dto/ClickResultDTO'
import type { WaitResultDTO } from '../../../../application/dto/WaitResultDTO';
import type { ModalResultDTO } from '../../../../application/dto/ModalResultDTO';
import type { AutomationResultDTO } from '../../../../application/dto/AutomationResultDTO';
import type { IAutomationLifecycleEmitter, LifecycleCallback } from '../../IAutomationLifecycleEmitter';
import type { IAutomationLifecycleEmitter, LifecycleCallback } from '../../AutomationLifecycleEmitter';
interface MockConfig {
simulateFailures?: boolean;

View File

@@ -5,7 +5,7 @@
import type { BrowserWindow } from 'electron';
import { ipcMain } from 'electron';
import { Result } from '@core/shared/application/Result';
import { Result } from '@core/shared/domain/Result';
import type { CheckoutConfirmationPort } from '../../../application/ports/CheckoutConfirmationPort';
import type { CheckoutConfirmationRequestDTO } from '../../../application/dto/CheckoutConfirmationRequestDTO';
import { CheckoutConfirmation } from '../../../domain/value-objects/CheckoutConfirmation';

View File

@@ -18,7 +18,7 @@ import { InitiateLoginUseCase } from 'apps/companion/main/automation/application
import { ClearSessionUseCase } from 'apps/companion/main/automation/application/use-cases/ClearSessionUseCase';
import { ConfirmCheckoutUseCase } from 'apps/companion/main/automation/application/use-cases/ConfirmCheckoutUseCase';
import { OverlaySyncService } from 'apps/companion/main/automation/application/services/OverlaySyncService';
import type { IAutomationLifecycleEmitter } from '@core/automation/infrastructure//IAutomationLifecycleEmitter';
import type { IAutomationLifecycleEmitter } from '@core/automation/infrastructure//AutomationLifecycleEmitter';
// Infrastructure
import { InMemorySessionRepository } from 'apps/companion/main/automation/infrastructure/repositories/InMemorySessionRepository';

View File

@@ -6,7 +6,7 @@ import { StepId } from 'apps/companion/main/automation/domain/value-objects/Step
import { AuthenticationState } from 'apps/companion/main/automation/domain/value-objects/AuthenticationState';
import { ElectronCheckoutConfirmationAdapter } from 'core/automation/infrastructure//ipc/ElectronCheckoutConfirmationAdapter';
import type { OverlayAction } from 'apps/companion/main/automation/application/ports/OverlaySyncPort';
import type { IAutomationLifecycleEmitter } from 'core/automation/infrastructure//IAutomationLifecycleEmitter';
import type { IAutomationLifecycleEmitter } from 'core/automation/infrastructure//AutomationLifecycleEmitter';
let progressMonitorInterval: NodeJS.Timeout | null = null;
let lifecycleSubscribed = false;