import { inject, injectable } from "@codemation/core"; import type { WorkspaceFileMetadata } from "@codemation/core"; import { PairedFetch } from "../../pairing/PairedFetch"; import { PairingConfigToken } from "../../pairing/PairingConfigToken"; import type { PairingConfig } from "../../pairing/pairing.types"; @injectable() export class WorkspaceFileRegistrarClient { constructor( @inject(PairedFetch) private readonly pairedFetch: PairedFetch, @inject(PairingConfigToken) private readonly pairingConfig: PairingConfig, ) {} async register(meta: WorkspaceFileMetadata): Promise { const url = `${this.pairingConfig.controlPlaneUrl}/internal/workspace-files/register`; const response = await this.pairedFetch.post(url, { fileId: meta.fileId, filename: meta.filename, contentType: meta.contentType, size: meta.size, storageKey: meta.key, }); if (!response.ok) { const body = await response.text().catch(() => ""); throw new Error(`WorkspaceFileRegistrarClient: CP register failed ${response.status} — ${body.slice(0, 200)}`); } } }