import type { ArtifactCloudOperation, ArtifactCloudOptions, ArtifactListItem, ArtifactListOptions, ArtifactListPage, ArtifactPublishedLink, ArtifactPublishResult, ArtifactWriteRequest } from '../../shared/artifacts' import type { ArtifactCloudService } from '../artifacts/artifact-cloud-service' export class RuntimeArtifactController { private service: ArtifactCloudService | null = null setService(service: ArtifactCloudService): void { this.service = service } list(options: ArtifactListOptions): Promise> { return this.requireService().list(options) } getPublishedLink( request: ArtifactCloudOptions & { sourceKey: string } ): Promise> { return this.requireService().getPublishedLink(request) } share(request: ArtifactWriteRequest): Promise> { return this.requireService().share(request) } publish(request: ArtifactWriteRequest): Promise> { return this.requireService().publish(request) } update(request: ArtifactWriteRequest): Promise> { return this.requireService().update(request) } unshare( request: ArtifactCloudOptions & { sourceKey: string } ): Promise> { return this.requireService().unshare(request) } delete(id: string, options: ArtifactCloudOptions): Promise> { return this.requireService().delete(id, options) } private requireService(): ArtifactCloudService { if (!this.service) { throw new Error("Artifact sharing isn't available on this Orca server.") } return this.service } }