1.3 KiB
1.3 KiB
ADR-007: Drop the Dual-Mode CMS Client Wrapper
Status: Accepted Date: 2026-05-04
Context
ADR-004 introduced @repo/cms-client as a standalone wrapper supporting both Local API and HTTP modes. It was never used in production after Payload 3.x solidified its Local API as the primary pattern.
Decision
Delete the wrapper. Feature payload-backed repositories call getPayload({ config }) directly. The config is injected via constructor, avoiding hard coupling to @repo/cms-core at import time.
Example:
export class PayloadArticlesRepository implements IArticlesRepository {
constructor(private config: Config) {}
async getById(id: string) {
const payload = await getPayload({ config: this.config });
return payload.findByID({ collection: "articles", id });
}
}
Consequences
- One fewer abstraction layer — repositories work directly with Payload's typed API
- No "modes" — always use Local API from server code
- Package graph stays acyclic: feature packages never import
@repo/cms-client apps/cmscan directly boot Payload with the assembled config
Alternatives Considered
- Keep the wrapper for "future-proofing": Payload 3.x is stable; wrapper was never activated in practice
- Add HTTP mode later if needed: Simple to implement when actually required