import { implement, ORPCError } from "@orpc/server"; import type { Actor } from "@rakazo/contracts"; import { appContract } from "@rakazo/contracts"; import type { PrismaClient } from "@rakazo/db"; export interface MediaRouterDeps { prisma: PrismaClient; dataDir: string; } // Phase A scaffold: every procedure is replaced by its real implementation. function notImplemented(): never { throw new ORPCError("NOT_IMPLEMENTED", { message: "Media Studio is not available yet" }); } export function createMediaRouter(_deps: MediaRouterDeps) { const os = implement(appContract.media).$context<{ actor: Actor | null; signal?: AbortSignal }>(); const authed = os.use(async ({ context, next }) => { if (!context.actor) throw new ORPCError("UNAUTHORIZED"); return next({ context: { ...context, actor: context.actor } }); }); return os.router({ capabilities: authed.capabilities.handler(notImplemented), sources: { list: authed.sources.list.handler(notImplemented), createFolder: authed.sources.createFolder.handler(notImplemented), registerClient: authed.sources.registerClient.handler(notImplemented), pushItems: authed.sources.pushItems.handler(notImplemented), sync: authed.sources.sync.handler(notImplemented), remove: authed.sources.remove.handler(notImplemented), }, assets: { search: authed.assets.search.handler(notImplemented), get: authed.assets.get.handler(notImplemented), setPaidOnly: authed.assets.setPaidOnly.handler(notImplemented), requestUpload: authed.assets.requestUpload.handler(notImplemented), }, uploads: { begin: authed.uploads.begin.handler(notImplemented), status: authed.uploads.status.handler(notImplemented), complete: authed.uploads.complete.handler(notImplemented), }, collections: { list: authed.collections.list.handler(notImplemented), get: authed.collections.get.handler(notImplemented), rename: authed.collections.rename.handler(notImplemented), merge: authed.collections.merge.handler(notImplemented), split: authed.collections.split.handler(notImplemented), createManual: authed.collections.createManual.handler(notImplemented), recluster: authed.collections.recluster.handler(notImplemented), }, people: { list: authed.people.list.handler(notImplemented), update: authed.people.update.handler(notImplemented), merge: authed.people.merge.handler(notImplemented), assignTrack: authed.people.assignTrack.handler(notImplemented), recordConsent: authed.people.recordConsent.handler(notImplemented), remove: authed.people.remove.handler(notImplemented), }, marks: { list: authed.marks.list.handler(notImplemented), create: authed.marks.create.handler(notImplemented), update: authed.marks.update.handler(notImplemented), remove: authed.marks.remove.handler(notImplemented), }, brandKits: { list: authed.brandKits.list.handler(notImplemented), upsert: authed.brandKits.upsert.handler(notImplemented), remove: authed.brandKits.remove.handler(notImplemented), templates: authed.brandKits.templates.handler(notImplemented), introVariants: authed.brandKits.introVariants.handler(notImplemented), }, profiles: { list: authed.profiles.list.handler(notImplemented), get: authed.profiles.get.handler(notImplemented), }, projects: { list: authed.projects.list.handler(notImplemented), get: authed.projects.get.handler(notImplemented), create: authed.projects.create.handler(notImplemented), update: authed.projects.update.handler(notImplemented), remove: authed.projects.remove.handler(notImplemented), autoPlan: authed.projects.autoPlan.handler(notImplemented), }, plans: { submit: authed.plans.submit.handler(notImplemented), }, renders: { start: authed.renders.start.handler(notImplemented), get: authed.renders.get.handler(notImplemented), cancel: authed.renders.cancel.handler(notImplemented), thumbnails: authed.renders.thumbnails.handler(notImplemented), }, marketing: { copy: authed.marketing.copy.handler(notImplemented), }, publications: { list: authed.publications.list.handler(notImplemented), create: authed.publications.create.handler(notImplemented), bundle: authed.publications.bundle.handler(notImplemented), markPublished: authed.publications.markPublished.handler(notImplemented), cancel: authed.publications.cancel.handler(notImplemented), }, metrics: { mappings: authed.metrics.mappings.handler(notImplemented), saveMapping: authed.metrics.saveMapping.handler(notImplemented), importCsv: authed.metrics.importCsv.handler(notImplemented), record: authed.metrics.record.handler(notImplemented), funnel: authed.metrics.funnel.handler(notImplemented), }, }); }