# Migration Status Update (October 2025) > The checklist in this document previously claimed a full migration. That was premature. Treat the legacy `@customer-portal/contracts`, `@customer-portal/schemas`, and `@customer-portal/integrations-*` packages as active until the tasks below are completed. ## Current Snapshot - **Provider exports are live:** Each domain barrel re-exports a `Providers` namespace (`packages/domain/orders/index.ts`, `packages/domain/billing/index.ts`). The subpath mappings in `packages/domain/package.json` enable imports such as `import { Providers } from "@customer-portal/domain/orders"` and `import { transformWhmcsInvoice } from "@customer-portal/domain/billing/providers/whmcs"`. - **Apps still lean on legacy packages:** BFF services and controllers continue to import contracts, schemas, and mappers from `@customer-portal/contracts`, `@customer-portal/schemas`, and `@customer-portal/integrations-*`. Examples include `apps/bff/src/modules/orders/services/order-whmcs-mapper.service.ts` and `apps/bff/src/integrations/freebit/services/freebit-operations.service.ts`. - **Legacy domain tree still mounted:** Types and schemas under `packages/domain/src/**` are still referenced by the apps. That package cannot be removed yet. - **Request schemas are misplaced:** Freebit and WHMCS request schemas remain under `packages/schemas/src/integrations/**` instead of living alongside their providers. - **Tooling and docs lag behind:** Lint rules, Dockerfiles, CI scripts, and `tsconfig` path aliases still reference the old packages. Documentation (including this file) had not been updated to reflect the real status. - **Missing domain coverage:** Auth flows, Salesforce entities, and common primitives (address, user profile, etc.) have not been migrated into dedicated `packages/domain/*` modules. ## What’s Done - Domain package exposes the new provider-aware barrels and subpath exports. - Provider mapper logic has been lifted into `packages/domain//providers/**` for the supported vendors. - New import surface has been verified locally (e.g. `Providers.Whmcs`, `Providers.Freebit`). ## Gaps to Close Before Calling the Migration “Complete” 1. **Audit & update imports** - Replace `@customer-portal/contracts/*`, `@customer-portal/schemas/*`, and `@customer-portal/integrations-*` usages across BFF, portal, and integration code with the new domain paths (`@customer-portal/domain/` and `Providers.`). - Remove fallbacks to `@customer-portal/domain` root barrels in favour of explicit subpaths. 2. **Relocate provider request schemas** - Move Freebit and WHMCS request validators into the relevant provider directories under `packages/domain//providers/`. - Update service call sites (e.g. `freebit-operations.service.ts`) to import from the new locations. 3. **Split out remaining domains** - Introduce an `auth/` domain for authentication types and schemas currently stored in `packages/domain/src/**`. - Add a `salesforce/` (or `common/salesforce.ts`) module for Salesforce entities used by integrations and configuration files. - Consolidate shared primitives in `packages/domain/common/` (address, identifiers, etc.). 4. **Retire the legacy domain package** - Once the apps reference only `packages/domain/`, delete `packages/domain/src/**` and purge related `tsconfig` and ESLint paths. - Update lint rules (e.g. `eslint.config.mjs`) to forbid importing from the legacy packages. 5. **Deprecate old packages** - After consumers migrate, archive or replace `@customer-portal/contracts`, `@customer-portal/schemas`, and `@customer-portal/integrations-*` with thin re-exports (or remove them entirely if unused). - Ensure Docker builds, CI pipelines, and documentation stop referencing these packages. 6. **Portal alignment & verification** - Apply the same import sweep to the portal (`apps/portal/**`). - Run full type-checks (`pnpm --filter @customer-portal/bff type-check`, etc.) and document remaining issues. ## Suggested Sequence 1. **Codemod imports** across BFF and portal to point at the new domain subpaths and provider namespaces. 2. **Move request schemas** for Freebit and WHMCS into their provider folders; update services accordingly. 3. **Add new domain modules** for auth, Salesforce, and shared primitives; backfill exports. 4. **Remove legacy references** from configs, ESLint, and tooling. 5. **Retire packages & update docs** once all code points at `@customer-portal/domain/*`. Track progress by running targeted type-checks and lint rules after each phase, and update this document as milestones are hit.